diff --git a/air/src/execution_step/errors/catchable_errors.rs b/air/src/execution_step/errors/catchable_errors.rs index a309116f..a5cc3698 100644 --- a/air/src/execution_step/errors/catchable_errors.rs +++ b/air/src/execution_step/errors/catchable_errors.rs @@ -14,8 +14,8 @@ * limitations under the License. */ +use super::ErrorAffectable; use super::Joinable; -use super::LastErrorAffectable; use crate::execution_step::execution_context::errors::StreamMapError; use crate::execution_step::execution_context::LastErrorObjectError; use crate::execution_step::lambda_applier::LambdaError; @@ -40,11 +40,11 @@ pub enum CatchableError { LocalServiceError(i32, Rc), /// This error type is produced by a match to notify xor that compared values aren't equal. - #[error("match is used without corresponding xor")] + #[error("compared values do not match")] MatchValuesNotEqual, /// This error type is produced by a mismatch to notify xor that compared values aren't equal. - #[error("mismatch is used without corresponding xor")] + #[error("compared values do not mismatch")] MismatchValuesEqual, /// Variable with such a name wasn't defined during AIR script execution. @@ -119,13 +119,17 @@ impl ToErrorCode for CatchableError { } } -impl LastErrorAffectable for CatchableError { +impl ErrorAffectable for CatchableError { fn affects_last_error(&self) -> bool { !matches!( self, CatchableError::MatchValuesNotEqual | CatchableError::MismatchValuesEqual ) } + + fn affects_error(&self) -> bool { + true + } } macro_rules! log_join { diff --git a/air/src/execution_step/errors/last_error_affectable.rs b/air/src/execution_step/errors/error_effectable.rs similarity index 84% rename from air/src/execution_step/errors/last_error_affectable.rs rename to air/src/execution_step/errors/error_effectable.rs index b65ca648..e9edbb7f 100644 --- a/air/src/execution_step/errors/last_error_affectable.rs +++ b/air/src/execution_step/errors/error_effectable.rs @@ -14,9 +14,10 @@ * limitations under the License. */ -/// This trait is intended to figuring out whether a last error should be set or not. -pub(crate) trait LastErrorAffectable { +/// This trait controls whether to set %last_error% and :error: or not. +pub(crate) trait ErrorAffectable { /// Return true, if this error type affects last error /// (meaning that it should be set after occurring such an error). fn affects_last_error(&self) -> bool; + fn affects_error(&self) -> bool; } diff --git a/air/src/execution_step/errors/execution_errors.rs b/air/src/execution_step/errors/execution_errors.rs index 4b49386e..9e9258fa 100644 --- a/air/src/execution_step/errors/execution_errors.rs +++ b/air/src/execution_step/errors/execution_errors.rs @@ -15,8 +15,8 @@ */ use super::CatchableError; +use super::ErrorAffectable; use super::Joinable; -use super::LastErrorAffectable; use super::UncatchableError; use crate::ToErrorCode; @@ -91,11 +91,18 @@ impl Joinable for ExecutionError { } } -impl LastErrorAffectable for ExecutionError { +impl ErrorAffectable for ExecutionError { fn affects_last_error(&self) -> bool { match self { ExecutionError::Catchable(err) => err.affects_last_error(), ExecutionError::Uncatchable(_) => false, } } + + fn affects_error(&self) -> bool { + match self { + ExecutionError::Catchable(_) => true, + ExecutionError::Uncatchable(_) => false, + } + } } diff --git a/air/src/execution_step/errors/mod.rs b/air/src/execution_step/errors/mod.rs index 2afcb2e0..a7f47d33 100644 --- a/air/src/execution_step/errors/mod.rs +++ b/air/src/execution_step/errors/mod.rs @@ -15,16 +15,16 @@ */ mod catchable_errors; +mod error_effectable; mod execution_errors; mod joinable; -mod last_error_affectable; mod uncatchable_errors; pub use catchable_errors::CatchableError; pub use execution_errors::ExecutionError; pub use uncatchable_errors::UncatchableError; +pub(crate) use error_effectable::ErrorAffectable; pub(crate) use joinable::Joinable; -pub(crate) use last_error_affectable::LastErrorAffectable; use super::Stream; diff --git a/air/src/execution_step/execution_context/context.rs b/air/src/execution_step/execution_context/context.rs index 7d2773cd..78ff9739 100644 --- a/air/src/execution_step/execution_context/context.rs +++ b/air/src/execution_step/execution_context/context.rs @@ -14,12 +14,16 @@ * limitations under the License. */ +use super::ErrorDescriptor; use super::ExecutionCidState; -use super::LastError; +use super::InstructionError; use super::LastErrorDescriptor; use super::Scalars; use super::StreamMaps; use super::Streams; +use crate::execution_step::ErrorAffectable; +use crate::execution_step::RcSecurityTetraplet; +use crate::ToErrorCode; use air_execution_info_collector::InstructionTracker; use air_interpreter_cid::CID; @@ -51,9 +55,12 @@ pub(crate) struct ExecutionCtx<'i> { pub(crate) run_parameters: RcRunParameters, /// Last error produced by local service. - /// None means that there weren't any error. + /// There is the special not-an-error value means there was no error. pub(crate) last_error_descriptor: LastErrorDescriptor, + /// Error produced by some instructions, e.g. call, match, fail. + pub(crate) error_descriptor: ErrorDescriptor, + /// Indicates that previous executed subgraph is complete. /// A subgraph treats as a complete if all subgraph elements satisfy the following rules: /// - at least one of par subgraphs is completed @@ -116,8 +123,12 @@ impl<'i> ExecutionCtx<'i> { } } - pub(crate) fn last_error(&self) -> &LastError { - self.last_error_descriptor.last_error() + pub(crate) fn last_error(&self) -> &InstructionError { + self.last_error_descriptor.error() + } + + pub(crate) fn error(&self) -> &InstructionError { + self.error_descriptor.error() } pub(crate) fn next_call_request_id(&mut self) -> u32 { @@ -150,6 +161,41 @@ impl ExecutionCtx<'_> { pub(crate) fn flush_subgraph_completeness(&mut self) { self.subgraph_completeness = true; } + + // This routine sets %last_error% and :error:. + // Most instructions, except Call, Canon, CanonMapScalar does not set :error:.$.peer_id b/c + // it would be a non-deterministic peer_id. + pub(crate) fn set_errors( + &mut self, + error: &(impl ErrorAffectable + ToErrorCode + ToString), + instruction: &str, + tetraplet: Option, + use_tetraplet_and_log_peer_id: bool, + ) { + let last_error_peer_id = match &tetraplet { + // use tetraplet if they set, because an error could be propagated from data + // (from CallServiceFailed state) and exec_ctx.run_parameters.current_peer_id won't mean + // a peer where the error was occurred + Some(tetraplet) if use_tetraplet_and_log_peer_id => Some(tetraplet.peer_pk.as_str()), + _ => Some(self.run_parameters.current_peer_id.as_str()), + }; + + self.last_error_descriptor.try_to_set_last_error_from_exec_error( + error, + instruction, + last_error_peer_id, + tetraplet.clone(), + ); + + let peer_id = if use_tetraplet_and_log_peer_id { + last_error_peer_id + } else { + None + }; + + self.error_descriptor + .try_to_set_error_from_exec_error(error, instruction, peer_id, tetraplet.clone()); + } } /// Helper struct for ExecCtx construction. diff --git a/air/src/execution_step/execution_context/instruction_error/error_descriptor.rs b/air/src/execution_step/execution_context/instruction_error/error_descriptor.rs new file mode 100644 index 00000000..cf426e32 --- /dev/null +++ b/air/src/execution_step/execution_context/instruction_error/error_descriptor.rs @@ -0,0 +1,59 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use super::no_error; +use super::InstructionError; +use crate::execution_step::ErrorAffectable; +use crate::execution_step::RcSecurityTetraplet; +use crate::ToErrorCode; + +pub(crate) struct ErrorDescriptor { + error: InstructionError, +} + +impl ErrorDescriptor { + pub(crate) fn try_to_set_error_from_exec_error( + &mut self, + error: &(impl ErrorAffectable + ToErrorCode + ToString), + instruction: &str, + peer_id_option: Option<&str>, + tetraplet: Option, + ) { + use super::get_instruction_error_from_exec_error; + + if !error.affects_error() { + return; + } + + self.error = get_instruction_error_from_exec_error(error, instruction, peer_id_option, tetraplet); + } + + pub(crate) fn error(&self) -> &InstructionError { + &self.error + } + + pub(crate) fn clear_error(&mut self) { + self.error = no_error(); + } +} + +impl Default for ErrorDescriptor { + fn default() -> Self { + let error = no_error(); + + Self { error } + } +} diff --git a/air/src/execution_step/execution_context/last_error/errors.rs b/air/src/execution_step/execution_context/instruction_error/errors.rs similarity index 100% rename from air/src/execution_step/execution_context/last_error/errors.rs rename to air/src/execution_step/execution_context/instruction_error/errors.rs diff --git a/air/src/execution_step/execution_context/instruction_error/errors_utils.rs b/air/src/execution_step/execution_context/instruction_error/errors_utils.rs new file mode 100644 index 00000000..b6607632 --- /dev/null +++ b/air/src/execution_step/execution_context/instruction_error/errors_utils.rs @@ -0,0 +1,73 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use air_interpreter_data::Provenance; + +use super::instruction_error_definition::error_from_raw_fields; +use super::instruction_error_definition::error_from_raw_fields_w_peerid; +use super::InstructionError; +use crate::execution_step::ErrorAffectable; +use crate::execution_step::RcSecurityTetraplet; +use crate::JValue; +use crate::ToErrorCode; + +use std::rc::Rc; + +pub(crate) fn get_instruction_error_from_exec_error( + error: &(impl ErrorAffectable + ToErrorCode + ToString), + instruction: &str, + peer_id_option: Option<&str>, + tetraplet: Option, +) -> InstructionError { + // it is not a call result, but generated from a limited set of unjoinable errors + let provenance = Provenance::literal(); + + get_instruction_error_from_ingredients( + error.to_error_code(), + &error.to_string(), + instruction, + peer_id_option, + tetraplet, + provenance, + ) +} + +pub(crate) fn get_instruction_error_from_ingredients( + error_code: i64, + error_message: &str, + instruction: &str, + peer_id_option: Option<&str>, + tetraplet: Option, + provenance: Provenance, +) -> InstructionError { + let error_object = match peer_id_option { + Some(peer_id) => error_from_raw_fields_w_peerid(error_code, error_message, instruction, peer_id), + None => error_from_raw_fields(error_code, error_message, instruction), + }; + get_instruction_error_from_error_object(Rc::new(error_object), tetraplet, provenance) +} + +pub(crate) fn get_instruction_error_from_error_object( + error: Rc, + tetraplet: Option, + provenance: Provenance, +) -> InstructionError { + InstructionError { + error, + tetraplet, + provenance, + } +} diff --git a/air/src/execution_step/execution_context/last_error/last_error_definition.rs b/air/src/execution_step/execution_context/instruction_error/instruction_error_definition.rs similarity index 80% rename from air/src/execution_step/execution_context/last_error/last_error_definition.rs rename to air/src/execution_step/execution_context/instruction_error/instruction_error_definition.rs index 8155e060..e2a1e196 100644 --- a/air/src/execution_step/execution_context/last_error/last_error_definition.rs +++ b/air/src/execution_step/execution_context/instruction_error/instruction_error_definition.rs @@ -32,14 +32,13 @@ pub const PEER_ID_FIELD_NAME: &str = "peer_id"; pub const NO_ERROR_MESSAGE: &str = ""; pub const NO_ERROR_ERROR_CODE: i64 = 0; -/// This struct is intended to track the last arisen error. -/// LastError is essentially a scalar value with support of lambda expressions. -/// The only differences from a scalar are -/// - it's accessed by %last_error% literal -/// - if it's unset before the usage, JValue::Null will be used without join behaviour -/// - it's a global scalar, meaning that fold and new scopes doesn't apply for it +/// This struct tracks the last arisen error. +/// :error: and %last_error% are special scalar values that support lenses. +/// There are some differences b/w mentioned errors and an ordinary scalar: +/// - they are set to not-an-error value by default +/// - these are global scalars, meaning that fold and new scopes do not apply for it #[derive(Debug, Clone, Serialize, Deserialize)] -pub struct LastError { +pub struct InstructionError { /// Error object that represents the last occurred error. pub error: Rc, @@ -50,7 +49,12 @@ pub struct LastError { pub provenance: Provenance, } -pub(crate) fn error_from_raw_fields(error_code: i64, error_message: &str, instruction: &str, peer_id: &str) -> JValue { +pub(crate) fn error_from_raw_fields_w_peerid( + error_code: i64, + error_message: &str, + instruction: &str, + peer_id: &str, +) -> JValue { serde_json::json!({ ERROR_CODE_FIELD_NAME: error_code, MESSAGE_FIELD_NAME: error_message, @@ -59,6 +63,14 @@ pub(crate) fn error_from_raw_fields(error_code: i64, error_message: &str, instru }) } +pub(crate) fn error_from_raw_fields(error_code: i64, error_message: &str, instruction: &str) -> JValue { + serde_json::json!({ + ERROR_CODE_FIELD_NAME: error_code, + MESSAGE_FIELD_NAME: error_message, + INSTRUCTION_FIELD_NAME: instruction, + }) +} + /// Checks that a scalar is a value of an object types that contains at least two fields: /// - error_code /// - message @@ -116,16 +128,16 @@ fn ensure_jvalue_is_string( } } -pub fn no_error_last_error_object() -> JValue { +pub fn no_error_object() -> JValue { json!({ ERROR_CODE_FIELD_NAME: NO_ERROR_ERROR_CODE, MESSAGE_FIELD_NAME: NO_ERROR_MESSAGE, }) } -pub fn no_error_last_error() -> LastError { - LastError { - error: Rc::new(no_error_last_error_object()), +pub fn no_error() -> InstructionError { + InstructionError { + error: Rc::new(no_error_object()), tetraplet: None, provenance: Provenance::literal(), } diff --git a/air/src/execution_step/execution_context/last_error/last_error_descriptor.rs b/air/src/execution_step/execution_context/instruction_error/last_error_descriptor.rs similarity index 54% rename from air/src/execution_step/execution_context/last_error/last_error_descriptor.rs rename to air/src/execution_step/execution_context/instruction_error/last_error_descriptor.rs index 80ba8ecb..83ae2518 100644 --- a/air/src/execution_step/execution_context/last_error/last_error_descriptor.rs +++ b/air/src/execution_step/execution_context/instruction_error/last_error_descriptor.rs @@ -16,10 +16,9 @@ use air_interpreter_data::Provenance; -use super::last_error_definition::error_from_raw_fields; -use super::no_error_last_error; -use super::LastError; -use crate::execution_step::LastErrorAffectable; +use super::no_error; +use super::InstructionError; +use crate::execution_step::ErrorAffectable; use crate::execution_step::RcSecurityTetraplet; use crate::JValue; use crate::ToErrorCode; @@ -27,7 +26,7 @@ use crate::ToErrorCode; use std::rc::Rc; pub(crate) struct LastErrorDescriptor { - last_error: LastError, + error: InstructionError, /// True, if last error could be set. This flag is used to distinguish /// whether an error is being bubbled up from the bottom or just encountered. @@ -36,44 +35,23 @@ pub(crate) struct LastErrorDescriptor { } impl LastErrorDescriptor { - pub(crate) fn try_to_set_from_error( + pub(crate) fn try_to_set_last_error_from_exec_error( &mut self, - error: &(impl LastErrorAffectable + ToErrorCode + ToString), + error: &(impl ErrorAffectable + ToErrorCode + ToString), instruction: &str, - peer_id: &str, + peer_id_option: Option<&str>, tetraplet: Option, - ) -> bool { - // this check is optimization to prevent creation of an error object in case if error - // couldn't be set + ) { + use super::get_instruction_error_from_exec_error; + + // This check is an optimization to prevent creation of an error object in case if error + // must not be set. if !self.error_can_be_set || !error.affects_last_error() { - return false; + return; } - // it is not a call result, but generated from a limited set of unjoinable errors - let provenance = Provenance::literal(); - - self.set_from_ingredients( - error.to_error_code(), - &error.to_string(), - instruction, - peer_id, - tetraplet, - provenance, - ) - } - - pub(crate) fn set_from_ingredients( - &mut self, - error_code: i64, - error_message: &str, - instruction: &str, - peer_id: &str, - tetraplet: Option, - provenance: Provenance, - ) -> bool { - let error_object = error_from_raw_fields(error_code, error_message, instruction, peer_id); - self.set_from_error_object(Rc::new(error_object), tetraplet, provenance); - true + self.error = get_instruction_error_from_exec_error(error, instruction, peer_id_option, tetraplet); + self.error_can_be_set = false; } pub(crate) fn set_from_error_object( @@ -82,16 +60,14 @@ impl LastErrorDescriptor { tetraplet: Option, provenance: Provenance, ) { - self.last_error = LastError { - error, - tetraplet, - provenance, - }; + use super::get_instruction_error_from_error_object; + + self.error = get_instruction_error_from_error_object(error, tetraplet, provenance); self.error_can_be_set = false; } - pub(crate) fn last_error(&self) -> &LastError { - &self.last_error + pub(crate) fn error(&self) -> &InstructionError { + &self.error } pub(crate) fn meet_xor_right_branch(&mut self) { @@ -105,10 +81,10 @@ impl LastErrorDescriptor { impl Default for LastErrorDescriptor { fn default() -> Self { - let last_error = no_error_last_error(); + let error = no_error(); Self { - last_error, + error, error_can_be_set: true, } } diff --git a/air/src/execution_step/execution_context/instruction_error/mod.rs b/air/src/execution_step/execution_context/instruction_error/mod.rs new file mode 100644 index 00000000..47ffa4db --- /dev/null +++ b/air/src/execution_step/execution_context/instruction_error/mod.rs @@ -0,0 +1,37 @@ +/* + * Copyright 2023 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +mod error_descriptor; +mod errors; +mod errors_utils; +mod instruction_error_definition; +mod last_error_descriptor; + +pub use errors::LastErrorObjectError; +pub use instruction_error_definition::no_error; +pub use instruction_error_definition::no_error_object; +pub use instruction_error_definition::InstructionError; +pub use instruction_error_definition::ERROR_CODE_FIELD_NAME; +pub use instruction_error_definition::INSTRUCTION_FIELD_NAME; +pub use instruction_error_definition::MESSAGE_FIELD_NAME; +pub use instruction_error_definition::NO_ERROR_ERROR_CODE; +pub use instruction_error_definition::NO_ERROR_MESSAGE; + +pub(crate) use error_descriptor::ErrorDescriptor; +pub(super) use errors_utils::*; +pub(crate) use instruction_error_definition::check_error_object; +pub(crate) use instruction_error_definition::error_from_raw_fields_w_peerid; +pub(crate) use last_error_descriptor::LastErrorDescriptor; diff --git a/air/src/execution_step/execution_context/last_error/mod.rs b/air/src/execution_step/execution_context/last_error/mod.rs deleted file mode 100644 index 2ae16e35..00000000 --- a/air/src/execution_step/execution_context/last_error/mod.rs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2020 Fluence Labs Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -mod errors; -mod last_error_definition; -mod last_error_descriptor; - -pub use errors::LastErrorObjectError; -pub use last_error_definition::no_error_last_error; -pub use last_error_definition::no_error_last_error_object; -pub use last_error_definition::LastError; -pub use last_error_definition::ERROR_CODE_FIELD_NAME; -pub use last_error_definition::INSTRUCTION_FIELD_NAME; -pub use last_error_definition::MESSAGE_FIELD_NAME; -pub use last_error_definition::NO_ERROR_ERROR_CODE; -pub use last_error_definition::NO_ERROR_MESSAGE; - -pub(crate) use last_error_definition::check_error_object; -pub(crate) use last_error_definition::error_from_raw_fields; -pub(crate) use last_error_descriptor::LastErrorDescriptor; diff --git a/air/src/execution_step/execution_context/mod.rs b/air/src/execution_step/execution_context/mod.rs index 813220cf..d9d3f2c3 100644 --- a/air/src/execution_step/execution_context/mod.rs +++ b/air/src/execution_step/execution_context/mod.rs @@ -16,12 +16,12 @@ mod cid_state; mod context; -mod last_error; +mod instruction_error; mod scalar_variables; mod stream_maps_variables; mod streams_variables; -pub use last_error::*; +pub use instruction_error::*; pub use cid_state::ExecutionCidState; pub(crate) use context::*; diff --git a/air/src/execution_step/instructions/ap/apply_to_arguments.rs b/air/src/execution_step/instructions/ap/apply_to_arguments.rs index 8127ba5a..9ca59af7 100644 --- a/air/src/execution_step/instructions/ap/apply_to_arguments.rs +++ b/air/src/execution_step/instructions/ap/apply_to_arguments.rs @@ -23,8 +23,9 @@ use crate::execution_step::PEEK_ALLOWED_ON_NON_EMPTY; use crate::UncatchableError; use air_interpreter_data::Provenance; -use air_lambda_parser::LambdaAST; +use air_lambda_ast::LambdaAST; use air_parser::ast; +use air_parser::ast::InstructionErrorAST; pub(crate) fn apply_to_arg( argument: &ast::ApArgument<'_>, @@ -36,6 +37,7 @@ pub(crate) fn apply_to_arg( let result = match argument { InitPeerId => apply_const(exec_ctx.run_parameters.init_peer_id.as_ref(), exec_ctx, trace_ctx), + Error(instruction_error) => apply_error(instruction_error, exec_ctx, trace_ctx), LastError(error_accessor) => apply_last_error(error_accessor, exec_ctx, trace_ctx), Literal(value) => apply_const(*value, exec_ctx, trace_ctx), Timestamp => apply_const(exec_ctx.run_parameters.timestamp, exec_ctx, trace_ctx), @@ -68,6 +70,21 @@ fn apply_const( Ok(value) } +fn apply_error<'ctx>( + instruction_error: &InstructionErrorAST<'ctx>, + exec_ctx: &ExecutionCtx<'ctx>, + trace_ctx: &TraceHandler, +) -> ExecutionResult { + let (value, mut tetraplets, provenance) = instruction_error.resolve(exec_ctx)?; + let value = Rc::new(value); + // removing is safe because prepare_last_error always returns a vec with one element. + let tetraplet = tetraplets.remove(0); + let position = trace_ctx.trace_pos().map_err(UncatchableError::from)?; + + let result = ValueAggregate::new(value, tetraplet, position, provenance); + Ok(result) +} + fn apply_last_error<'i>( error_accessor: &Option>, exec_ctx: &ExecutionCtx<'i>, diff --git a/air/src/execution_step/instructions/call.rs b/air/src/execution_step/instructions/call.rs index 38eb3574..0fecaa19 100644 --- a/air/src/execution_step/instructions/call.rs +++ b/air/src/execution_step/instructions/call.rs @@ -41,44 +41,43 @@ impl<'i> super::ExecutableInstruction<'i> for Call<'i> { exec_ctx.tracker.meet_call(); let resolved_call = joinable!(ResolvedCall::new(self, exec_ctx), exec_ctx, ()) - .map_err(|e| set_last_error(self, exec_ctx, e, None))?; + .map_err(|e| set_errors(self, exec_ctx, e, None))?; let tetraplet = resolved_call.as_tetraplet(); joinable!(resolved_call.execute(self, exec_ctx, trace_ctx), exec_ctx, ()) - .map_err(|e| set_last_error(self, exec_ctx, e, Some(tetraplet))) + .map_err(|e| set_errors(self, exec_ctx, e, Some(tetraplet))) } } -fn set_last_error<'i>( +fn set_errors<'i>( call: &Call<'i>, exec_ctx: &mut ExecutionCtx<'i>, execution_error: ExecutionError, tetraplet: Option, ) -> ExecutionError { + use air_parser::ast::PeerIDErrorLogable; + let catchable_error = match execution_error { ExecutionError::Catchable(catchable) => catchable, ExecutionError::Uncatchable(_) => return execution_error, }; - let current_peer_id = match &tetraplet { - // use tetraplet if they set, because an error could be propagated from data - // (from CallServiceFailed state) and exec_ctx.run_parameters.current_peer_id won't mean - // a peer where the error was occurred - Some(tetraplet) => tetraplet.peer_pk.clone(), - None => exec_ctx.run_parameters.current_peer_id.to_string(), - }; - - log::debug!( - "call failed with an error `{}`, peerId `{}`", - catchable_error, - current_peer_id - ); - - let _ = exec_ctx.last_error_descriptor.try_to_set_from_error( + exec_ctx.set_errors( catchable_error.as_ref(), &call.to_string(), - ¤t_peer_id, - tetraplet, + tetraplet.clone(), + call.log_errors_with_peer_id(), ); + + let peer_id = match &tetraplet { + // use tetraplet if it is set, because an error could be propagated from data + // (from CallServiceFailed state) and exec_ctx.run_parameters.current_peer_id won't mean + // a peer where the error was occurred + Some(tetraplet) => tetraplet.peer_pk.as_str(), + None => exec_ctx.run_parameters.current_peer_id.as_str(), + }; + + log::debug!("call failed with an error `{}`, peerId `{}`", catchable_error, peer_id); + ExecutionError::Catchable(catchable_error) } diff --git a/air/src/execution_step/instructions/fail.rs b/air/src/execution_step/instructions/fail.rs index 60a50474..ae16d4a5 100644 --- a/air/src/execution_step/instructions/fail.rs +++ b/air/src/execution_step/instructions/fail.rs @@ -20,7 +20,6 @@ use super::TraceHandler; use crate::execution_step::execution_context::check_error_object; use crate::execution_step::resolver::Resolvable; use crate::execution_step::CatchableError; -use crate::execution_step::LastError; use crate::execution_step::RcSecurityTetraplet; use crate::log_instruction; use crate::ExecutionError; @@ -75,7 +74,7 @@ fn fail_with_literals( fail: &Fail<'_>, exec_ctx: &mut ExecutionCtx<'_>, ) -> ExecutionResult<()> { - let error_object = crate::execution_step::execution_context::error_from_raw_fields( + let error_object = crate::execution_step::execution_context::error_from_raw_fields_w_peerid( error_code, error_message, &fail.to_string(), @@ -103,11 +102,13 @@ fn fail_with_canon_stream( } fn fail_with_last_error(exec_ctx: &mut ExecutionCtx<'_>) -> ExecutionResult<()> { - let LastError { + use crate::execution_step::InstructionError; + + let InstructionError { error, tetraplet, provenance, - } = exec_ctx.last_error_descriptor.last_error(); + } = exec_ctx.last_error_descriptor.error(); // to avoid warnings from https://github.com/rust-lang/rust/issues/59159 let error = error.clone(); diff --git a/air/src/execution_step/instructions/mod.rs b/air/src/execution_step/instructions/mod.rs index e8e6ca6d..234bc7c8 100644 --- a/air/src/execution_step/instructions/mod.rs +++ b/air/src/execution_step/instructions/mod.rs @@ -46,21 +46,14 @@ use super::ExecutionResult; use crate::execution_step::TraceHandler; use air_parser::ast::Instruction; +use air_parser::ast::PeerIDErrorLogable; -// TODO: move all error set logic from macros into the execution context - -/// Executes instruction and updates last error if needed. +/// Executes an instruction and updates %last_error% and :error: if necessary. macro_rules! execute { ($self:expr, $instr:expr, $exec_ctx:ident, $trace_ctx:ident) => {{ match $instr.execute($exec_ctx, $trace_ctx) { Err(e) => { - $exec_ctx.last_error_descriptor.try_to_set_from_error( - &e, - // TODO: avoid excess copying here - &$instr.to_string(), - $exec_ctx.run_parameters.current_peer_id.as_ref(), - None, - ); + $exec_ctx.set_errors(&e, &$instr.to_string(), None, $instr.log_errors_with_peer_id()); Err(e) } v => v, @@ -76,13 +69,14 @@ impl<'i> ExecutableInstruction<'i> for Instruction<'i> { fn execute(&self, exec_ctx: &mut ExecutionCtx<'i>, trace_ctx: &mut TraceHandler) -> ExecutionResult<()> { match self { // call isn't wrapped by the execute macro because - // it internally sets last_error with resolved triplet + // it internally maps some Catchables into %last_error%/:error: using resolved triplet. + // Both canons and call set :error:.$.peer_id whilst other instructions do not. Instruction::Call(call) => call.execute(exec_ctx, trace_ctx), - Instruction::Ap(ap) => execute!(self, ap, exec_ctx, trace_ctx), - Instruction::ApMap(ap_map) => execute!(self, ap_map, exec_ctx, trace_ctx), Instruction::Canon(canon) => execute!(self, canon, exec_ctx, trace_ctx), Instruction::CanonStreamMapScalar(canon) => execute!(self, canon, exec_ctx, trace_ctx), + Instruction::Ap(ap) => execute!(self, ap, exec_ctx, trace_ctx), + Instruction::ApMap(ap_map) => execute!(self, ap_map, exec_ctx, trace_ctx), Instruction::Fail(fail) => execute!(self, fail, exec_ctx, trace_ctx), Instruction::FoldScalar(fold) => execute!(self, fold, exec_ctx, trace_ctx), Instruction::FoldStream(fold) => execute!(self, fold, exec_ctx, trace_ctx), diff --git a/air/src/execution_step/instructions/xor.rs b/air/src/execution_step/instructions/xor.rs index 35308f95..092bf648 100644 --- a/air/src/execution_step/instructions/xor.rs +++ b/air/src/execution_step/instructions/xor.rs @@ -33,7 +33,13 @@ impl<'i> super::ExecutableInstruction<'i> for Xor<'i> { exec_ctx.flush_subgraph_completeness(); exec_ctx.last_error_descriptor.meet_xor_right_branch(); - self.1.execute(exec_ctx, trace_ctx) + + let right_subgraph_result = self.1.execute(exec_ctx, trace_ctx); + // This sets :error: to a no-error state. + // Please note the right_subgraph_result might be an Error that bubbles up to an :error: + // above this execute(). + exec_ctx.error_descriptor.clear_error(); + right_subgraph_result } res => res, } diff --git a/air/src/execution_step/mod.rs b/air/src/execution_step/mod.rs index 9a785ba5..083ecdc8 100644 --- a/air/src/execution_step/mod.rs +++ b/air/src/execution_step/mod.rs @@ -40,10 +40,10 @@ pub mod errors_prelude { pub(super) use self::instructions::ExecutableInstruction; pub(super) use self::instructions::FoldState; +pub(crate) use errors::ErrorAffectable; pub(crate) use errors::Joinable; -pub(crate) use errors::LastErrorAffectable; pub(crate) use execution_context::ExecutionCtx; -pub(crate) use execution_context::LastError; +pub(crate) use execution_context::InstructionError; pub(super) use value_types::CanonResultAggregate; pub(super) use value_types::Generation; pub(super) use value_types::LiteralAggregate; diff --git a/air/src/execution_step/resolver/resolvable_impl.rs b/air/src/execution_step/resolver/resolvable_impl.rs index fa69d671..3612071a 100644 --- a/air/src/execution_step/resolver/resolvable_impl.rs +++ b/air/src/execution_step/resolver/resolvable_impl.rs @@ -21,12 +21,13 @@ use crate::execution_step::lambda_applier::select_by_lambda_from_scalar; use crate::execution_step::value_types::JValuable; use crate::execution_step::ExecutionResult; use crate::JValue; -use crate::LambdaAST; use crate::SecurityTetraplet; use air_interpreter_data::Provenance; +use air_lambda_ast::LambdaAST; use air_parser::ast; +use air_parser::ast::InstructionErrorAST; use serde_json::json; use std::rc::Rc; @@ -37,6 +38,7 @@ impl Resolvable for ast::ImmutableValue<'_> { match self { InitPeerId => resolve_const(ctx.run_parameters.init_peer_id.as_ref(), ctx), + Error(error_accessor) => error_accessor.resolve(ctx), LastError(error_accessor) => error_accessor.resolve(ctx), Literal(value) => resolve_const(value.to_string(), ctx), Timestamp => resolve_const(ctx.run_parameters.timestamp, ctx), @@ -61,31 +63,47 @@ pub(crate) fn resolve_const( Ok((jvalue, vec![tetraplet], Provenance::literal())) } +fn resolve_errors( + instruction_error: &crate::InstructionError, + lens: &Option>, + ctx: &ExecutionCtx<'_>, +) -> Result<(serde_json::Value, Vec>, Provenance), crate::ExecutionError> { + use crate::execution_step::InstructionError; + + let InstructionError { + error, + tetraplet, + provenance, + } = instruction_error; + + let jvalue = match lens { + Some(error_accessor) => select_by_lambda_from_scalar(error.as_ref(), error_accessor, ctx)?.into_owned(), + None => error.as_ref().clone(), + }; + + let tetraplets = match tetraplet { + Some(tetraplet) => vec![tetraplet.clone()], + None => { + let tetraplet = SecurityTetraplet::literal_tetraplet(ctx.run_parameters.init_peer_id.as_ref()); + let tetraplet = Rc::new(tetraplet); + vec![tetraplet] + } + }; + + Ok((jvalue, tetraplets, provenance.clone())) +} + +impl<'lens> Resolvable for InstructionErrorAST<'lens> { + fn resolve(&self, ctx: &ExecutionCtx<'_>) -> ExecutionResult<(JValue, RcSecurityTetraplets, Provenance)> { + let instruction_error = ctx.error(); + resolve_errors(instruction_error, &self.lens, ctx) + } +} + impl Resolvable for Option> { fn resolve(&self, ctx: &ExecutionCtx<'_>) -> ExecutionResult<(JValue, RcSecurityTetraplets, Provenance)> { - use crate::LastError; - - let LastError { - error, - tetraplet, - provenance, - } = ctx.last_error(); - - let jvalue = match self { - Some(error_accessor) => select_by_lambda_from_scalar(error.as_ref(), error_accessor, ctx)?.into_owned(), - None => error.as_ref().clone(), - }; - - let tetraplets = match tetraplet { - Some(tetraplet) => vec![tetraplet.clone()], - None => { - let tetraplet = SecurityTetraplet::literal_tetraplet(ctx.run_parameters.init_peer_id.as_ref()); - let tetraplet = Rc::new(tetraplet); - vec![tetraplet] - } - }; - - Ok((jvalue, tetraplets, provenance.clone())) + let instruction_error = ctx.last_error(); + resolve_errors(instruction_error, self, ctx) } } diff --git a/air/src/lib.rs b/air/src/lib.rs index a6862569..a415c5c0 100644 --- a/air/src/lib.rs +++ b/air/src/lib.rs @@ -37,10 +37,10 @@ pub use air_interpreter_interface::RunParameters; pub use air_interpreter_interface::INTERPRETER_SUCCESS; pub use execution_step::execution_context::errors::unsupported_map_key_type; pub use execution_step::execution_context::errors::StreamMapError; -pub use execution_step::execution_context::no_error_last_error; -pub use execution_step::execution_context::no_error_last_error_object; +pub use execution_step::execution_context::no_error; +pub use execution_step::execution_context::no_error_object; pub use execution_step::execution_context::ExecutionCidState; -pub use execution_step::execution_context::LastError; +pub use execution_step::execution_context::InstructionError; pub use execution_step::execution_context::NO_ERROR_ERROR_CODE; pub use execution_step::execution_context::NO_ERROR_MESSAGE; pub use execution_step::CatchableError; diff --git a/air/tests/test_module/features/errors/last_error.rs b/air/tests/test_module/features/errors/last_error.rs index da264640..e0f77c1f 100644 --- a/air/tests/test_module/features/errors/last_error.rs +++ b/air/tests/test_module/features/errors/last_error.rs @@ -14,7 +14,7 @@ * limitations under the License. */ -use air::no_error_last_error_object; +use air::no_error_object; use air::CatchableError; use air::ExecutionCidState; use air::ExecutionError; @@ -124,7 +124,7 @@ fn not_clear_last_error_in_match() { let _ = checked_call_vm!(local_vm, <_>::default(), &script, "", result.data); let actual_value = (*args.borrow()).as_ref().unwrap().clone(); - assert_eq!(actual_value, no_error_last_error_object(),); + assert_eq!(actual_value, no_error_object(),); } #[test] @@ -159,7 +159,7 @@ fn not_clear_last_error_in_mismatch() { let _ = checked_call_vm!(local_vm, <_>::default(), &script, "", result.data); let actual_value = (*args.borrow()).as_ref().unwrap().clone(); - assert_eq!(actual_value, no_error_last_error_object(),); + assert_eq!(actual_value, no_error_object(),); } #[test] @@ -241,7 +241,7 @@ fn non_initialized_last_error() { let _ = checked_call_vm!(vm, test_params.clone(), script, "", ""); let actual_value = (*args.borrow()).as_ref().unwrap().clone(); - assert_eq!(actual_value, no_error_last_error_object(),); + assert_eq!(actual_value, no_error_object(),); let actual_tetraplets = (*tetraplets.borrow()).as_ref().unwrap().clone(); assert_eq!( diff --git a/air/tests/test_module/instructions/ap.rs b/air/tests/test_module/instructions/ap.rs index 0b14d115..968c5586 100644 --- a/air/tests/test_module/instructions/ap.rs +++ b/air/tests/test_module/instructions/ap.rs @@ -14,7 +14,7 @@ * limitations under the License. */ -use air::no_error_last_error_object; +use air::no_error_object; use air::ExecutionCidState; use air_test_framework::AirScriptExecutor; use air_test_utils::prelude::*; @@ -198,16 +198,57 @@ fn ap_with_last_error() { "tetraplet": {"function_name": "", "json_path": "", "peer_pk": "vm_1_peer_id", "service_id": ""}, "values": [ { - "result": no_error_last_error_object(), + "result": no_error_object(), "tetraplet": {"function_name": "", "json_path": "", "peer_pk": "", "service_id": ""}, "trace_pos": 0 } ] })), unused!( - json!([no_error_last_error_object()]), + json!([no_error_object()]), peer = vm_1_peer_id, - args = [no_error_last_error_object()] + args = [no_error_object()] + ), + ]; + + assert_eq!(actual_trace, expected_state); + assert!(result.next_peer_pks.is_empty()); +} + +#[test] +fn ap_with_error() { + let vm_1_peer_id = "vm_1_peer_id"; + let mut vm_1 = create_avm(echo_call_service(), vm_1_peer_id); + + let script = format!( + r#" + (seq + (ap :error: $stream) + (seq + (canon "{vm_1_peer_id}" $stream #canon_stream) + (call "{vm_1_peer_id}" ("" "") [#canon_stream]))) + "# + ); + + let result = checked_call_vm!(vm_1, <_>::default(), script, "", ""); + + let actual_trace = trace_from_result(&result); + let expected_state = vec![ + executed_state::ap(0), + executed_state::canon(json!({ + "tetraplet": {"function_name": "", "json_path": "", "peer_pk": "vm_1_peer_id", "service_id": ""}, + "values": [ + { + "result": no_error_object(), + "tetraplet": {"function_name": "", "json_path": "", "peer_pk": "", "service_id": ""}, + "trace_pos": 0 + } + ] + })), + unused!( + json!([no_error_object()]), + peer = vm_1_peer_id, + args = [no_error_object()] ), ]; @@ -589,11 +630,11 @@ fn ap_stream_map_with_undefined_last_error() { SubTraceDesc::new(3.into(), 0), )]), unused!( - no_error_last_error_object(), + no_error_object(), peer = vm_1_peer_id, service = "m", function = "f", - args = [no_error_last_error_object()] + args = [no_error_object()] ), ]; diff --git a/air/tests/test_module/instructions/match_.rs b/air/tests/test_module/instructions/match_.rs index d720f028..a2368b42 100644 --- a/air/tests/test_module/instructions/match_.rs +++ b/air/tests/test_module/instructions/match_.rs @@ -451,3 +451,35 @@ fn match_with_undefined_last_error_message() { )]); assert_eq!(actual_trace, expected_trace); } + +#[test] +fn match_with_error() { + let local_peer_id = "local_peer_id"; + let mut vm = create_avm(echo_call_service(), local_peer_id); + + let script = format!( + r#" + (xor + (match 1 2 (null)) + (call "local_peer_id" ("test" "error_code") [:error:.$.error_code] scalar) + ) + "# + ); + + let result = checked_call_vm!(vm, <_>::default(), script, "", ""); + + let actual_trace = trace_from_result(&result); + + let mut cid_state = ExecutionCidState::new(); + let errcode_lambda_output = json!(10001); + + let expected_trace = ExecutionTrace::from(vec![scalar_tracked!( + errcode_lambda_output.clone(), + cid_state, + peer = local_peer_id, + service = "test", + function = "error_code", + args = vec![errcode_lambda_output] + )]); + assert_eq!(actual_trace, expected_trace); +} diff --git a/air/tests/test_module/instructions/mismatch.rs b/air/tests/test_module/instructions/mismatch.rs index a4662a98..b85ef5e6 100644 --- a/air/tests/test_module/instructions/mismatch.rs +++ b/air/tests/test_module/instructions/mismatch.rs @@ -203,3 +203,37 @@ fn mismatch_with_two_xors() { assert_eq!(actual_trace.pop().unwrap(), expected_executed_call_result); } + +#[test] +fn mismatch_with_error() { + use air::ExecutionCidState; + + let local_peer_id = "local_peer_id"; + let mut vm = create_avm(echo_call_service(), local_peer_id); + + let script = format!( + r#" + (xor + (mismatch 42 42 (null)) + (call "local_peer_id" ("test" "error_code") [:error:.$.error_code] scalar) + ) + "# + ); + + let result = checked_call_vm!(vm, <_>::default(), script, "", ""); + + let actual_trace = trace_from_result(&result); + + let mut cid_state = ExecutionCidState::new(); + let errcode_lambda_output = json!(10002); + + let expected_trace = ExecutionTrace::from(vec![scalar_tracked!( + errcode_lambda_output.clone(), + cid_state, + peer = local_peer_id, + service = "test", + function = "error_code", + args = vec![errcode_lambda_output] + )]); + assert_eq!(actual_trace, expected_trace); +} diff --git a/air/tests/test_module/instructions/xor.rs b/air/tests/test_module/instructions/xor.rs index 1e9dd69b..9e1d48a8 100644 --- a/air/tests/test_module/instructions/xor.rs +++ b/air/tests/test_module/instructions/xor.rs @@ -235,3 +235,34 @@ fn last_error_with_xor() { assert_eq!(actual_trace[1.into()], expected_state); } + +#[test] +fn error_with_xor() { + let faillible_peer_id = "failible_peer_id"; + let mut faillible_vm = create_avm(fallible_call_service("service_id_1"), faillible_peer_id); + let local_peer_id = "local_peer_id"; + let mut vm = create_avm(echo_call_service(), local_peer_id); + + let script = format!( + r#" + (xor + (call "{faillible_peer_id}" ("service_id_1" "local_fn_name") [] result) + (call "{local_peer_id}" ("service_id_2" "local_fn_name") [:error:.$.message] result) + )"# + ); + + let result = checked_call_vm!(faillible_vm, <_>::default(), script.clone(), "", ""); + let result = checked_call_vm!(vm, <_>::default(), script, "", result.data); + + let actual_trace = trace_from_result(&result); + let msg = r#"Local service error, ret_code is 1, error message is '"failed result from fallible_call_service"'"#; + let expected_state = scalar!( + msg, + peer = local_peer_id, + service = "service_id_2", + function = "local_fn_name", + args = [msg] + ); + + assert_eq!(actual_trace[1.into()], expected_state); +} diff --git a/air/tests/test_module/negative_tests/execution_step.rs b/air/tests/test_module/negative_tests/execution_step.rs index 2c77d8e7..5d7217a5 100644 --- a/air/tests/test_module/negative_tests/execution_step.rs +++ b/air/tests/test_module/negative_tests/execution_step.rs @@ -14,7 +14,7 @@ * limitations under the License. */ -use air::no_error_last_error_object; +use air::no_error_object; use air::unsupported_map_key_type; use air::CatchableError; use air::LambdaError; @@ -608,7 +608,55 @@ fn undefined_last_error_functor() { .expect("invalid test AIR script"); let result = executor.execute_all(local_peer_id).unwrap(); - let expected_error = CatchableError::LengthFunctorAppliedToNotArray(no_error_last_error_object()); + let expected_error = CatchableError::LengthFunctorAppliedToNotArray(no_error_object()); + assert!(check_error(&result.last().unwrap(), expected_error)); +} + +#[test] +fn undefined_error_functor() { + let local_peer_id = "local_peer_id"; + let script = format!( + r#" + (xor + (match 1 2 + (null) + ) + (call "local_peer_id" ("test" "error_code") [:error:.length] scalar) + ) + "# + ); + + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(local_peer_id), &script) + .expect("invalid test AIR script"); + let result = executor.execute_all(local_peer_id).unwrap(); + + let error_object = json!({"error_code":10001, "instruction":"match 1 2","message":"compared values do not match"}); + let expected_error = CatchableError::LengthFunctorAppliedToNotArray(error_object); + assert!(check_error(&result.last().unwrap(), expected_error)); +} + +#[test] +fn undefined_error_peerid() { + let local_peer_id = "local_peer_id"; + let script = format!( + r#" + (xor + (match 1 2 + (null) + ) + (call "local_peer_id" ("test" "error_code") [:error:.$.peerid] scalar) + ) + "# + ); + + let executor = AirScriptExecutor::from_annotated(TestRunParameters::from_init_peer_id(local_peer_id), &script) + .expect("invalid test AIR script"); + let result = executor.execute_all(local_peer_id).unwrap(); + + let value = json!({"error_code":10001, "instruction":"match 1 2", "message":"compared values do not match"}); + let field_name = "peerid".into(); + let expected_error = + air::CatchableError::LambdaApplierError(air::LambdaError::ValueNotContainSuchField { value, field_name }); assert!(check_error(&result.last().unwrap(), expected_error)); } @@ -631,7 +679,7 @@ fn undefined_last_error_instruction() { let result = executor.execute_all(local_peer_id).unwrap(); let expected_error = CatchableError::LambdaApplierError(LambdaError::ValueNotContainSuchField { - value: no_error_last_error_object(), + value: no_error_object(), field_name: "instruction".to_string(), }); assert!(check_error(&&result.last().unwrap(), expected_error)); @@ -655,7 +703,7 @@ fn undefined_last_error_peer_id() { let result = executor.execute_all(local_peer_id).unwrap(); let expected_error = CatchableError::LambdaApplierError(LambdaError::ValueNotContainSuchField { - value: no_error_last_error_object(), + value: no_error_object(), field_name: "peer_id".to_string(), }); assert!(check_error(&&result.last().unwrap(), expected_error)); diff --git a/crates/air-lib/air-parser/src/ast/instruction_arguments.rs b/crates/air-lib/air-parser/src/ast/instruction_arguments.rs index 2b534ffd..71896b2d 100644 --- a/crates/air-lib/air-parser/src/ast/instruction_arguments.rs +++ b/crates/air-lib/air-parser/src/ast/instruction_arguments.rs @@ -21,6 +21,7 @@ use super::CanonStream; use super::CanonStreamWithLambda; use super::ImmutableVariable; use super::ImmutableVariableWithLambda; +use super::InstructionErrorAST; use super::Scalar; use super::ScalarWithLambda; use super::Stream; @@ -68,6 +69,7 @@ pub struct Triplet<'i> { #[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] pub enum ImmutableValue<'i> { InitPeerId, + Error(InstructionErrorAST<'i>), LastError(Option>), Timestamp, TTL, @@ -93,6 +95,7 @@ pub enum ApArgument<'i> { InitPeerId, Timestamp, TTL, + Error(InstructionErrorAST<'i>), LastError(Option>), Literal(&'i str), Number(Number), diff --git a/crates/air-lib/air-parser/src/ast/instruction_arguments/traits.rs b/crates/air-lib/air-parser/src/ast/instruction_arguments/traits.rs index 5ceaa1e5..bd837a99 100644 --- a/crates/air-lib/air-parser/src/ast/instruction_arguments/traits.rs +++ b/crates/air-lib/air-parser/src/ast/instruction_arguments/traits.rs @@ -35,6 +35,7 @@ impl fmt::Display for ImmutableValue<'_> { match self { InitPeerId => write!(f, "%init_peer_id%"), + Error(error_accessor) => display_error(f, error_accessor), LastError(error_accessor) => display_last_error(f, error_accessor), Literal(literal) => write!(f, r#""{literal}""#), Timestamp => write!(f, "%timestamp%"), @@ -93,6 +94,7 @@ impl fmt::Display for ApArgument<'_> { match self { InitPeerId => write!(f, "%init_peer_id%"), + Error(error_accessor) => display_error(f, error_accessor), LastError(error_accessor) => display_last_error(f, error_accessor), Literal(str) => write!(f, r#""{str}""#), Timestamp => write!(f, "%timestamp%"), @@ -183,8 +185,21 @@ impl From<&Number> for serde_json::Value { } fn display_last_error(f: &mut fmt::Formatter, lambda_ast: &Option) -> fmt::Result { + use crate::parser::LAST_ERROR; + match lambda_ast { - Some(lambda_ast) => write!(f, "%last_error%{lambda_ast}"), - None => write!(f, "%last_error%"), + Some(lambda_ast) => write!(f, "{LAST_ERROR}{lambda_ast}"), + None => write!(f, "{LAST_ERROR}"), + } +} + +fn display_error(f: &mut fmt::Formatter, error: &InstructionErrorAST) -> fmt::Result { + use crate::parser::ERROR; + + let InstructionErrorAST { lens } = error; + + match lens { + Some(lens) => write!(f, "{ERROR}{lens}"), + None => write!(f, "{ERROR}"), } } diff --git a/crates/air-lib/air-parser/src/ast/instructions.rs b/crates/air-lib/air-parser/src/ast/instructions.rs index e35563e0..b10235f6 100644 --- a/crates/air-lib/air-parser/src/ast/instructions.rs +++ b/crates/air-lib/air-parser/src/ast/instructions.rs @@ -188,3 +188,7 @@ pub struct New<'i> { /// (null) #[derive(Serialize, Debug, PartialEq, Eq)] pub struct Null; + +pub trait PeerIDErrorLogable { + fn log_errors_with_peer_id(&self) -> bool; +} diff --git a/crates/air-lib/air-parser/src/ast/instructions/traits.rs b/crates/air-lib/air-parser/src/ast/instructions/traits.rs index 2f75f41b..0ddc6113 100644 --- a/crates/air-lib/air-parser/src/ast/instructions/traits.rs +++ b/crates/air-lib/air-parser/src/ast/instructions/traits.rs @@ -175,3 +175,49 @@ impl fmt::Display for New<'_> { write!(f, "new {}", self.argument) } } + +macro_rules! peer_id_error_logable { + ($($t:ty),+) => { + $( + impl PeerIDErrorLogable for $t { + #[inline] + fn log_errors_with_peer_id(&self) -> bool { + true + } + } + )+ + }; +} + +macro_rules! no_peer_id_error_logable { + ($($t:ty),+) => { + $( + impl PeerIDErrorLogable for $t { + #[inline] + fn log_errors_with_peer_id(&self) -> bool { + false + } + } + )+ + }; +} + +peer_id_error_logable!(Call<'_>, Canon<'_>, CanonStreamMapScalar<'_>); + +no_peer_id_error_logable!( + Ap<'_>, + ApMap<'_>, + Fail<'_>, + FoldScalar<'_>, + FoldStream<'_>, + FoldStreamMap<'_>, + Seq<'_>, + Par<'_>, + Xor<'_>, + Match<'_>, + MisMatch<'_>, + Never, + Next<'_>, + New<'_>, + Null +); diff --git a/crates/air-lib/air-parser/src/ast/values.rs b/crates/air-lib/air-parser/src/ast/values.rs index 94740f1e..35c467e1 100644 --- a/crates/air-lib/air-parser/src/ast/values.rs +++ b/crates/air-lib/air-parser/src/ast/values.rs @@ -86,3 +86,10 @@ pub struct StreamMap<'i> { pub name: &'i str, pub position: AirPos, } + +/// An error wrapper with an optional lens. +#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)] +pub struct InstructionErrorAST<'lens> { + #[serde(borrow)] + pub lens: Option>, +} diff --git a/crates/air-lib/air-parser/src/ast/values/impls.rs b/crates/air-lib/air-parser/src/ast/values/impls.rs index 94d592f4..0ff01950 100644 --- a/crates/air-lib/air-parser/src/ast/values/impls.rs +++ b/crates/air-lib/air-parser/src/ast/values/impls.rs @@ -125,3 +125,9 @@ impl<'i> StreamMap<'i> { Self { name, position } } } + +impl<'lens> InstructionErrorAST<'lens> { + pub fn new(lens: Option>) -> Self { + Self { lens } + } +} diff --git a/crates/air-lib/air-parser/src/parser/air.lalrpop b/crates/air-lib/air-parser/src/parser/air.lalrpop index 82b77ea4..317d2130 100644 --- a/crates/air-lib/air-parser/src/parser/air.lalrpop +++ b/crates/air-lib/air-parser/src/parser/air.lalrpop @@ -230,6 +230,8 @@ Value: ImmutableValue<'input> = { InitPeerId => ImmutableValue::InitPeerId, => ImmutableValue::LastError(None), => ImmutableValue::LastError(Some(le)), + => ImmutableValue::Error(InstructionErrorAST::new(None)), + => ImmutableValue::Error(InstructionErrorAST::new(Some(le))), => ImmutableValue::Literal(l), Timestamp => ImmutableValue::Timestamp, TTL => ImmutableValue::TTL, @@ -246,6 +248,8 @@ ApArgument: ApArgument<'input> = { InitPeerId => ApArgument::InitPeerId, => ApArgument::LastError(None), => ApArgument::LastError(Some(le)), + => ApArgument::Error(InstructionErrorAST::new(None)), + => ApArgument::Error(InstructionErrorAST::new(Some(le))), Timestamp => ApArgument::Timestamp, TTL => ApArgument::TTL, => ApArgument::Literal(l), @@ -295,6 +299,8 @@ extern { InitPeerId => Token::InitPeerId, LastError => Token::LastError, LastErrorWithLambda => Token::LastErrorWithLambda(>), + Error => Token::Error, + ErrorWithLambda => Token::ErrorWithLambda(>), Timestamp => Token::Timestamp, TTL => Token::TTL, diff --git a/crates/air-lib/air-parser/src/parser/air.rs b/crates/air-lib/air-parser/src/parser/air.rs index 60537f59..8bc0b5f4 100644 --- a/crates/air-lib/air-parser/src/parser/air.rs +++ b/crates/air-lib/air-parser/src/parser/air.rs @@ -1,5 +1,5 @@ // auto-generated: "lalrpop 0.20.0" -// sha3: 63328502cebdfe67f13bfc66d44f8f31a0224185fb9403a062664ab296fc2fcd +// sha3: 43c234155bd84447b9c1a496043db3afb3097d1b81ca307bffb0cc5e5f235c22 use crate::ast::*; use crate::parser::ParserError; use crate::parser::VariableValidator; @@ -41,9 +41,9 @@ mod __parse__AIR { Variant1(bool), Variant2((&'input str, AirPos)), Variant3((&'input str, LambdaAST<'input>, AirPos)), - Variant4(f64), - Variant5(i64), - Variant6(LambdaAST<'input>), + Variant4(LambdaAST<'input>), + Variant5(f64), + Variant6(i64), Variant7(&'input str), Variant8(__lalrpop_util::ErrorRecovery, ParserError>), Variant9(ImmutableValue<'input>), @@ -70,338 +70,346 @@ mod __parse__AIR { } const __ACTION: &[i16] = &[ // State 0 - 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, // State 1 - 14, 0, 46, 0, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 0, 0, 58, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 14, 0, 46, 0, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 2 - 0, 0, 0, 0, 0, 0, 62, 0, 0, 63, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 65, 0, 0, 66, 67, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 3 - 0, 0, 0, 0, 0, 0, 62, 0, 0, 63, 0, 0, 64, 65, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 65, 0, 0, 66, 67, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 4 - 0, 0, 0, 0, 0, 0, 68, 0, 69, 0, 70, 0, 0, 71, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 71, 0, 72, 0, 0, 73, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 5 - 0, 0, 74, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 76, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 76, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 79, 80, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 6 - 0, 0, 81, 0, 82, 83, 84, 50, 51, 85, 86, 87, 88, 89, 90, 0, 0, 91, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 83, 0, 84, 85, 86, 87, 88, 52, 53, 89, 90, 91, 92, 93, 94, 0, 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 7 - 0, 0, 81, 0, 82, 83, 84, 50, 51, 85, 86, 87, 88, 89, 90, 0, 0, 91, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 83, 0, 84, 85, 86, 87, 88, 52, 53, 89, 90, 91, 92, 93, 94, 0, 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 8 - 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 95, 0, 96, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 9 - 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, // State 10 - 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, // State 11 - 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, // State 12 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 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, 105, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 13 - 0, 0, 0, 0, 0, 0, 104, 50, 51, 0, 0, 0, 105, 106, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 108, 0, 0, 52, 53, 0, 0, 0, 109, 110, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 14 - 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 15 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 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, 114, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 16 - 0, 0, 81, 0, 82, 83, 84, 50, 51, 85, 86, 87, 88, 89, 90, 0, 0, 91, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 83, 0, 84, 85, 86, 87, 88, 52, 53, 89, 90, 91, 92, 93, 94, 0, 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 17 - 0, 0, 81, 0, 82, 83, 84, 50, 51, 85, 86, 87, 88, 89, 90, 0, 0, 91, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 83, 0, 84, 85, 86, 87, 88, 52, 53, 89, 90, 91, 92, 93, 94, 0, 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 18 - 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, // State 19 - 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, // State 20 - 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, // State 21 - 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, // State 22 - 0, 0, 46, 0, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 0, 0, 58, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 46, 0, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 23 - 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 24 - 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 25 - 0, 0, 81, 134, 82, 83, 84, 50, 51, 85, 86, 87, 88, 89, 90, 0, 0, 91, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 83, 138, 84, 85, 86, 87, 88, 52, 53, 89, 90, 91, 92, 93, 94, 0, 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 26 - 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 27 - 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, // State 28 - 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, // State 29 - 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, // State 30 - 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, // State 31 - 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, // State 32 - 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 33 - 0, 0, 81, 149, 82, 83, 84, 50, 51, 85, 86, 87, 88, 89, 90, 0, 0, 91, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 83, 153, 84, 85, 86, 87, 88, 52, 53, 89, 90, 91, 92, 93, 94, 0, 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 34 - 40, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 40, 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, 41, // State 35 - 40, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 40, 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, 41, // State 36 - 40, 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, 41, + 40, 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, 41, // State 37 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 38 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 39 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 42, 9, 43, 44, 10, 11, 12, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 42, 9, 43, 44, 10, 11, 12, 0, // State 40 - -69, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, + -71, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, // State 41 - 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 42 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 43 - 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 44 - 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 45 - 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 46 - 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 47 - 0, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, 0, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 48 - 0, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, -21, 0, 0, 0, 0, 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, 0, 0, 0, 0, -23, 0, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 49 - -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, 0, -77, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, + 0, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12, 0, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 50 - -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, 0, -76, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, + 0, -13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13, 0, -13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 51 - 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, 0, -79, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, // State 52 - 0, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10, 0, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, 0, -78, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, // State 53 - 0, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -11, 0, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 54 - 0, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14, 0, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10, 0, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 55 - 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -11, 0, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 56 - 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 57 - 0, -13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13, 0, -13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, 0, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 58 - 0, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12, 0, -12, 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, 0, 0, 0, 0, -21, 0, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 59 - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 60 - -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14, 0, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 61 - -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -83, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 62 - -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 63 - -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -80, -80, 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, 0, 0, 0, 0, 0, 0, -85, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 64 - -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -81, -81, 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, -81, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 65 - -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 66 - 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -83, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 67 - 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 68 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 69 - 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 70 - 0, -37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 71 - 0, -38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 72 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 73 - 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 74 - 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 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, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 76 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 77 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 78 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 79 - -98, 0, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, 0, 0, -98, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 80 - 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 81 - -99, 0, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, + -102, 0, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, 0, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, // State 82 - -103, 0, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, 0, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, + 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 83 - -104, 0, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, 0, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, + -103, 0, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, 0, 0, -103, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, // State 84 - -92, 0, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, 0, 0, -92, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, + -107, 0, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, 0, 0, -107, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, // State 85 - -93, 0, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, 0, 0, -93, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, + -108, 0, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, 0, 0, -108, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, // State 86 - -94, 0, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, 0, 0, -94, -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, + -97, 0, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, 0, 0, -97, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, // State 87 - -95, 0, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, 0, 0, -95, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, + -98, 0, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, 0, 0, -98, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, // State 88 - -101, 0, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, 0, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, + -94, 0, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, 0, 0, -94, -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, // State 89 - -102, 0, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, 0, 0, -102, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, + -95, 0, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, 0, 0, -95, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, // State 90 - -97, 0, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, 0, 0, -97, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, + -96, 0, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, 0, 0, -96, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, // State 91 - -96, 0, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, 0, 0, -96, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, + -99, 0, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, 0, 0, -99, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, // State 92 - -55, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55, + -105, 0, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, 0, 0, -105, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, // State 93 - -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, + -106, 0, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, 0, 0, -106, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, // State 94 - -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, + -101, 0, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, 0, 0, -101, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, // State 95 - -73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -73, + -100, 0, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, // State 96 - -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, + -57, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, // State 97 - 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -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, 0, -77, // State 98 - -56, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, + -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, // State 99 - 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, // State 100 - 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, // State 101 - 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 102 - 0, 0, -23, 0, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, 0, 0, -23, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -58, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, // State 103 - 0, 0, -26, 0, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 0, 0, -26, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 104 - 0, 0, -22, 0, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, 0, 0, -22, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 105 - 0, 0, -24, 0, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 0, 0, -24, -24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 106 - 0, 0, -25, 0, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, 0, 0, -25, -25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -25, 0, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, 0, 0, -25, -25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 107 - 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -28, 0, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, 0, 0, -28, -28, 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, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -24, 0, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 0, 0, -24, -24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 109 - 0, 0, 0, 0, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -26, 0, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 0, 0, -26, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 110 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -27, 0, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 0, 0, -27, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 111 - -58, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, + 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 112 - 0, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 113 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 114 - -100, 0, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, 0, 0, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 115 - 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -60, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, // State 116 - -65, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, + 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 117 - 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 118 - 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -104, 0, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, 0, 0, -104, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, // State 119 - 0, 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, 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, // State 120 - -51, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, + -67, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, // State 121 - 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, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 122 - 0, 0, 0, 0, 0, 0, -88, 0, 0, 0, 0, 0, -88, -88, -88, 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, // State 123 - 0, -87, 0, 0, 0, 0, -87, 0, 0, 0, 0, 0, -87, -87, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 124 - 0, -84, 0, 0, 0, 0, -84, 0, 0, 0, 0, 0, -84, -84, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -53, -53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -53, // State 125 - 0, -85, 0, 0, 0, 0, -85, 0, 0, 0, 0, 0, -85, -85, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 126 - 0, -86, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, -86, -86, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, -90, -90, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 127 - 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -89, 0, 0, 0, 0, -89, 0, 0, 0, 0, 0, 0, 0, -89, -89, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 128 - -48, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -48, + 0, -86, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, -86, -86, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 129 - 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -87, 0, 0, 0, 0, 0, 0, 0, -87, -87, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 130 - 0, -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -88, 0, 0, 0, 0, -88, 0, 0, 0, 0, 0, 0, 0, -88, -88, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 131 - 0, 0, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 0, 0, -4, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 132 - 0, 0, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 0, 0, -29, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -50, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 133 - 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -30, 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 134 - 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 135 - 0, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 0, 0, -4, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 136 - 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 0, 0, -31, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 137 - 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, + 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 138 - 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, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 139 - -57, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, + 0, -38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 140 - -54, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -54, + 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 141 - -53, -53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -53, + 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 142 - -66, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, + 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, // State 143 - 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, + -59, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, // State 144 - 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, + -56, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, // State 145 - 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -55, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55, // State 146 - -47, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, + -68, -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, -68, // State 147 - 0, 0, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, 0, 0, -5, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 148 - 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, 0, -31, 0, 0, 0, 0, 0, 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, 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 - -49, -49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -49, + 0, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 150 - -50, -50, 0, 0, 0, 0, 0, 0, 0, 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, + -49, -49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -49, // State 151 - 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, 0, 0, -5, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 152 - -60, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, + 0, -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -33, 0, -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 153 - 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, + -51, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -51, // State 154 - -62, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, + -52, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, // State 155 - 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, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 156 - -64, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, + -62, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, // State 157 - -67, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, + 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 158 - -68, -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, -68, + -64, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, // State 159 - 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 160 - 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -66, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, // State 161 - -59, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, + -69, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, // State 162 - -61, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, + -70, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, // State 163 - -63, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, + 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 164 - -52, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, + 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 165 + -61, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, + // State 166 + -63, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, + // State 167 + -65, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, + // State 168 + -54, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -54, ]; fn __action(state: i16, integer: usize) -> i16 { - __ACTION[(state as usize) * 34 + integer] + __ACTION[(state as usize) * 36 + integer] } const __EOF_ACTION: &[i16] = &[ // State 0 @@ -479,13 +487,13 @@ mod __parse__AIR { // State 36 0, // State 37 - -105, + -109, // State 38 -8, // State 39 0, // State 40 - -69, + -71, // State 41 0, // State 42 @@ -589,7 +597,7 @@ mod __parse__AIR { // State 91 0, // State 92 - -55, + 0, // State 93 0, // State 94 @@ -597,11 +605,11 @@ mod __parse__AIR { // State 95 0, // State 96 - 0, + -57, // State 97 0, // State 98 - -56, + 0, // State 99 0, // State 100 @@ -609,7 +617,7 @@ mod __parse__AIR { // State 101 0, // State 102 - 0, + -58, // State 103 0, // State 104 @@ -627,7 +635,7 @@ mod __parse__AIR { // State 110 0, // State 111 - -58, + 0, // State 112 0, // State 113 @@ -635,9 +643,9 @@ mod __parse__AIR { // State 114 0, // State 115 - 0, + -60, // State 116 - -65, + 0, // State 117 0, // State 118 @@ -645,7 +653,7 @@ mod __parse__AIR { // State 119 0, // State 120 - -51, + -67, // State 121 0, // State 122 @@ -653,7 +661,7 @@ mod __parse__AIR { // State 123 0, // State 124 - 0, + -53, // State 125 0, // State 126 @@ -661,7 +669,7 @@ mod __parse__AIR { // State 127 0, // State 128 - -48, + 0, // State 129 0, // State 130 @@ -669,7 +677,7 @@ mod __parse__AIR { // State 131 0, // State 132 - 0, + -50, // State 133 0, // State 134 @@ -683,78 +691,86 @@ mod __parse__AIR { // State 138 0, // State 139 - -57, + 0, // State 140 - -54, + 0, // State 141 - -53, + 0, // State 142 - -66, + 0, // State 143 - 0, + -59, // State 144 - 0, + -56, // State 145 - 0, + -55, // State 146 - -47, + -68, // State 147 0, // State 148 0, // State 149 - -49, + 0, // State 150 - -50, + -49, // State 151 0, // State 152 - -60, - // State 153 0, + // State 153 + -51, // State 154 - -62, + -52, // State 155 0, // State 156 - -64, + -62, // State 157 - -67, + 0, // State 158 - -68, + -64, // State 159 0, // State 160 - 0, + -66, // State 161 - -59, + -69, // State 162 - -61, + -70, // State 163 - -63, + 0, // State 164 - -52, + 0, + // State 165 + -61, + // State 166 + -63, + // State 167 + -65, + // State 168 + -54, ]; fn __goto(state: i16, nt: usize) -> i16 { match nt { 2 => 33, 5 => 37, 6 => match state { - 22 => 121, + 22 => 125, _ => 12, }, 7 => 22, - 8 => 99, + 8 => 103, 9 => match state { - 33 => 147, - _ => 131, + 33 => 151, + _ => 135, }, 10 => 24, - 11 => 127, - 13 => 134, - 14 => 66, - 15 => 72, - 16 => 144, + 11 => 131, + 13 => 138, + 14 => 68, + 15 => 74, + 16 => 148, 17 => match state { 10 => 20, 11 => 21, @@ -762,42 +778,42 @@ mod __parse__AIR { 28 => 35, 29 => 36, 0 => 38, - 18 => 115, - 19 => 117, - 20 => 118, - 21 => 119, - 30 => 137, - 31 => 138, - 34 => 151, - 35 => 153, - 36 => 155, + 18 => 119, + 19 => 121, + 20 => 122, + 21 => 123, + 30 => 141, + 31 => 142, + 34 => 155, + 35 => 157, + 36 => 159, _ => 19, }, 19 => 18, 20 => match state { 1 | 22 => 44, - 13 => 102, - _ => 79, + 13 => 106, + _ => 81, }, - 21 => 59, + 21 => 61, 22 => match state { - 2 => 60, + 2 => 62, _ => 15, }, 23 => match state { - 32 => 145, - _ => 122, + 32 => 149, + _ => 126, }, 24 => 32, 25 => 26, - 26 => 108, + 26 => 112, 27 => 14, 28 => match state { 6 => 16, 7 => 17, 16 => 30, 17 => 31, - _ => 132, + _ => 136, }, _ => 0, } @@ -810,6 +826,8 @@ mod __parse__AIR { r###"Boolean"###, r###"CanonStream"###, r###"CanonStreamWithLambda"###, + r###"Error"###, + r###"ErrorWithLambda"###, r###"F64"###, r###"I64"###, r###"InitPeerId"###, @@ -911,7 +929,7 @@ mod __parse__AIR { #[inline] fn error_action(&self, state: i16) -> i16 { - __action(state, 34 - 1) + __action(state, 36 - 1) } #[inline] @@ -989,32 +1007,34 @@ mod __parse__AIR { Token::Boolean(_) if true => Some(4), Token::CanonStream { name: _, position: _ } if true => Some(5), Token::CanonStreamWithLambda { name: _, lambda: _, position: _ } if true => Some(6), - Token::F64(_) if true => Some(7), - Token::I64(_) if true => Some(8), - Token::InitPeerId if true => Some(9), - Token::LastError if true => Some(10), - Token::LastErrorWithLambda(_) if true => Some(11), - Token::StringLiteral(_) if true => Some(12), - Token::Scalar { name: _, position: _ } if true => Some(13), - Token::ScalarWithLambda { name: _, lambda: _, position: _ } if true => Some(14), - Token::Stream { name: _, position: _ } if true => Some(15), - Token::StreamMap { name: _, position: _ } if true => Some(16), - Token::TTL if true => Some(17), - Token::Timestamp if true => Some(18), - Token::Ap if true => Some(19), - Token::Call if true => Some(20), - Token::Canon if true => Some(21), - Token::Fail if true => Some(22), - Token::Fold if true => Some(23), - Token::Match if true => Some(24), - Token::MisMatch if true => Some(25), - Token::Never if true => Some(26), - Token::New if true => Some(27), - Token::Next if true => Some(28), - Token::Null if true => Some(29), - Token::Par if true => Some(30), - Token::Seq if true => Some(31), - Token::Xor if true => Some(32), + Token::Error if true => Some(7), + Token::ErrorWithLambda(_) if true => Some(8), + Token::F64(_) if true => Some(9), + Token::I64(_) if true => Some(10), + Token::InitPeerId if true => Some(11), + Token::LastError if true => Some(12), + Token::LastErrorWithLambda(_) if true => Some(13), + Token::StringLiteral(_) if true => Some(14), + Token::Scalar { name: _, position: _ } if true => Some(15), + Token::ScalarWithLambda { name: _, lambda: _, position: _ } if true => Some(16), + Token::Stream { name: _, position: _ } if true => Some(17), + Token::StreamMap { name: _, position: _ } if true => Some(18), + Token::TTL if true => Some(19), + Token::Timestamp if true => Some(20), + Token::Ap if true => Some(21), + Token::Call if true => Some(22), + Token::Canon if true => Some(23), + Token::Fail if true => Some(24), + Token::Fold if true => Some(25), + Token::Match if true => Some(26), + Token::MisMatch if true => Some(27), + Token::Never if true => Some(28), + Token::New if true => Some(29), + Token::Next if true => Some(30), + Token::Null if true => Some(31), + Token::Par if true => Some(32), + Token::Seq if true => Some(33), + Token::Xor if true => Some(34), _ => None, } } @@ -1029,32 +1049,32 @@ mod __parse__AIR { ) -> __Symbol<'input> { match __token_index { - 0 | 1 | 2 | 3 | 9 | 10 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 => __Symbol::Variant0(__token), + 0 | 1 | 2 | 3 | 7 | 11 | 12 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 => __Symbol::Variant0(__token), 4 => match __token { Token::Boolean(__tok0) if true => __Symbol::Variant1(__tok0), _ => unreachable!(), }, - 5 | 13 | 15 | 16 => match __token { + 5 | 15 | 17 | 18 => match __token { Token::CanonStream { name: __tok0, position: __tok1 } | Token::Scalar { name: __tok0, position: __tok1 } | Token::Stream { name: __tok0, position: __tok1 } | Token::StreamMap { name: __tok0, position: __tok1 } if true => __Symbol::Variant2((__tok0, __tok1)), _ => unreachable!(), }, - 6 | 14 => match __token { + 6 | 16 => match __token { Token::CanonStreamWithLambda { name: __tok0, lambda: __tok1, position: __tok2 } | Token::ScalarWithLambda { name: __tok0, lambda: __tok1, position: __tok2 } if true => __Symbol::Variant3((__tok0, __tok1, __tok2)), _ => unreachable!(), }, - 7 => match __token { - Token::F64(__tok0) if true => __Symbol::Variant4(__tok0), + 8 | 13 => match __token { + Token::ErrorWithLambda(__tok0) | Token::LastErrorWithLambda(__tok0) if true => __Symbol::Variant4(__tok0), _ => unreachable!(), }, - 8 => match __token { - Token::I64(__tok0) if true => __Symbol::Variant5(__tok0), + 9 => match __token { + Token::F64(__tok0) if true => __Symbol::Variant5(__tok0), _ => unreachable!(), }, - 11 => match __token { - Token::LastErrorWithLambda(__tok0) if true => __Symbol::Variant6(__tok0), + 10 => match __token { + Token::I64(__tok0) if true => __Symbol::Variant6(__tok0), _ => unreachable!(), }, - 12 => match __token { + 14 => match __token { Token::StringLiteral(__tok0) if true => __Symbol::Variant7(__tok0), _ => unreachable!(), }, @@ -1172,7 +1192,7 @@ mod __parse__AIR { } 16 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 6, } } @@ -1184,7 +1204,7 @@ mod __parse__AIR { } 18 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 6, } } @@ -1203,13 +1223,13 @@ mod __parse__AIR { 21 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 7, + nonterminal_produced: 6, } } 22 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 7, + nonterminal_produced: 6, } } 23 => { @@ -1233,78 +1253,78 @@ mod __parse__AIR { 26 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 8, + nonterminal_produced: 7, } } 27 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 8, + nonterminal_produced: 7, } } 28 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 9, + nonterminal_produced: 8, } } 29 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 8, + } + } + 30 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 9, + } + } + 31 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, nonterminal_produced: 10, } } - 30 => { + 32 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, nonterminal_produced: 10, } } - 31 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 11, - } - } - 32 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 11, - } - } 33 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 12, + nonterminal_produced: 11, } } 34 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 12, + states_to_pop: 1, + nonterminal_produced: 11, } } 35 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 13, + nonterminal_produced: 12, } } 36 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 14, + states_to_pop: 0, + nonterminal_produced: 12, } } 37 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 14, + nonterminal_produced: 13, } } 38 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 14, } } @@ -1316,20 +1336,20 @@ mod __parse__AIR { } 40 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 14, } } 41 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 15, + nonterminal_produced: 14, } } 42 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 15, + nonterminal_produced: 14, } } 43 => { @@ -1340,26 +1360,26 @@ mod __parse__AIR { } 44 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 15, } } 45 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 16, + nonterminal_produced: 15, } } 46 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, - nonterminal_produced: 17, + states_to_pop: 2, + nonterminal_produced: 15, } } 47 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 17, + states_to_pop: 1, + nonterminal_produced: 16, } } 48 => { @@ -1370,19 +1390,19 @@ mod __parse__AIR { } 49 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, + states_to_pop: 5, nonterminal_produced: 17, } } 50 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, + states_to_pop: 6, nonterminal_produced: 17, } } 51 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, + states_to_pop: 6, nonterminal_produced: 17, } } @@ -1394,43 +1414,43 @@ mod __parse__AIR { } 53 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, + states_to_pop: 8, nonterminal_produced: 17, } } 54 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 5, nonterminal_produced: 17, } } 55 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 5, nonterminal_produced: 17, } } 56 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, + states_to_pop: 3, nonterminal_produced: 17, } } 57 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, + states_to_pop: 3, nonterminal_produced: 17, } } 58 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, + states_to_pop: 5, nonterminal_produced: 17, } } 59 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, + states_to_pop: 4, nonterminal_produced: 17, } } @@ -1460,56 +1480,56 @@ mod __parse__AIR { } 64 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, + states_to_pop: 7, nonterminal_produced: 17, } } 65 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, + states_to_pop: 6, nonterminal_produced: 17, } } 66 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, + states_to_pop: 4, nonterminal_produced: 17, } } 67 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, + states_to_pop: 5, nonterminal_produced: 17, } } 68 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 6, nonterminal_produced: 17, } } 69 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 18, + states_to_pop: 6, + nonterminal_produced: 17, } } 70 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 18, + states_to_pop: 1, + nonterminal_produced: 17, } } 71 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 19, + nonterminal_produced: 18, } } 72 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 19, + states_to_pop: 0, + nonterminal_produced: 18, } } 73 => { @@ -1527,31 +1547,31 @@ mod __parse__AIR { 75 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 20, + nonterminal_produced: 19, } } 76 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 20, + nonterminal_produced: 19, } } 77 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 21, + nonterminal_produced: 20, } } 78 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 22, + nonterminal_produced: 20, } } 79 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 22, + nonterminal_produced: 21, } } 80 => { @@ -1575,13 +1595,13 @@ mod __parse__AIR { 83 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 23, + nonterminal_produced: 22, } } 84 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 23, + nonterminal_produced: 22, } } 85 => { @@ -1599,37 +1619,37 @@ mod __parse__AIR { 87 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 24, + nonterminal_produced: 23, } } 88 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 25, + nonterminal_produced: 23, } } 89 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 26, + nonterminal_produced: 24, } } 90 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 27, + states_to_pop: 1, + nonterminal_produced: 25, } } 91 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 28, + nonterminal_produced: 26, } } 92 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 28, + states_to_pop: 5, + nonterminal_produced: 27, } } 93 => { @@ -1670,7 +1690,7 @@ mod __parse__AIR { } 99 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 28, } } @@ -1693,12 +1713,36 @@ mod __parse__AIR { } } 103 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 2, + nonterminal_produced: 28, + } + } + 104 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 28, } } - 104 => __state_machine::SimulatedReduce::Accept, + 105 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 28, + } + } + 106 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 28, + } + } + 107 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 28, + } + } + 108 => __state_machine::SimulatedReduce::Accept, _ => panic!("invalid reduction index {}", __reduce_index) } } @@ -2108,6 +2152,18 @@ mod __parse__AIR { __reduce103(input, errors, validator, __lookahead_start, __symbols, core::marker::PhantomData::<(&(), &(), &())>) } 104 => { + __reduce104(input, errors, validator, __lookahead_start, __symbols, core::marker::PhantomData::<(&(), &(), &())>) + } + 105 => { + __reduce105(input, errors, validator, __lookahead_start, __symbols, core::marker::PhantomData::<(&(), &(), &())>) + } + 106 => { + __reduce106(input, errors, validator, __lookahead_start, __symbols, core::marker::PhantomData::<(&(), &(), &())>) + } + 107 => { + __reduce107(input, errors, validator, __lookahead_start, __symbols, core::marker::PhantomData::<(&(), &(), &())>) + } + 108 => { // __AIR = AIR => ActionFn(0); let __sym0 = __pop_Variant12(__symbols); let __start = __sym0.0; @@ -2260,14 +2316,14 @@ mod __parse__AIR { _ => __symbol_type_mismatch() } } - fn __pop_Variant6< + fn __pop_Variant4< 'input, >( __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)> ) -> (AirPos, LambdaAST<'input>, AirPos) { match __symbols.pop() { - Some((__l, __Symbol::Variant6(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant4(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -2425,25 +2481,25 @@ mod __parse__AIR { _ => __symbol_type_mismatch() } } - fn __pop_Variant4< + fn __pop_Variant5< 'input, >( __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)> ) -> (AirPos, f64, AirPos) { match __symbols.pop() { - Some((__l, __Symbol::Variant4(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant5(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } - fn __pop_Variant5< + fn __pop_Variant6< 'input, >( __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)> ) -> (AirPos, i64, AirPos) { match __symbols.pop() { - Some((__l, __Symbol::Variant5(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant6(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -2471,11 +2527,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // () = Arg => ActionFn(91); + // () = Arg => ActionFn(95); let __sym0 = __pop_Variant9(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action91::<>(input, errors, validator, __sym0); + let __nt = super::__action95::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 0) } @@ -2492,10 +2548,10 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ()* = => ActionFn(89); + // ()* = => ActionFn(93); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action89::<>(input, errors, validator, &__start, &__end); + let __nt = super::__action93::<>(input, errors, validator, &__start, &__end); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (0, 1) } @@ -2512,11 +2568,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ()* = ()+ => ActionFn(90); + // ()* = ()+ => ActionFn(94); let __sym0 = __pop_Variant10(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action90::<>(input, errors, validator, __sym0); + let __nt = super::__action94::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (1, 1) } @@ -2533,11 +2589,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ()+ = Arg => ActionFn(100); + // ()+ = Arg => ActionFn(104); let __sym0 = __pop_Variant9(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action100::<>(input, errors, validator, __sym0); + let __nt = super::__action104::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (1, 2) } @@ -2554,13 +2610,13 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ()+ = ()+, Arg => ActionFn(101); + // ()+ = ()+, Arg => ActionFn(105); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant10(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action101::<>(input, errors, validator, __sym0, __sym1); + let __nt = super::__action105::<>(input, errors, validator, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (2, 2) } @@ -2577,10 +2633,10 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // @L = => ActionFn(97); + // @L = => ActionFn(101); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action97::<>(input, errors, validator, &__start, &__end); + let __nt = super::__action101::<>(input, errors, validator, &__start, &__end); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (0, 3) } @@ -2597,10 +2653,10 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // @R = => ActionFn(94); + // @R = => ActionFn(98); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action94::<>(input, errors, validator, &__start, &__end); + let __nt = super::__action98::<>(input, errors, validator, &__start, &__end); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (0, 4) } @@ -2638,11 +2694,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ApArgument = InitPeerId => ActionFn(73); + // ApArgument = InitPeerId => ActionFn(75); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action73::<>(input, errors, validator, __sym0); + let __nt = super::__action75::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 6) } @@ -2659,11 +2715,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ApArgument = LastError => ActionFn(74); + // ApArgument = LastError => ActionFn(76); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action74::<>(input, errors, validator, __sym0); + let __nt = super::__action76::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 6) } @@ -2680,11 +2736,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ApArgument = LastErrorWithLambda => ActionFn(75); - let __sym0 = __pop_Variant6(__symbols); + // ApArgument = LastErrorWithLambda => ActionFn(77); + let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action75::<>(input, errors, validator, __sym0); + let __nt = super::__action77::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 6) } @@ -2701,11 +2757,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ApArgument = Timestamp => ActionFn(76); + // ApArgument = Error => ActionFn(78); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action76::<>(input, errors, validator, __sym0); + let __nt = super::__action78::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 6) } @@ -2722,11 +2778,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ApArgument = TTL => ActionFn(77); - let __sym0 = __pop_Variant0(__symbols); + // ApArgument = ErrorWithLambda => ActionFn(79); + let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action77::<>(input, errors, validator, __sym0); + let __nt = super::__action79::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 6) } @@ -2743,11 +2799,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ApArgument = Literal => ActionFn(78); - let __sym0 = __pop_Variant7(__symbols); + // ApArgument = Timestamp => ActionFn(80); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action78::<>(input, errors, validator, __sym0); + let __nt = super::__action80::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 6) } @@ -2764,11 +2820,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ApArgument = Number => ActionFn(79); - let __sym0 = __pop_Variant25(__symbols); + // ApArgument = TTL => ActionFn(81); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action79::<>(input, errors, validator, __sym0); + let __nt = super::__action81::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 6) } @@ -2785,11 +2841,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ApArgument = Boolean => ActionFn(80); - let __sym0 = __pop_Variant1(__symbols); + // ApArgument = Literal => ActionFn(82); + let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action80::<>(input, errors, validator, __sym0); + let __nt = super::__action82::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 6) } @@ -2806,15 +2862,13 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ApArgument = "[", "]" => ActionFn(81); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); + // ApArgument = Number => ActionFn(83); + let __sym0 = __pop_Variant25(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action81::<>(input, errors, validator, __sym0, __sym1); + let __end = __sym0.2; + let __nt = super::__action83::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (2, 6) + (1, 6) } pub(crate) fn __reduce17< 'err, @@ -2829,11 +2883,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ApArgument = Scalar => ActionFn(82); - let __sym0 = __pop_Variant2(__symbols); + // ApArgument = Boolean => ActionFn(84); + let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action82::<>(input, errors, validator, __sym0); + let __nt = super::__action84::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 6) } @@ -2850,13 +2904,15 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ApArgument = ScalarWithLambda => ActionFn(83); - let __sym0 = __pop_Variant3(__symbols); + // ApArgument = "[", "]" => ActionFn(85); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action83::<>(input, errors, validator, __sym0); + let __end = __sym1.2; + let __nt = super::__action85::<>(input, errors, validator, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (1, 6) + (2, 6) } pub(crate) fn __reduce19< 'err, @@ -2871,11 +2927,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ApArgument = CanonStream => ActionFn(84); + // ApArgument = Scalar => ActionFn(86); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action84::<>(input, errors, validator, __sym0); + let __nt = super::__action86::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 6) } @@ -2892,11 +2948,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // ApArgument = CanonStreamWithLambda => ActionFn(85); + // ApArgument = ScalarWithLambda => ActionFn(87); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action85::<>(input, errors, validator, __sym0); + let __nt = super::__action87::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 6) } @@ -2912,6 +2968,48 @@ mod __parse__AIR { __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) + { + // ApArgument = CanonStream => ActionFn(88); + let __sym0 = __pop_Variant2(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action88::<>(input, errors, validator, __sym0); + __symbols.push((__start, __Symbol::Variant13(__nt), __end)); + (1, 6) + } + pub(crate) fn __reduce22< + 'err, + 'input, + 'v, + >( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __lookahead_start: Option<&AirPos>, + __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, + _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, + ) -> (usize, usize) + { + // ApArgument = CanonStreamWithLambda => ActionFn(89); + let __sym0 = __pop_Variant3(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action89::<>(input, errors, validator, __sym0); + __symbols.push((__start, __Symbol::Variant13(__nt), __end)); + (1, 6) + } + pub(crate) fn __reduce23< + 'err, + 'input, + 'v, + >( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __lookahead_start: Option<&AirPos>, + __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, + _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, + ) -> (usize, usize) { // ApMapKey = Literal => ActionFn(25); let __sym0 = __pop_Variant7(__symbols); @@ -2921,7 +3019,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 7) } - pub(crate) fn __reduce22< + pub(crate) fn __reduce24< 'err, 'input, 'v, @@ -2942,7 +3040,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 7) } - pub(crate) fn __reduce23< + pub(crate) fn __reduce25< 'err, 'input, 'v, @@ -2963,7 +3061,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 7) } - pub(crate) fn __reduce24< + pub(crate) fn __reduce26< 'err, 'input, 'v, @@ -2984,7 +3082,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 7) } - pub(crate) fn __reduce25< + pub(crate) fn __reduce27< 'err, 'input, 'v, @@ -3005,7 +3103,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 7) } - pub(crate) fn __reduce26< + pub(crate) fn __reduce28< 'err, 'input, 'v, @@ -3026,7 +3124,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (1, 8) } - pub(crate) fn __reduce27< + pub(crate) fn __reduce29< 'err, 'input, 'v, @@ -3047,7 +3145,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (1, 8) } - pub(crate) fn __reduce28< + pub(crate) fn __reduce30< 'err, 'input, 'v, @@ -3068,7 +3166,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 9) } - pub(crate) fn __reduce29< + pub(crate) fn __reduce31< 'err, 'input, 'v, @@ -3081,17 +3179,17 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Args = "[", "]" => ActionFn(102); + // Args = "[", "]" => ActionFn(106); 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::__action102::<>(input, errors, validator, __sym0, __sym1); + let __nt = super::__action106::<>(input, errors, validator, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); (2, 10) } - pub(crate) fn __reduce30< + pub(crate) fn __reduce32< 'err, 'input, 'v, @@ -3104,18 +3202,18 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Args = "[", ()+, "]" => ActionFn(103); + // Args = "[", ()+, "]" => ActionFn(107); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant10(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action103::<>(input, errors, validator, __sym0, __sym1, __sym2); + let __nt = super::__action107::<>(input, errors, validator, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); (3, 10) } - pub(crate) fn __reduce31< + pub(crate) fn __reduce33< 'err, 'input, 'v, @@ -3136,7 +3234,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant17(__nt), __end)); (1, 11) } - pub(crate) fn __reduce32< + pub(crate) fn __reduce34< 'err, 'input, 'v, @@ -3157,47 +3255,6 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant17(__nt), __end)); (1, 11) } - pub(crate) fn __reduce33< - 'err, - 'input, - 'v, - >( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __lookahead_start: Option<&AirPos>, - __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, - _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, - ) -> (usize, usize) - { - // CallOutput? = CallOutput => ActionFn(95); - let __sym0 = __pop_Variant17(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action95::<>(input, errors, validator, __sym0); - __symbols.push((__start, __Symbol::Variant18(__nt), __end)); - (1, 12) - } - pub(crate) fn __reduce34< - 'err, - 'input, - 'v, - >( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __lookahead_start: Option<&AirPos>, - __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, - _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, - ) -> (usize, usize) - { - // CallOutput? = => ActionFn(96); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); - let __end = __start.clone(); - let __nt = super::__action96::<>(input, errors, validator, &__start, &__end); - __symbols.push((__start, __Symbol::Variant18(__nt), __end)); - (0, 12) - } pub(crate) fn __reduce35< 'err, 'input, @@ -3211,15 +3268,56 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // CanonStreamArgument = CanonStream => ActionFn(88); + // CallOutput? = CallOutput => ActionFn(99); + let __sym0 = __pop_Variant17(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action99::<>(input, errors, validator, __sym0); + __symbols.push((__start, __Symbol::Variant18(__nt), __end)); + (1, 12) + } + pub(crate) fn __reduce36< + 'err, + 'input, + 'v, + >( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __lookahead_start: Option<&AirPos>, + __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, + _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, + ) -> (usize, usize) + { + // CallOutput? = => ActionFn(100); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); + let __end = __start.clone(); + let __nt = super::__action100::<>(input, errors, validator, &__start, &__end); + __symbols.push((__start, __Symbol::Variant18(__nt), __end)); + (0, 12) + } + pub(crate) fn __reduce37< + 'err, + 'input, + 'v, + >( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __lookahead_start: Option<&AirPos>, + __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, + _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, + ) -> (usize, usize) + { + // CanonStreamArgument = CanonStream => ActionFn(92); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action88::<>(input, errors, validator, __sym0); + let __nt = super::__action92::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant19(__nt), __end)); (1, 13) } - pub(crate) fn __reduce36< + pub(crate) fn __reduce38< 'err, 'input, 'v, @@ -3240,7 +3338,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant20(__nt), __end)); (1, 14) } - pub(crate) fn __reduce37< + pub(crate) fn __reduce39< 'err, 'input, 'v, @@ -3261,7 +3359,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant20(__nt), __end)); (1, 14) } - pub(crate) fn __reduce38< + pub(crate) fn __reduce40< 'err, 'input, 'v, @@ -3277,14 +3375,14 @@ mod __parse__AIR { // FailBody = I64, Literal => ActionFn(34); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant7(__symbols); - let __sym0 = __pop_Variant5(__symbols); + let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym1.2; let __nt = super::__action34::<>(input, errors, validator, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); (2, 14) } - pub(crate) fn __reduce39< + pub(crate) fn __reduce41< 'err, 'input, 'v, @@ -3305,7 +3403,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant20(__nt), __end)); (1, 14) } - pub(crate) fn __reduce40< + pub(crate) fn __reduce42< 'err, 'input, 'v, @@ -3318,15 +3416,15 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // FailBody = LastError => ActionFn(117); + // FailBody = LastError => ActionFn(121); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action117::<>(input, errors, validator, __sym0); + let __nt = super::__action121::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant20(__nt), __end)); (1, 14) } - pub(crate) fn __reduce41< + pub(crate) fn __reduce43< 'err, 'input, 'v, @@ -3347,7 +3445,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant21(__nt), __end)); (1, 15) } - pub(crate) fn __reduce42< + pub(crate) fn __reduce44< 'err, 'input, 'v, @@ -3368,7 +3466,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant21(__nt), __end)); (1, 15) } - pub(crate) fn __reduce43< + pub(crate) fn __reduce45< 'err, 'input, 'v, @@ -3389,7 +3487,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant21(__nt), __end)); (1, 15) } - pub(crate) fn __reduce44< + pub(crate) fn __reduce46< 'err, 'input, 'v, @@ -3412,7 +3510,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant21(__nt), __end)); (2, 15) } - pub(crate) fn __reduce45< + pub(crate) fn __reduce47< 'err, 'input, 'v, @@ -3433,59 +3531,6 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant22(__nt), __end)); (1, 16) } - pub(crate) fn __reduce46< - 'err, - 'input, - 'v, - >( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __lookahead_start: Option<&AirPos>, - __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, - _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, - ) -> (usize, usize) - { - // Instr = "(", call, Triplet, Args, CallOutput, ")" => ActionFn(130); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant17(__symbols); - let __sym3 = __pop_Variant16(__symbols); - let __sym2 = __pop_Variant29(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = super::__action130::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (6, 17) - } - pub(crate) fn __reduce47< - 'err, - 'input, - 'v, - >( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __lookahead_start: Option<&AirPos>, - __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, - _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, - ) -> (usize, usize) - { - // Instr = "(", call, Triplet, Args, ")" => ActionFn(131); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant16(__symbols); - let __sym2 = __pop_Variant29(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action131::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4); - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (5, 17) - } pub(crate) fn __reduce48< 'err, 'input, @@ -3499,17 +3544,17 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Instr = "(", canon, ResolvableToPeerIdVariable, StreamArgument, CanonStreamArgument, ")" => ActionFn(119); + // Instr = "(", call, Triplet, Args, CallOutput, ")" => ActionFn(134); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant19(__symbols); - let __sym3 = __pop_Variant27(__symbols); - let __sym2 = __pop_Variant26(__symbols); + let __sym4 = __pop_Variant17(__symbols); + let __sym3 = __pop_Variant16(__symbols); + let __sym2 = __pop_Variant29(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action119::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action134::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (6, 17) } @@ -3526,19 +3571,18 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Instr = "(", canon, ResolvableToPeerIdVariable, StreamMapArgument, Scalar, ")" => ActionFn(120); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant2(__symbols); - let __sym3 = __pop_Variant28(__symbols); - let __sym2 = __pop_Variant26(__symbols); + // Instr = "(", call, Triplet, Args, ")" => ActionFn(135); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant16(__symbols); + let __sym2 = __pop_Variant29(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym5.2; - let __nt = super::__action120::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __end = __sym4.2; + let __nt = super::__action135::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (6, 17) + (5, 17) } pub(crate) fn __reduce50< 'err, @@ -3553,18 +3597,19 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Instr = "(", ap, ApArgument, ApResult, ")" => ActionFn(121); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant15(__symbols); - let __sym2 = __pop_Variant13(__symbols); + // Instr = "(", canon, ResolvableToPeerIdVariable, StreamArgument, CanonStreamArgument, ")" => ActionFn(123); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant19(__symbols); + let __sym3 = __pop_Variant27(__symbols); + let __sym2 = __pop_Variant26(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action121::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4); + let __end = __sym5.2; + let __nt = super::__action123::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (5, 17) + (6, 17) } pub(crate) fn __reduce51< 'err, @@ -3579,7 +3624,60 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Instr = "(", ap, "(", ApMapKey, ApArgument, ")", StreamMap, ")" => ActionFn(122); + // Instr = "(", canon, ResolvableToPeerIdVariable, StreamMapArgument, Scalar, ")" => ActionFn(124); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant2(__symbols); + let __sym3 = __pop_Variant28(__symbols); + let __sym2 = __pop_Variant26(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = super::__action124::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (6, 17) + } + pub(crate) fn __reduce52< + 'err, + 'input, + 'v, + >( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __lookahead_start: Option<&AirPos>, + __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, + _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, + ) -> (usize, usize) + { + // Instr = "(", ap, ApArgument, ApResult, ")" => ActionFn(125); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant15(__symbols); + let __sym2 = __pop_Variant13(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = super::__action125::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (5, 17) + } + pub(crate) fn __reduce53< + 'err, + 'input, + 'v, + >( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __lookahead_start: Option<&AirPos>, + __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, + _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, + ) -> (usize, usize) + { + // Instr = "(", ap, "(", ApMapKey, ApArgument, ")", StreamMap, ")" => ActionFn(126); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant2(__symbols); @@ -3591,11 +3689,11 @@ mod __parse__AIR { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action122::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action126::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (8, 17) } - pub(crate) fn __reduce52< + pub(crate) fn __reduce54< 'err, 'input, 'v, @@ -3621,7 +3719,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (5, 17) } - pub(crate) fn __reduce53< + pub(crate) fn __reduce55< 'err, 'input, 'v, @@ -3647,7 +3745,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (5, 17) } - pub(crate) fn __reduce54< + pub(crate) fn __reduce56< 'err, 'input, 'v, @@ -3671,7 +3769,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (3, 17) } - pub(crate) fn __reduce55< + pub(crate) fn __reduce57< 'err, 'input, 'v, @@ -3695,7 +3793,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (3, 17) } - pub(crate) fn __reduce56< + pub(crate) fn __reduce58< 'err, 'input, 'v, @@ -3708,7 +3806,7 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Instr = "(", new, NewArgument, Instr, ")" => ActionFn(123); + // Instr = "(", new, NewArgument, Instr, ")" => ActionFn(127); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant12(__symbols); @@ -3717,11 +3815,11 @@ mod __parse__AIR { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action123::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action127::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (5, 17) } - pub(crate) fn __reduce57< + pub(crate) fn __reduce59< 'err, 'input, 'v, @@ -3746,61 +3844,6 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (4, 17) } - pub(crate) fn __reduce58< - 'err, - 'input, - 'v, - >( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __lookahead_start: Option<&AirPos>, - __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, - _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, - ) -> (usize, usize) - { - // Instr = "(", fold, FoldScalarIterable, Scalar, Instr, Instr, ")" => ActionFn(132); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant0(__symbols); - let __sym5 = __pop_Variant12(__symbols); - let __sym4 = __pop_Variant12(__symbols); - let __sym3 = __pop_Variant2(__symbols); - let __sym2 = __pop_Variant21(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym6.2; - let __nt = super::__action132::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (7, 17) - } - pub(crate) fn __reduce59< - 'err, - 'input, - 'v, - >( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __lookahead_start: Option<&AirPos>, - __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, - _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, - ) -> (usize, usize) - { - // Instr = "(", fold, FoldScalarIterable, Scalar, Instr, ")" => ActionFn(133); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant12(__symbols); - let __sym3 = __pop_Variant2(__symbols); - let __sym2 = __pop_Variant21(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = super::__action133::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (6, 17) - } pub(crate) fn __reduce60< 'err, 'input, @@ -3814,18 +3857,18 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Instr = "(", fold, Stream, Scalar, Instr, Instr, ")" => ActionFn(134); + // Instr = "(", fold, FoldScalarIterable, Scalar, Instr, Instr, ")" => ActionFn(136); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant12(__symbols); let __sym4 = __pop_Variant12(__symbols); let __sym3 = __pop_Variant2(__symbols); - let __sym2 = __pop_Variant2(__symbols); + let __sym2 = __pop_Variant21(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action134::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action136::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (7, 17) } @@ -3842,17 +3885,17 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Instr = "(", fold, Stream, Scalar, Instr, ")" => ActionFn(135); + // Instr = "(", fold, FoldScalarIterable, Scalar, Instr, ")" => ActionFn(137); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant12(__symbols); let __sym3 = __pop_Variant2(__symbols); - let __sym2 = __pop_Variant2(__symbols); + let __sym2 = __pop_Variant21(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action135::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action137::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (6, 17) } @@ -3869,7 +3912,7 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Instr = "(", fold, StreamMap, Scalar, Instr, Instr, ")" => ActionFn(136); + // Instr = "(", fold, Stream, Scalar, Instr, Instr, ")" => ActionFn(138); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant0(__symbols); let __sym5 = __pop_Variant12(__symbols); @@ -3880,7 +3923,7 @@ mod __parse__AIR { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action136::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action138::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (7, 17) } @@ -3897,7 +3940,7 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Instr = "(", fold, StreamMap, Scalar, Instr, ")" => ActionFn(137); + // Instr = "(", fold, Stream, Scalar, Instr, ")" => ActionFn(139); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant12(__symbols); @@ -3907,7 +3950,7 @@ mod __parse__AIR { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action137::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action139::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (6, 17) } @@ -3924,7 +3967,62 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Instr = "(", next, Scalar, ")" => ActionFn(127); + // Instr = "(", fold, StreamMap, Scalar, Instr, Instr, ")" => ActionFn(140); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant0(__symbols); + let __sym5 = __pop_Variant12(__symbols); + let __sym4 = __pop_Variant12(__symbols); + let __sym3 = __pop_Variant2(__symbols); + let __sym2 = __pop_Variant2(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym6.2; + let __nt = super::__action140::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (7, 17) + } + pub(crate) fn __reduce65< + 'err, + 'input, + 'v, + >( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __lookahead_start: Option<&AirPos>, + __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, + _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, + ) -> (usize, usize) + { + // Instr = "(", fold, StreamMap, Scalar, Instr, ")" => ActionFn(141); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant12(__symbols); + let __sym3 = __pop_Variant2(__symbols); + let __sym2 = __pop_Variant2(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = super::__action141::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (6, 17) + } + pub(crate) fn __reduce66< + 'err, + 'input, + 'v, + >( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __lookahead_start: Option<&AirPos>, + __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, + _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, + ) -> (usize, usize) + { + // Instr = "(", next, Scalar, ")" => ActionFn(131); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant2(__symbols); @@ -3932,11 +4030,11 @@ mod __parse__AIR { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action127::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action131::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (4, 17) } - pub(crate) fn __reduce65< + pub(crate) fn __reduce67< 'err, 'input, 'v, @@ -3962,60 +4060,6 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (5, 17) } - pub(crate) fn __reduce66< - 'err, - 'input, - 'v, - >( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __lookahead_start: Option<&AirPos>, - __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, - _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, - ) -> (usize, usize) - { - // Instr = "(", match_, Value, Value, Instr, ")" => ActionFn(128); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant12(__symbols); - let __sym3 = __pop_Variant9(__symbols); - let __sym2 = __pop_Variant9(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = super::__action128::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (6, 17) - } - pub(crate) fn __reduce67< - 'err, - 'input, - 'v, - >( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __lookahead_start: Option<&AirPos>, - __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, - _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, - ) -> (usize, usize) - { - // Instr = "(", mismatch, Value, Value, Instr, ")" => ActionFn(129); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant12(__symbols); - let __sym3 = __pop_Variant9(__symbols); - let __sym2 = __pop_Variant9(__symbols); - let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym5.2; - let __nt = super::__action129::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (6, 17) - } pub(crate) fn __reduce68< 'err, 'input, @@ -4028,6 +4072,60 @@ mod __parse__AIR { __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) + { + // Instr = "(", match_, Value, Value, Instr, ")" => ActionFn(132); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant12(__symbols); + let __sym3 = __pop_Variant9(__symbols); + let __sym2 = __pop_Variant9(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = super::__action132::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (6, 17) + } + pub(crate) fn __reduce69< + 'err, + 'input, + 'v, + >( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __lookahead_start: Option<&AirPos>, + __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, + _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, + ) -> (usize, usize) + { + // Instr = "(", mismatch, Value, Value, Instr, ")" => ActionFn(133); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant12(__symbols); + let __sym3 = __pop_Variant9(__symbols); + let __sym2 = __pop_Variant9(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym5.2; + let __nt = super::__action133::<>(input, errors, validator, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (6, 17) + } + pub(crate) fn __reduce70< + 'err, + 'input, + 'v, + >( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __lookahead_start: Option<&AirPos>, + __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, + _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, + ) -> (usize, usize) { // Instr = error => ActionFn(20); let __sym0 = __pop_Variant8(__symbols); @@ -4037,7 +4135,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (1, 17) } - pub(crate) fn __reduce69< + pub(crate) fn __reduce71< 'err, 'input, 'v, @@ -4050,15 +4148,15 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Instr? = Instr => ActionFn(92); + // Instr? = Instr => ActionFn(96); let __sym0 = __pop_Variant12(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action92::<>(input, errors, validator, __sym0); + let __nt = super::__action96::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant23(__nt), __end)); (1, 18) } - pub(crate) fn __reduce70< + pub(crate) fn __reduce72< 'err, 'input, 'v, @@ -4071,14 +4169,14 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Instr? = => ActionFn(93); + // Instr? = => ActionFn(97); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action93::<>(input, errors, validator, &__start, &__end); + let __nt = super::__action97::<>(input, errors, validator, &__start, &__end); __symbols.push((__start, __Symbol::Variant23(__nt), __end)); (0, 18) } - pub(crate) fn __reduce71< + pub(crate) fn __reduce73< 'err, 'input, 'v, @@ -4099,7 +4197,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant24(__nt), __end)); (1, 19) } - pub(crate) fn __reduce72< + pub(crate) fn __reduce74< 'err, 'input, 'v, @@ -4120,7 +4218,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant24(__nt), __end)); (1, 19) } - pub(crate) fn __reduce73< + pub(crate) fn __reduce75< 'err, 'input, 'v, @@ -4141,7 +4239,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant24(__nt), __end)); (1, 19) } - pub(crate) fn __reduce74< + pub(crate) fn __reduce76< 'err, 'input, 'v, @@ -4162,7 +4260,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant24(__nt), __end)); (1, 19) } - pub(crate) fn __reduce75< + pub(crate) fn __reduce77< 'err, 'input, 'v, @@ -4176,14 +4274,14 @@ mod __parse__AIR { ) -> (usize, usize) { // Number = I64 => ActionFn(57); - let __sym0 = __pop_Variant5(__symbols); + let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action57::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant25(__nt), __end)); (1, 20) } - pub(crate) fn __reduce76< + pub(crate) fn __reduce78< 'err, 'input, 'v, @@ -4197,14 +4295,14 @@ mod __parse__AIR { ) -> (usize, usize) { // Number = F64 => ActionFn(58); - let __sym0 = __pop_Variant4(__symbols); + let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action58::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant25(__nt), __end)); (1, 20) } - pub(crate) fn __reduce77< + pub(crate) fn __reduce79< 'err, 'input, 'v, @@ -4225,7 +4323,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant26(__nt), __end)); (1, 21) } - pub(crate) fn __reduce78< + pub(crate) fn __reduce80< 'err, 'input, 'v, @@ -4246,7 +4344,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant26(__nt), __end)); (1, 22) } - pub(crate) fn __reduce79< + pub(crate) fn __reduce81< 'err, 'input, 'v, @@ -4267,7 +4365,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant26(__nt), __end)); (1, 22) } - pub(crate) fn __reduce80< + pub(crate) fn __reduce82< 'err, 'input, 'v, @@ -4288,7 +4386,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant26(__nt), __end)); (1, 22) } - pub(crate) fn __reduce81< + pub(crate) fn __reduce83< 'err, 'input, 'v, @@ -4309,7 +4407,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant26(__nt), __end)); (1, 22) } - pub(crate) fn __reduce82< + pub(crate) fn __reduce84< 'err, 'input, 'v, @@ -4330,7 +4428,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant26(__nt), __end)); (1, 22) } - pub(crate) fn __reduce83< + pub(crate) fn __reduce85< 'err, 'input, 'v, @@ -4351,7 +4449,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant22(__nt), __end)); (1, 23) } - pub(crate) fn __reduce84< + pub(crate) fn __reduce86< 'err, 'input, 'v, @@ -4372,7 +4470,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant22(__nt), __end)); (1, 23) } - pub(crate) fn __reduce85< + pub(crate) fn __reduce87< 'err, 'input, 'v, @@ -4393,7 +4491,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant22(__nt), __end)); (1, 23) } - pub(crate) fn __reduce86< + pub(crate) fn __reduce88< 'err, 'input, 'v, @@ -4414,7 +4512,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant22(__nt), __end)); (1, 23) } - pub(crate) fn __reduce87< + pub(crate) fn __reduce89< 'err, 'input, 'v, @@ -4435,7 +4533,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant22(__nt), __end)); (1, 24) } - pub(crate) fn __reduce88< + pub(crate) fn __reduce90< 'err, 'input, 'v, @@ -4448,15 +4546,15 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // StreamArgument = Stream => ActionFn(86); + // StreamArgument = Stream => ActionFn(90); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action86::<>(input, errors, validator, __sym0); + let __nt = super::__action90::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant27(__nt), __end)); (1, 25) } - pub(crate) fn __reduce89< + pub(crate) fn __reduce91< 'err, 'input, 'v, @@ -4469,15 +4567,15 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // StreamMapArgument = StreamMap => ActionFn(87); + // StreamMapArgument = StreamMap => ActionFn(91); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action87::<>(input, errors, validator, __sym0); + let __nt = super::__action91::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant28(__nt), __end)); (1, 26) } - pub(crate) fn __reduce90< + pub(crate) fn __reduce92< 'err, 'input, 'v, @@ -4503,7 +4601,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant29(__nt), __end)); (5, 27) } - pub(crate) fn __reduce91< + pub(crate) fn __reduce93< 'err, 'input, 'v, @@ -4524,7 +4622,7 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 28) } - pub(crate) fn __reduce92< + pub(crate) fn __reduce94< 'err, 'input, 'v, @@ -4545,48 +4643,6 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 28) } - pub(crate) fn __reduce93< - 'err, - 'input, - 'v, - >( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __lookahead_start: Option<&AirPos>, - __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, - _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, - ) -> (usize, usize) - { - // Value = LastErrorWithLambda => ActionFn(62); - let __sym0 = __pop_Variant6(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action62::<>(input, errors, validator, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 28) - } - pub(crate) fn __reduce94< - 'err, - 'input, - 'v, - >( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __lookahead_start: Option<&AirPos>, - __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, - _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, - ) -> (usize, usize) - { - // Value = Literal => ActionFn(63); - let __sym0 = __pop_Variant7(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action63::<>(input, errors, validator, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 28) - } pub(crate) fn __reduce95< 'err, 'input, @@ -4600,11 +4656,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Value = Timestamp => ActionFn(64); - let __sym0 = __pop_Variant0(__symbols); + // Value = LastErrorWithLambda => ActionFn(62); + let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action64::<>(input, errors, validator, __sym0); + let __nt = super::__action62::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 28) } @@ -4621,11 +4677,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Value = TTL => ActionFn(65); + // Value = Error => ActionFn(63); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action65::<>(input, errors, validator, __sym0); + let __nt = super::__action63::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 28) } @@ -4642,11 +4698,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Value = Number => ActionFn(66); - let __sym0 = __pop_Variant25(__symbols); + // Value = ErrorWithLambda => ActionFn(64); + let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action66::<>(input, errors, validator, __sym0); + let __nt = super::__action64::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 28) } @@ -4663,11 +4719,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Value = Boolean => ActionFn(67); - let __sym0 = __pop_Variant1(__symbols); + // Value = Literal => ActionFn(65); + let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action67::<>(input, errors, validator, __sym0); + let __nt = super::__action65::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 28) } @@ -4684,15 +4740,13 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Value = "[", "]" => ActionFn(68); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); + // Value = Timestamp => ActionFn(66); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action68::<>(input, errors, validator, __sym0, __sym1); + let __end = __sym0.2; + let __nt = super::__action66::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (2, 28) + (1, 28) } pub(crate) fn __reduce100< 'err, @@ -4707,11 +4761,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Value = Scalar => ActionFn(69); - let __sym0 = __pop_Variant2(__symbols); + // Value = TTL => ActionFn(67); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action69::<>(input, errors, validator, __sym0); + let __nt = super::__action67::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 28) } @@ -4728,11 +4782,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Value = ScalarWithLambda => ActionFn(70); - let __sym0 = __pop_Variant3(__symbols); + // Value = Number => ActionFn(68); + let __sym0 = __pop_Variant25(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action70::<>(input, errors, validator, __sym0); + let __nt = super::__action68::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 28) } @@ -4749,11 +4803,11 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Value = CanonStream => ActionFn(71); - let __sym0 = __pop_Variant2(__symbols); + // Value = Boolean => ActionFn(69); + let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action71::<>(input, errors, validator, __sym0); + let __nt = super::__action69::<>(input, errors, validator, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 28) } @@ -4770,7 +4824,51 @@ mod __parse__AIR { _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, ) -> (usize, usize) { - // Value = CanonStreamWithLambda => ActionFn(72); + // Value = "[", "]" => ActionFn(70); + 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::__action70::<>(input, errors, validator, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (2, 28) + } + pub(crate) fn __reduce104< + 'err, + 'input, + 'v, + >( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __lookahead_start: Option<&AirPos>, + __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, + _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, + ) -> (usize, usize) + { + // Value = Scalar => ActionFn(71); + let __sym0 = __pop_Variant2(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action71::<>(input, errors, validator, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 28) + } + pub(crate) fn __reduce105< + 'err, + 'input, + 'v, + >( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __lookahead_start: Option<&AirPos>, + __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, + _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, + ) -> (usize, usize) + { + // Value = ScalarWithLambda => ActionFn(72); let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0; let __end = __sym0.2; @@ -4778,6 +4876,48 @@ mod __parse__AIR { __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 28) } + pub(crate) fn __reduce106< + 'err, + 'input, + 'v, + >( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __lookahead_start: Option<&AirPos>, + __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, + _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, + ) -> (usize, usize) + { + // Value = CanonStream => ActionFn(73); + let __sym0 = __pop_Variant2(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action73::<>(input, errors, validator, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 28) + } + pub(crate) fn __reduce107< + 'err, + 'input, + 'v, + >( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __lookahead_start: Option<&AirPos>, + __symbols: &mut alloc::vec::Vec<(AirPos,__Symbol<'input>,AirPos)>, + _: core::marker::PhantomData<(&'err (), &'input (), &'v ())>, + ) -> (usize, usize) + { + // Value = CanonStreamWithLambda => ActionFn(74); + let __sym0 = __pop_Variant3(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action74::<>(input, errors, validator, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 28) + } } pub use self::__parse__AIR::AIRParser; @@ -6011,6 +6151,38 @@ fn __action63< 'err, 'input, 'v, +>( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + (_, __0, _): (AirPos, Token<'input>, AirPos), +) -> ImmutableValue<'input> +{ + ImmutableValue::Error(InstructionErrorAST::new(None)) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action64< + 'err, + 'input, + 'v, +>( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + (_, le, _): (AirPos, LambdaAST<'input>, AirPos), +) -> ImmutableValue<'input> +{ + ImmutableValue::Error(InstructionErrorAST::new(Some(le))) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action65< + 'err, + 'input, + 'v, >( input: &'input str, errors: &'err mut Vec, ParserError>>, @@ -6023,7 +6195,7 @@ fn __action63< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action64< +fn __action66< 'err, 'input, 'v, @@ -6039,7 +6211,7 @@ fn __action64< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action65< +fn __action67< 'err, 'input, 'v, @@ -6055,7 +6227,7 @@ fn __action65< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action66< +fn __action68< 'err, 'input, 'v, @@ -6071,7 +6243,7 @@ fn __action66< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action67< +fn __action69< 'err, 'input, 'v, @@ -6087,7 +6259,7 @@ fn __action67< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action68< +fn __action70< 'err, 'input, 'v, @@ -6104,7 +6276,7 @@ fn __action68< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action69< +fn __action71< 'err, 'input, 'v, @@ -6120,7 +6292,7 @@ fn __action69< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action70< +fn __action72< 'err, 'input, 'v, @@ -6136,7 +6308,7 @@ fn __action70< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action71< +fn __action73< 'err, 'input, 'v, @@ -6152,7 +6324,7 @@ fn __action71< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action72< +fn __action74< 'err, 'input, 'v, @@ -6168,7 +6340,7 @@ fn __action72< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action73< +fn __action75< 'err, 'input, 'v, @@ -6184,7 +6356,7 @@ fn __action73< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action74< +fn __action76< 'err, 'input, 'v, @@ -6200,7 +6372,7 @@ fn __action74< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action75< +fn __action77< 'err, 'input, 'v, @@ -6216,7 +6388,39 @@ fn __action75< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action76< +fn __action78< + 'err, + 'input, + 'v, +>( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + (_, __0, _): (AirPos, Token<'input>, AirPos), +) -> ApArgument<'input> +{ + ApArgument::Error(InstructionErrorAST::new(None)) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action79< + 'err, + 'input, + 'v, +>( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + (_, le, _): (AirPos, LambdaAST<'input>, AirPos), +) -> ApArgument<'input> +{ + ApArgument::Error(InstructionErrorAST::new(Some(le))) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action80< 'err, 'input, 'v, @@ -6232,7 +6436,7 @@ fn __action76< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action77< +fn __action81< 'err, 'input, 'v, @@ -6248,7 +6452,7 @@ fn __action77< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action78< +fn __action82< 'err, 'input, 'v, @@ -6264,7 +6468,7 @@ fn __action78< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action79< +fn __action83< 'err, 'input, 'v, @@ -6280,7 +6484,7 @@ fn __action79< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action80< +fn __action84< 'err, 'input, 'v, @@ -6296,7 +6500,7 @@ fn __action80< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action81< +fn __action85< 'err, 'input, 'v, @@ -6313,7 +6517,7 @@ fn __action81< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action82< +fn __action86< 'err, 'input, 'v, @@ -6329,7 +6533,7 @@ fn __action82< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action83< +fn __action87< 'err, 'input, 'v, @@ -6345,7 +6549,7 @@ fn __action83< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action84< +fn __action88< 'err, 'input, 'v, @@ -6361,7 +6565,7 @@ fn __action84< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action85< +fn __action89< 'err, 'input, 'v, @@ -6377,7 +6581,7 @@ fn __action85< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action86< +fn __action90< 'err, 'input, 'v, @@ -6393,7 +6597,7 @@ fn __action86< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action87< +fn __action91< 'err, 'input, 'v, @@ -6409,7 +6613,7 @@ fn __action87< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action88< +fn __action92< 'err, 'input, 'v, @@ -6425,7 +6629,7 @@ fn __action88< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action89< +fn __action93< 'err, 'input, 'v, @@ -6442,7 +6646,7 @@ fn __action89< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action90< +fn __action94< 'err, 'input, 'v, @@ -6458,7 +6662,7 @@ fn __action90< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action91< +fn __action95< 'err, 'input, 'v, @@ -6474,7 +6678,7 @@ fn __action91< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action92< +fn __action96< 'err, 'input, 'v, @@ -6490,7 +6694,7 @@ fn __action92< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action93< +fn __action97< 'err, 'input, 'v, @@ -6506,7 +6710,7 @@ fn __action93< } #[allow(unused_variables)] -fn __action94< +fn __action98< 'err, 'input, 'v, @@ -6523,7 +6727,7 @@ fn __action94< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action95< +fn __action99< 'err, 'input, 'v, @@ -6539,7 +6743,7 @@ fn __action95< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action96< +fn __action100< 'err, 'input, 'v, @@ -6555,7 +6759,7 @@ fn __action96< } #[allow(unused_variables)] -fn __action97< +fn __action101< 'err, 'input, 'v, @@ -6572,7 +6776,7 @@ fn __action97< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action98< +fn __action102< 'err, 'input, 'v, @@ -6588,7 +6792,7 @@ fn __action98< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action99< +fn __action103< 'err, 'input, 'v, @@ -6605,7 +6809,7 @@ fn __action99< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action100< +fn __action104< 'err, 'input, 'v, @@ -6618,14 +6822,14 @@ fn __action100< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action91( + let __temp0 = __action95( input, errors, validator, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action98( + __action102( input, errors, validator, @@ -6635,7 +6839,7 @@ fn __action100< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action101< +fn __action105< 'err, 'input, 'v, @@ -6649,14 +6853,14 @@ fn __action101< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action91( + let __temp0 = __action95( input, errors, validator, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action99( + __action103( input, errors, validator, @@ -6667,7 +6871,7 @@ fn __action101< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action102< +fn __action106< 'err, 'input, 'v, @@ -6681,7 +6885,7 @@ fn __action102< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action89( + let __temp0 = __action93( input, errors, validator, @@ -6701,7 +6905,7 @@ fn __action102< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action103< +fn __action107< 'err, 'input, 'v, @@ -6716,7 +6920,7 @@ fn __action103< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action90( + let __temp0 = __action94( input, errors, validator, @@ -6735,7 +6939,7 @@ fn __action103< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action104< +fn __action108< 'err, 'input, 'v, @@ -6749,7 +6953,7 @@ fn __action104< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action97( + let __temp0 = __action101( input, errors, validator, @@ -6769,7 +6973,7 @@ fn __action104< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action105< +fn __action109< 'err, 'input, 'v, @@ -6788,7 +6992,7 @@ fn __action105< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action97( + let __temp0 = __action101( input, errors, validator, @@ -6813,7 +7017,7 @@ fn __action105< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action106< +fn __action110< 'err, 'input, 'v, @@ -6832,7 +7036,7 @@ fn __action106< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action97( + let __temp0 = __action101( input, errors, validator, @@ -6857,7 +7061,7 @@ fn __action106< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action107< +fn __action111< 'err, 'input, 'v, @@ -6876,7 +7080,7 @@ fn __action107< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action97( + let __temp0 = __action101( input, errors, validator, @@ -6901,7 +7105,7 @@ fn __action107< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action108< +fn __action112< 'err, 'input, 'v, @@ -6919,7 +7123,7 @@ fn __action108< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action97( + let __temp0 = __action101( input, errors, validator, @@ -6943,7 +7147,7 @@ fn __action108< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action109< +fn __action113< 'err, 'input, 'v, @@ -6964,7 +7168,7 @@ fn __action109< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action97( + let __temp0 = __action101( input, errors, validator, @@ -6991,7 +7195,7 @@ fn __action109< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action110< +fn __action114< 'err, 'input, 'v, @@ -7009,7 +7213,7 @@ fn __action110< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action97( + let __temp0 = __action101( input, errors, validator, @@ -7033,7 +7237,7 @@ fn __action110< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action111< +fn __action115< 'err, 'input, 'v, @@ -7053,7 +7257,7 @@ fn __action111< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action97( + let __temp0 = __action101( input, errors, validator, @@ -7079,7 +7283,7 @@ fn __action111< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action112< +fn __action116< 'err, 'input, 'v, @@ -7099,7 +7303,7 @@ fn __action112< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action97( + let __temp0 = __action101( input, errors, validator, @@ -7125,7 +7329,7 @@ fn __action112< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action113< +fn __action117< 'err, 'input, 'v, @@ -7145,7 +7349,7 @@ fn __action113< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action97( + let __temp0 = __action101( input, errors, validator, @@ -7171,7 +7375,7 @@ fn __action113< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action114< +fn __action118< 'err, 'input, 'v, @@ -7188,7 +7392,7 @@ fn __action114< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action97( + let __temp0 = __action101( input, errors, validator, @@ -7211,7 +7415,7 @@ fn __action114< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action115< +fn __action119< 'err, 'input, 'v, @@ -7230,7 +7434,7 @@ fn __action115< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action97( + let __temp0 = __action101( input, errors, validator, @@ -7255,7 +7459,7 @@ fn __action115< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action116< +fn __action120< 'err, 'input, 'v, @@ -7274,7 +7478,7 @@ fn __action116< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action97( + let __temp0 = __action101( input, errors, validator, @@ -7299,7 +7503,7 @@ fn __action116< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action117< +fn __action121< 'err, 'input, 'v, @@ -7312,7 +7516,7 @@ fn __action117< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action94( + let __temp0 = __action98( input, errors, validator, @@ -7320,7 +7524,7 @@ fn __action117< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action104( + __action108( input, errors, validator, @@ -7331,7 +7535,7 @@ fn __action117< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action118< +fn __action122< 'err, 'input, 'v, @@ -7349,7 +7553,7 @@ fn __action118< { let __start0 = __5.2; let __end0 = __5.2; - let __temp0 = __action94( + let __temp0 = __action98( input, errors, validator, @@ -7357,7 +7561,7 @@ fn __action118< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action105( + __action109( input, errors, validator, @@ -7373,7 +7577,7 @@ fn __action118< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action119< +fn __action123< 'err, 'input, 'v, @@ -7391,7 +7595,7 @@ fn __action119< { let __start0 = __5.2; let __end0 = __5.2; - let __temp0 = __action94( + let __temp0 = __action98( input, errors, validator, @@ -7399,7 +7603,7 @@ fn __action119< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action106( + __action110( input, errors, validator, @@ -7415,7 +7619,7 @@ fn __action119< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action120< +fn __action124< 'err, 'input, 'v, @@ -7433,7 +7637,7 @@ fn __action120< { let __start0 = __5.2; let __end0 = __5.2; - let __temp0 = __action94( + let __temp0 = __action98( input, errors, validator, @@ -7441,7 +7645,7 @@ fn __action120< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action107( + __action111( input, errors, validator, @@ -7457,7 +7661,7 @@ fn __action120< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action121< +fn __action125< 'err, 'input, 'v, @@ -7474,7 +7678,7 @@ fn __action121< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action94( + let __temp0 = __action98( input, errors, validator, @@ -7482,7 +7686,7 @@ fn __action121< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action108( + __action112( input, errors, validator, @@ -7497,7 +7701,7 @@ fn __action121< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action122< +fn __action126< 'err, 'input, 'v, @@ -7517,180 +7721,7 @@ fn __action122< { let __start0 = __7.2; let __end0 = __7.2; - let __temp0 = __action94( - input, - errors, - validator, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action109( - input, - errors, - validator, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __7, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action123< - 'err, - 'input, - 'v, ->( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __0: (AirPos, Token<'input>, AirPos), - __1: (AirPos, Token<'input>, AirPos), - __2: (AirPos, NewArgument<'input>, AirPos), - __3: (AirPos, Box>, AirPos), - __4: (AirPos, Token<'input>, AirPos), -) -> Box> -{ - let __start0 = __4.2; - let __end0 = __4.2; - let __temp0 = __action94( - input, - errors, - validator, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action110( - input, - errors, - validator, - __0, - __1, - __2, - __3, - __4, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action124< - 'err, - 'input, - 'v, ->( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __0: (AirPos, Token<'input>, AirPos), - __1: (AirPos, Token<'input>, AirPos), - __2: (AirPos, FoldScalarIterable<'input>, AirPos), - __3: (AirPos, (&'input str, AirPos), AirPos), - __4: (AirPos, Box>, AirPos), - __5: (AirPos, core::option::Option>>, AirPos), - __6: (AirPos, Token<'input>, AirPos), -) -> Box> -{ - let __start0 = __6.2; - let __end0 = __6.2; - let __temp0 = __action94( - input, - errors, - validator, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action111( - input, - errors, - validator, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action125< - 'err, - 'input, - 'v, ->( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __0: (AirPos, Token<'input>, AirPos), - __1: (AirPos, Token<'input>, AirPos), - __2: (AirPos, (&'input str, AirPos), AirPos), - __3: (AirPos, (&'input str, AirPos), AirPos), - __4: (AirPos, Box>, AirPos), - __5: (AirPos, core::option::Option>>, AirPos), - __6: (AirPos, Token<'input>, AirPos), -) -> Box> -{ - let __start0 = __6.2; - let __end0 = __6.2; - let __temp0 = __action94( - input, - errors, - validator, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action112( - input, - errors, - validator, - __0, - __1, - __2, - __3, - __4, - __5, - __6, - __temp0, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action126< - 'err, - 'input, - 'v, ->( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __0: (AirPos, Token<'input>, AirPos), - __1: (AirPos, Token<'input>, AirPos), - __2: (AirPos, (&'input str, AirPos), AirPos), - __3: (AirPos, (&'input str, AirPos), AirPos), - __4: (AirPos, Box>, AirPos), - __5: (AirPos, core::option::Option>>, AirPos), - __6: (AirPos, Token<'input>, AirPos), -) -> Box> -{ - let __start0 = __6.2; - let __end0 = __6.2; - let __temp0 = __action94( + let __temp0 = __action98( input, errors, validator, @@ -7709,6 +7740,7 @@ fn __action126< __4, __5, __6, + __7, __temp0, ) } @@ -7725,13 +7757,14 @@ fn __action127< validator: &'v mut VariableValidator<'input>, __0: (AirPos, Token<'input>, AirPos), __1: (AirPos, Token<'input>, AirPos), - __2: (AirPos, (&'input str, AirPos), AirPos), - __3: (AirPos, Token<'input>, AirPos), + __2: (AirPos, NewArgument<'input>, AirPos), + __3: (AirPos, Box>, AirPos), + __4: (AirPos, Token<'input>, AirPos), ) -> Box> { - let __start0 = __3.2; - let __end0 = __3.2; - let __temp0 = __action94( + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action98( input, errors, validator, @@ -7747,6 +7780,7 @@ fn __action127< __1, __2, __3, + __4, __temp0, ) } @@ -7763,15 +7797,16 @@ fn __action128< validator: &'v mut VariableValidator<'input>, __0: (AirPos, Token<'input>, AirPos), __1: (AirPos, Token<'input>, AirPos), - __2: (AirPos, ImmutableValue<'input>, AirPos), - __3: (AirPos, ImmutableValue<'input>, AirPos), + __2: (AirPos, FoldScalarIterable<'input>, AirPos), + __3: (AirPos, (&'input str, AirPos), AirPos), __4: (AirPos, Box>, AirPos), - __5: (AirPos, Token<'input>, AirPos), + __5: (AirPos, core::option::Option>>, AirPos), + __6: (AirPos, Token<'input>, AirPos), ) -> Box> { - let __start0 = __5.2; - let __end0 = __5.2; - let __temp0 = __action94( + let __start0 = __6.2; + let __end0 = __6.2; + let __temp0 = __action98( input, errors, validator, @@ -7789,6 +7824,7 @@ fn __action128< __3, __4, __5, + __6, __temp0, ) } @@ -7805,15 +7841,16 @@ fn __action129< validator: &'v mut VariableValidator<'input>, __0: (AirPos, Token<'input>, AirPos), __1: (AirPos, Token<'input>, AirPos), - __2: (AirPos, ImmutableValue<'input>, AirPos), - __3: (AirPos, ImmutableValue<'input>, AirPos), + __2: (AirPos, (&'input str, AirPos), AirPos), + __3: (AirPos, (&'input str, AirPos), AirPos), __4: (AirPos, Box>, AirPos), - __5: (AirPos, Token<'input>, AirPos), + __5: (AirPos, core::option::Option>>, AirPos), + __6: (AirPos, Token<'input>, AirPos), ) -> Box> { - let __start0 = __5.2; - let __end0 = __5.2; - let __temp0 = __action94( + let __start0 = __6.2; + let __end0 = __6.2; + let __temp0 = __action98( input, errors, validator, @@ -7831,6 +7868,7 @@ fn __action129< __3, __4, __5, + __6, __temp0, ) } @@ -7841,6 +7879,172 @@ fn __action130< 'err, 'input, 'v, +>( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __0: (AirPos, Token<'input>, AirPos), + __1: (AirPos, Token<'input>, AirPos), + __2: (AirPos, (&'input str, AirPos), AirPos), + __3: (AirPos, (&'input str, AirPos), AirPos), + __4: (AirPos, Box>, AirPos), + __5: (AirPos, core::option::Option>>, AirPos), + __6: (AirPos, Token<'input>, AirPos), +) -> Box> +{ + let __start0 = __6.2; + let __end0 = __6.2; + let __temp0 = __action98( + input, + errors, + validator, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action117( + input, + errors, + validator, + __0, + __1, + __2, + __3, + __4, + __5, + __6, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action131< + 'err, + 'input, + 'v, +>( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __0: (AirPos, Token<'input>, AirPos), + __1: (AirPos, Token<'input>, AirPos), + __2: (AirPos, (&'input str, AirPos), AirPos), + __3: (AirPos, Token<'input>, AirPos), +) -> Box> +{ + let __start0 = __3.2; + let __end0 = __3.2; + let __temp0 = __action98( + input, + errors, + validator, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action118( + input, + errors, + validator, + __0, + __1, + __2, + __3, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action132< + 'err, + 'input, + 'v, +>( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __0: (AirPos, Token<'input>, AirPos), + __1: (AirPos, Token<'input>, AirPos), + __2: (AirPos, ImmutableValue<'input>, AirPos), + __3: (AirPos, ImmutableValue<'input>, AirPos), + __4: (AirPos, Box>, AirPos), + __5: (AirPos, Token<'input>, AirPos), +) -> Box> +{ + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action98( + input, + errors, + validator, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action119( + input, + errors, + validator, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action133< + 'err, + 'input, + 'v, +>( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __0: (AirPos, Token<'input>, AirPos), + __1: (AirPos, Token<'input>, AirPos), + __2: (AirPos, ImmutableValue<'input>, AirPos), + __3: (AirPos, ImmutableValue<'input>, AirPos), + __4: (AirPos, Box>, AirPos), + __5: (AirPos, Token<'input>, AirPos), +) -> Box> +{ + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action98( + input, + errors, + validator, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action120( + input, + errors, + validator, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action134< + 'err, + 'input, + 'v, >( input: &'input str, errors: &'err mut Vec, ParserError>>, @@ -7855,14 +8059,14 @@ fn __action130< { let __start0 = __4.0; let __end0 = __4.2; - let __temp0 = __action95( + let __temp0 = __action99( input, errors, validator, __4, ); let __temp0 = (__start0, __temp0, __end0); - __action118( + __action122( input, errors, validator, @@ -7877,7 +8081,7 @@ fn __action130< #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] -fn __action131< +fn __action135< 'err, 'input, 'v, @@ -7894,7 +8098,7 @@ fn __action131< { let __start0 = __3.2; let __end0 = __4.0; - let __temp0 = __action96( + let __temp0 = __action100( input, errors, validator, @@ -7902,7 +8106,7 @@ fn __action131< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action118( + __action122( input, errors, validator, @@ -7915,174 +8119,6 @@ fn __action131< ) } -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action132< - 'err, - 'input, - 'v, ->( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __0: (AirPos, Token<'input>, AirPos), - __1: (AirPos, Token<'input>, AirPos), - __2: (AirPos, FoldScalarIterable<'input>, AirPos), - __3: (AirPos, (&'input str, AirPos), AirPos), - __4: (AirPos, Box>, AirPos), - __5: (AirPos, Box>, AirPos), - __6: (AirPos, Token<'input>, AirPos), -) -> Box> -{ - let __start0 = __5.0; - let __end0 = __5.2; - let __temp0 = __action92( - input, - errors, - validator, - __5, - ); - let __temp0 = (__start0, __temp0, __end0); - __action124( - input, - errors, - validator, - __0, - __1, - __2, - __3, - __4, - __temp0, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action133< - 'err, - 'input, - 'v, ->( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __0: (AirPos, Token<'input>, AirPos), - __1: (AirPos, Token<'input>, AirPos), - __2: (AirPos, FoldScalarIterable<'input>, AirPos), - __3: (AirPos, (&'input str, AirPos), AirPos), - __4: (AirPos, Box>, AirPos), - __5: (AirPos, Token<'input>, AirPos), -) -> Box> -{ - let __start0 = __4.2; - let __end0 = __5.0; - let __temp0 = __action93( - input, - errors, - validator, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action124( - input, - errors, - validator, - __0, - __1, - __2, - __3, - __4, - __temp0, - __5, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action134< - 'err, - 'input, - 'v, ->( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __0: (AirPos, Token<'input>, AirPos), - __1: (AirPos, Token<'input>, AirPos), - __2: (AirPos, (&'input str, AirPos), AirPos), - __3: (AirPos, (&'input str, AirPos), AirPos), - __4: (AirPos, Box>, AirPos), - __5: (AirPos, Box>, AirPos), - __6: (AirPos, Token<'input>, AirPos), -) -> Box> -{ - let __start0 = __5.0; - let __end0 = __5.2; - let __temp0 = __action92( - input, - errors, - validator, - __5, - ); - let __temp0 = (__start0, __temp0, __end0); - __action125( - input, - errors, - validator, - __0, - __1, - __2, - __3, - __4, - __temp0, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments)] -fn __action135< - 'err, - 'input, - 'v, ->( - input: &'input str, - errors: &'err mut Vec, ParserError>>, - validator: &'v mut VariableValidator<'input>, - __0: (AirPos, Token<'input>, AirPos), - __1: (AirPos, Token<'input>, AirPos), - __2: (AirPos, (&'input str, AirPos), AirPos), - __3: (AirPos, (&'input str, AirPos), AirPos), - __4: (AirPos, Box>, AirPos), - __5: (AirPos, Token<'input>, AirPos), -) -> Box> -{ - let __start0 = __4.2; - let __end0 = __5.0; - let __temp0 = __action93( - input, - errors, - validator, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action125( - input, - errors, - validator, - __0, - __1, - __2, - __3, - __4, - __temp0, - __5, - ) -} - #[allow(unused_variables)] #[allow(clippy::too_many_arguments)] fn __action136< @@ -8095,7 +8131,7 @@ fn __action136< validator: &'v mut VariableValidator<'input>, __0: (AirPos, Token<'input>, AirPos), __1: (AirPos, Token<'input>, AirPos), - __2: (AirPos, (&'input str, AirPos), AirPos), + __2: (AirPos, FoldScalarIterable<'input>, AirPos), __3: (AirPos, (&'input str, AirPos), AirPos), __4: (AirPos, Box>, AirPos), __5: (AirPos, Box>, AirPos), @@ -8104,14 +8140,14 @@ fn __action136< { let __start0 = __5.0; let __end0 = __5.2; - let __temp0 = __action92( + let __temp0 = __action96( input, errors, validator, __5, ); let __temp0 = (__start0, __temp0, __end0); - __action126( + __action128( input, errors, validator, @@ -8131,6 +8167,90 @@ fn __action137< 'err, 'input, 'v, +>( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __0: (AirPos, Token<'input>, AirPos), + __1: (AirPos, Token<'input>, AirPos), + __2: (AirPos, FoldScalarIterable<'input>, AirPos), + __3: (AirPos, (&'input str, AirPos), AirPos), + __4: (AirPos, Box>, AirPos), + __5: (AirPos, Token<'input>, AirPos), +) -> Box> +{ + let __start0 = __4.2; + let __end0 = __5.0; + let __temp0 = __action97( + input, + errors, + validator, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action128( + input, + errors, + validator, + __0, + __1, + __2, + __3, + __4, + __temp0, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action138< + 'err, + 'input, + 'v, +>( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __0: (AirPos, Token<'input>, AirPos), + __1: (AirPos, Token<'input>, AirPos), + __2: (AirPos, (&'input str, AirPos), AirPos), + __3: (AirPos, (&'input str, AirPos), AirPos), + __4: (AirPos, Box>, AirPos), + __5: (AirPos, Box>, AirPos), + __6: (AirPos, Token<'input>, AirPos), +) -> Box> +{ + let __start0 = __5.0; + let __end0 = __5.2; + let __temp0 = __action96( + input, + errors, + validator, + __5, + ); + let __temp0 = (__start0, __temp0, __end0); + __action129( + input, + errors, + validator, + __0, + __1, + __2, + __3, + __4, + __temp0, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action139< + 'err, + 'input, + 'v, >( input: &'input str, errors: &'err mut Vec, ParserError>>, @@ -8145,7 +8265,7 @@ fn __action137< { let __start0 = __4.2; let __end0 = __5.0; - let __temp0 = __action93( + let __temp0 = __action97( input, errors, validator, @@ -8153,7 +8273,91 @@ fn __action137< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action126( + __action129( + input, + errors, + validator, + __0, + __1, + __2, + __3, + __4, + __temp0, + __5, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action140< + 'err, + 'input, + 'v, +>( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __0: (AirPos, Token<'input>, AirPos), + __1: (AirPos, Token<'input>, AirPos), + __2: (AirPos, (&'input str, AirPos), AirPos), + __3: (AirPos, (&'input str, AirPos), AirPos), + __4: (AirPos, Box>, AirPos), + __5: (AirPos, Box>, AirPos), + __6: (AirPos, Token<'input>, AirPos), +) -> Box> +{ + let __start0 = __5.0; + let __end0 = __5.2; + let __temp0 = __action96( + input, + errors, + validator, + __5, + ); + let __temp0 = (__start0, __temp0, __end0); + __action130( + input, + errors, + validator, + __0, + __1, + __2, + __3, + __4, + __temp0, + __6, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments)] +fn __action141< + 'err, + 'input, + 'v, +>( + input: &'input str, + errors: &'err mut Vec, ParserError>>, + validator: &'v mut VariableValidator<'input>, + __0: (AirPos, Token<'input>, AirPos), + __1: (AirPos, Token<'input>, AirPos), + __2: (AirPos, (&'input str, AirPos), AirPos), + __3: (AirPos, (&'input str, AirPos), AirPos), + __4: (AirPos, Box>, AirPos), + __5: (AirPos, Token<'input>, AirPos), +) -> Box> +{ + let __start0 = __4.2; + let __end0 = __5.0; + let __temp0 = __action97( + input, + errors, + validator, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action130( input, errors, validator, diff --git a/crates/air-lib/air-parser/src/parser/lexer/air_lexer.rs b/crates/air-lib/air-parser/src/parser/lexer/air_lexer.rs index 0ea195a7..386484ee 100644 --- a/crates/air-lib/air-parser/src/parser/lexer/air_lexer.rs +++ b/crates/air-lib/air-parser/src/parser/lexer/air_lexer.rs @@ -195,7 +195,10 @@ fn string_to_token(input: &str, start_pos: AirPos) -> LexerResult { MISMATCH_INSTR => Ok(Token::MisMatch), INIT_PEER_ID => Ok(Token::InitPeerId), - _ if input.starts_with(LAST_ERROR) => parse_last_error(input, start_pos), + _ if input.starts_with(ERROR) => parse_error(input, start_pos, ERROR, Token::Error), + _ if input.starts_with(LAST_ERROR) => { + parse_error(input, start_pos, LAST_ERROR, Token::LastError) + } TIMESTAMP => Ok(Token::Timestamp), TTL => Ok(Token::TTL), @@ -206,28 +209,37 @@ fn string_to_token(input: &str, start_pos: AirPos) -> LexerResult { } } -fn parse_last_error(input: &str, start_pos: AirPos) -> LexerResult> { - let last_error_size = LAST_ERROR.len(); - if input.len() == last_error_size { - return Ok(Token::LastError); +fn parse_error<'input>( + input: &'input str, + start_pos: AirPos, + token_str: &str, + token_wo_lens: Token<'static>, +) -> LexerResult> { + let token_wo_lens_len = token_str.len(); + + if input.len() == token_wo_lens_len { + return Ok(token_wo_lens); } - if input.len() <= last_error_size { + if input.len() <= token_wo_lens_len { return Err(LexerError::lambda_parser_error( - start_pos + last_error_size..start_pos + input.len(), + start_pos + token_wo_lens_len..start_pos + input.len(), "lambda AST applied to last error has not enough size", )); } - let last_error_accessor = crate::parse_lambda(&input[last_error_size..]).map_err(|e| { + let last_error_accessor = crate::parse_lambda(&input[token_wo_lens_len..]).map_err(|e| { LexerError::lambda_parser_error( - start_pos + last_error_size..start_pos + input.len(), + start_pos + token_wo_lens_len..start_pos + input.len(), e.to_string(), ) })?; - let last_error_token = Token::LastErrorWithLambda(last_error_accessor); - Ok(last_error_token) + match token_wo_lens { + Token::Error => Ok(Token::ErrorWithLambda(last_error_accessor)), + Token::LastError => Ok(Token::LastErrorWithLambda(last_error_accessor)), + _ => unreachable!(), + } } const CALL_INSTR: &str = "call"; @@ -246,7 +258,8 @@ const MATCH_INSTR: &str = "match"; const MISMATCH_INSTR: &str = "mismatch"; const INIT_PEER_ID: &str = "%init_peer_id%"; -const LAST_ERROR: &str = "%last_error%"; +pub(crate) const LAST_ERROR: &str = "%last_error%"; +pub(crate) const ERROR: &str = ":error:"; const TIMESTAMP: &str = "%timestamp%"; const TTL: &str = "%ttl%"; diff --git a/crates/air-lib/air-parser/src/parser/lexer/mod.rs b/crates/air-lib/air-parser/src/parser/lexer/mod.rs index 53187786..6e303ef9 100644 --- a/crates/air-lib/air-parser/src/parser/lexer/mod.rs +++ b/crates/air-lib/air-parser/src/parser/lexer/mod.rs @@ -25,6 +25,8 @@ mod tests; pub mod text_pos; pub use air_lexer::AIRLexer; +pub(crate) use air_lexer::ERROR; +pub(crate) use air_lexer::LAST_ERROR; pub use errors::LexerError; pub use text_pos::AirPos; pub use token::Token; diff --git a/crates/air-lib/air-parser/src/parser/lexer/token.rs b/crates/air-lib/air-parser/src/parser/lexer/token.rs index fb1da72a..7de89be6 100644 --- a/crates/air-lib/air-parser/src/parser/lexer/token.rs +++ b/crates/air-lib/air-parser/src/parser/lexer/token.rs @@ -72,7 +72,9 @@ pub enum Token<'input> { InitPeerId, LastError, + Error, LastErrorWithLambda(LambdaAST<'input>), + ErrorWithLambda(LambdaAST<'input>), Timestamp, TTL, diff --git a/crates/air-lib/air-parser/src/parser/mod.rs b/crates/air-lib/air-parser/src/parser/mod.rs index 1453ed70..0d51b860 100644 --- a/crates/air-lib/air-parser/src/parser/mod.rs +++ b/crates/air-lib/air-parser/src/parser/mod.rs @@ -33,6 +33,8 @@ pub mod tests; pub use self::air_parser::parse; pub use air::AIRParser; pub use lexer::AIRLexer; +pub(crate) use lexer::ERROR; +pub(crate) use lexer::LAST_ERROR; pub use span::Span; pub use validator::VariableValidator; diff --git a/crates/air-lib/air-parser/src/parser/validator.rs b/crates/air-lib/air-parser/src/parser/validator.rs index d3eeda73..c4c836c8 100644 --- a/crates/air-lib/air-parser/src/parser/validator.rs +++ b/crates/air-lib/air-parser/src/parser/validator.rs @@ -155,6 +155,7 @@ impl<'i> VariableValidator<'i> { | ApArgument::Literal(_) | ApArgument::EmptyArray | ApArgument::LastError(_) => {} + ApArgument::Error(_) => {} ApArgument::Scalar(scalar) => self.met_scalar(scalar, span), ApArgument::ScalarWithLambda(scalar) => self.met_scalar_wl(scalar, span), ApArgument::CanonStream(canon_stream) => self.met_canon_stream(canon_stream, span), @@ -227,8 +228,8 @@ impl<'i> VariableValidator<'i> { use ImmutableValue::*; match instr_arg_value { - InitPeerId | LastError(_) | Timestamp | TTL | Literal(_) | Number(_) | Boolean(_) - | EmptyArray => {} + InitPeerId | Error(_) | LastError(_) | Timestamp | TTL | Literal(_) | Number(_) + | Boolean(_) | EmptyArray => {} Variable(variable) => self.met_variable(variable, span), VariableWithLambda(variable) => self.met_variable_wl(variable, span), } @@ -323,6 +324,7 @@ impl<'i> VariableValidator<'i> { | ImmutableValue::Number(_) | ImmutableValue::Boolean(_) | ImmutableValue::Literal(_) + | ImmutableValue::Error(_) | ImmutableValue::LastError(_) | ImmutableValue::EmptyArray => {} ImmutableValue::Variable(variable) => self.met_variable(variable, span), diff --git a/crates/testing-framework/src/transform/parser.rs b/crates/testing-framework/src/transform/parser.rs index 156d52de..208e78b0 100644 --- a/crates/testing-framework/src/transform/parser.rs +++ b/crates/testing-framework/src/transform/parser.rs @@ -135,7 +135,10 @@ fn parse_sexp_string(inp: Input<'_>) -> IResult, Sexp, ParseError<'_>> fn parse_sexp_symbol(inp: Input<'_>) -> IResult, Sexp, ParseError<'_>> { map( recognize(pair( - many1_count(alt((value((), alphanumeric1), value((), one_of("_-.$#%"))))), + many1_count(alt(( + value((), alphanumeric1), + value((), one_of("_-.:$#%")), + ))), opt(terminated( delimited(tag("["), parse_sexp_symbol, tag("]")), opt(tag("!")),