From eb8ecdcb768d5035083c0658ae50d1ed0baa41f5 Mon Sep 17 00:00:00 2001 From: jonathan Date: Sun, 29 Oct 2023 18:39:49 +0100 Subject: [PATCH 01/16] Fix bug + cleanup --- README.md | 22 +++++++++++++++++++ compiler/src/passes/atomize/atomize.rs | 4 ++-- .../src/passes/{ => conclude}/conclude.rs | 6 ----- compiler/src/passes/conclude/mod.rs | 1 + compiler/src/passes/emit/mod.rs | 3 --- .../passes/{ => interference}/assign_homes.rs | 0 .../coloring_interference.rs | 0 .../compute_interference.rs | 2 +- .../{ => interference}/liveness_analysis.rs | 20 +++++++++++++---- compiler/src/passes/interference/mod.rs | 4 ++++ compiler/src/passes/mod.rs | 5 +---- compiler/src/passes/patch_instructions/mod.rs | 1 + .../patch_instructions.rs | 0 programs/good/mutability/uncover_get.test | 7 ++++++ 14 files changed, 55 insertions(+), 20 deletions(-) rename compiler/src/passes/{ => conclude}/conclude.rs (86%) create mode 100644 compiler/src/passes/conclude/mod.rs rename compiler/src/passes/{ => interference}/assign_homes.rs (100%) rename compiler/src/passes/{ => interference}/coloring_interference.rs (100%) rename compiler/src/passes/{ => interference}/compute_interference.rs (96%) rename compiler/src/passes/{ => interference}/liveness_analysis.rs (90%) create mode 100644 compiler/src/passes/interference/mod.rs create mode 100644 compiler/src/passes/patch_instructions/mod.rs rename compiler/src/passes/{ => patch_instructions}/patch_instructions.rs (100%) create mode 100644 programs/good/mutability/uncover_get.test diff --git a/README.md b/README.md index eeec505..bcd1879 100644 --- a/README.md +++ b/README.md @@ -27,3 +27,25 @@ Run with specified input path and specified output path: ```sh cargo run -- input.jj -o output && ./output ; echo $? ``` + +# Fixes +* [ ] Updated README, with 3 new colors! +* [ ] Add documentation where necessary. +* [ ] Improve error handling for parsing pass. +* [ ] Improve error handling for type checking pass. +* [ ] Improve algorithm for colouring the interference graph. +* [ ] Add read and write functionality to the bencher to update locally. +* [ ] Lots, and lots, of refactoring! + +# Upcoming Language Features +* [ ] Implement comments in code. +* [ ] Algebraic Data Types (Enums and Structs). +* [ ] First-class functions. + +# Upcoming Optimizations +* [ ] Dead code. +* [ ] Constant folding. +* [ ] And probably more... + +# Lofty Goals +* [ ] Make the compiler suggest hints. diff --git a/compiler/src/passes/atomize/atomize.rs b/compiler/src/passes/atomize/atomize.rs index fc736a0..427784a 100644 --- a/compiler/src/passes/atomize/atomize.rs +++ b/compiler/src/passes/atomize/atomize.rs @@ -109,7 +109,6 @@ fn atomize_expr(expr: RExpr) -> AExpr { fn atomize_atom(expr: RExpr) -> (Atom, Option<(UniqueSym, AExpr)>) { match expr { RExpr::Lit { val } => (Atom::Val { val }, None), - RExpr::Var { sym } => (Atom::Var { sym }, None), RExpr::Prim { .. } | RExpr::Let { .. } | RExpr::If { .. } @@ -118,7 +117,8 @@ fn atomize_atom(expr: RExpr) -> (Atom, Option<(UniqueSym, AExpr)>) { | RExpr::Loop { .. } | RExpr::Break { .. } | RExpr::Seq { .. } - | RExpr::Assign { .. } => { + | RExpr::Assign { .. } + | RExpr::Var { .. } => { let tmp = gen_sym("tmp"); (Atom::Var { sym: tmp }, Some((tmp, atomize_expr(expr)))) } diff --git a/compiler/src/passes/conclude.rs b/compiler/src/passes/conclude/conclude.rs similarity index 86% rename from compiler/src/passes/conclude.rs rename to compiler/src/passes/conclude/conclude.rs index 4d804a3..6224b55 100644 --- a/compiler/src/passes/conclude.rs +++ b/compiler/src/passes/conclude/conclude.rs @@ -1,14 +1,8 @@ -//! This pass compiles `PX86Program`s into `X86Program`. -//! -//! This pass generates the entry and exit point for the program wrapped around the body of the `PX86Program` program. -//! Note that we will refer to the body of the `PX86Program` program as the 'core' block. - use crate::language::x86var::{X86Concluded, X86Patched}; use crate::utils::gen_sym::gen_sym; use crate::{addq, block, callq_direct, imm, movq, popq, pushq, reg, subq}; impl<'p> X86Patched<'p> { - /// See module-level documentation. pub fn conclude(mut self) -> X86Concluded<'p> { let entry = gen_sym("main"); self.blocks.insert( diff --git a/compiler/src/passes/conclude/mod.rs b/compiler/src/passes/conclude/mod.rs new file mode 100644 index 0000000..c44cf08 --- /dev/null +++ b/compiler/src/passes/conclude/mod.rs @@ -0,0 +1 @@ +pub mod conclude; \ No newline at end of file diff --git a/compiler/src/passes/emit/mod.rs b/compiler/src/passes/emit/mod.rs index 3583fe9..18587ea 100644 --- a/compiler/src/passes/emit/mod.rs +++ b/compiler/src/passes/emit/mod.rs @@ -1,5 +1,3 @@ -//! This code will assemble the instructions into a sequence of bytes (machine code). - mod binary; mod mul_div; mod push_pop; @@ -20,7 +18,6 @@ use crate::utils::gen_sym::UniqueSym; use std::collections::HashMap; impl<'p> X86Concluded<'p> { - //! See module-level documentation. pub fn emit(self) -> (usize, Vec) { let mut machine_code = Vec::new(); diff --git a/compiler/src/passes/assign_homes.rs b/compiler/src/passes/interference/assign_homes.rs similarity index 100% rename from compiler/src/passes/assign_homes.rs rename to compiler/src/passes/interference/assign_homes.rs diff --git a/compiler/src/passes/coloring_interference.rs b/compiler/src/passes/interference/coloring_interference.rs similarity index 100% rename from compiler/src/passes/coloring_interference.rs rename to compiler/src/passes/interference/coloring_interference.rs diff --git a/compiler/src/passes/compute_interference.rs b/compiler/src/passes/interference/compute_interference.rs similarity index 96% rename from compiler/src/passes/compute_interference.rs rename to compiler/src/passes/interference/compute_interference.rs index 1590daa..0e069a3 100644 --- a/compiler/src/passes/compute_interference.rs +++ b/compiler/src/passes/interference/compute_interference.rs @@ -1,7 +1,7 @@ use crate::language::x86var::{ InterferenceGraph, LArg, LX86VarProgram, VarArg, X86WithInterference, }; -use crate::passes::liveness_analysis::{handle_instr, ReadWriteOp}; +use crate::passes::interference::liveness_analysis::{handle_instr, ReadWriteOp}; use std::collections::HashMap; impl<'p> LX86VarProgram<'p> { diff --git a/compiler/src/passes/liveness_analysis.rs b/compiler/src/passes/interference/liveness_analysis.rs similarity index 90% rename from compiler/src/passes/liveness_analysis.rs rename to compiler/src/passes/interference/liveness_analysis.rs index 1e63db1..a47b2f4 100644 --- a/compiler/src/passes/liveness_analysis.rs +++ b/compiler/src/passes/interference/liveness_analysis.rs @@ -5,6 +5,7 @@ use crate::language::x86var::{ use crate::utils::gen_sym::UniqueSym; use std::collections::{HashMap, HashSet}; +use std::collections::hash_map::Entry; impl<'p> X86Selected<'p> { pub fn add_liveness(self) -> LX86VarProgram<'p> { @@ -22,7 +23,19 @@ impl<'p> X86Selected<'p> { for (sym, block) in &self.blocks { let (new_liveness, before) = block_liveness(block, &before_map); - before_map.insert(*sym, before); + + match before_map.entry(*sym) { + Entry::Occupied(mut e) => { + if e.get() != &before { + changed = true; + e.insert(before); + } + } + Entry::Vacant(e) => { + changed = true; + e.insert(before); + } + } match liveness.get(sym) { None => { @@ -78,14 +91,13 @@ fn block_liveness<'p>( handle_instr(instr, before_map, |arg, op| match (arg, op) { (VarArg::Imm { .. }, _) => {} - (VarArg::Reg { reg }, ReadWriteOp::Read) => { + (VarArg::Reg { reg }, ReadWriteOp::Read | ReadWriteOp::ReadWrite) => { live.insert(LArg::Reg { reg: *reg }); } - (VarArg::Reg { .. } | VarArg::XVar { .. }, ReadWriteOp::ReadWrite) => {} (VarArg::Reg { reg }, ReadWriteOp::Write) => { live.remove(&LArg::Reg { reg: *reg }); } - (VarArg::XVar { sym }, ReadWriteOp::Read) => { + (VarArg::XVar { sym }, ReadWriteOp::Read | ReadWriteOp::ReadWrite) => { live.insert(LArg::Var { sym: *sym }); } (VarArg::XVar { sym }, ReadWriteOp::Write) => { diff --git a/compiler/src/passes/interference/mod.rs b/compiler/src/passes/interference/mod.rs new file mode 100644 index 0000000..5557024 --- /dev/null +++ b/compiler/src/passes/interference/mod.rs @@ -0,0 +1,4 @@ +pub mod assign_homes; +pub mod coloring_interference; +pub mod compute_interference; +pub mod liveness_analysis; \ No newline at end of file diff --git a/compiler/src/passes/mod.rs b/compiler/src/passes/mod.rs index 89af6c4..3a42816 100644 --- a/compiler/src/passes/mod.rs +++ b/compiler/src/passes/mod.rs @@ -1,14 +1,11 @@ -pub mod assign_homes; pub mod atomize; -pub mod coloring_interference; -pub mod compute_interference; pub mod conclude; pub mod emit; pub mod explicate; -pub mod liveness_analysis; pub mod parse; pub mod patch_instructions; pub mod reveal_functions; pub mod select; pub mod type_check; pub mod uniquify; +pub mod interference; diff --git a/compiler/src/passes/patch_instructions/mod.rs b/compiler/src/passes/patch_instructions/mod.rs new file mode 100644 index 0000000..782bbde --- /dev/null +++ b/compiler/src/passes/patch_instructions/mod.rs @@ -0,0 +1 @@ +pub mod patch_instructions; \ No newline at end of file diff --git a/compiler/src/passes/patch_instructions.rs b/compiler/src/passes/patch_instructions/patch_instructions.rs similarity index 100% rename from compiler/src/passes/patch_instructions.rs rename to compiler/src/passes/patch_instructions/patch_instructions.rs diff --git a/programs/good/mutability/uncover_get.test b/programs/good/mutability/uncover_get.test new file mode 100644 index 0000000..7649a70 --- /dev/null +++ b/programs/good/mutability/uncover_get.test @@ -0,0 +1,7 @@ +## +42 +# +fn main() -> Int { + let mut x = 2; + x + (x = 40; x) +} From 14e0dff37aa1ad287b1b86b7da5441b2e3acbe3b Mon Sep 17 00:00:00 2001 From: Vlamonster Date: Sun, 29 Oct 2023 23:09:42 +0100 Subject: [PATCH 02/16] Implement while-loops. --- compiler/src/passes/parse/grammar.lalrpop | 128 +- compiler/src/passes/parse/grammar.rs | 1464 +++++++++++--------- programs/good/loops/while__count_down.test | 10 + programs/good/loops/while_sum.test | 13 + 4 files changed, 935 insertions(+), 680 deletions(-) create mode 100644 programs/good/loops/while__count_down.test create mode 100644 programs/good/loops/while_sum.test diff --git a/compiler/src/passes/parse/grammar.lalrpop b/compiler/src/passes/parse/grammar.lalrpop index 2c4f9c8..e4125ad 100644 --- a/compiler/src/passes/parse/grammar.lalrpop +++ b/compiler/src/passes/parse/grammar.lalrpop @@ -12,6 +12,7 @@ match { "if", "else", "loop", + "while", "break", "mut", @@ -71,16 +72,32 @@ match { } pub Program: PrgParsed<'input> = { - => PrgParsed{ defs, entry: "main" } + => PrgParsed { + defs, + entry: "main" + } } -Def: Def<&'input str, Expr<&'input str>> = Fn; +Def: Def<&'input str, Expr<&'input str>> = { + Fn, +} Fn: Def<&'input str, Expr<&'input str>> = { - "fn" "(" > ")" " )?> "{" "}" => Def::Fn { sym, params, typ: typ.unwrap_or(Type::Unit), bdy } + "fn" "(" > ")" " )?> "{" "}" => Def::Fn { + sym, + params, + typ: typ.unwrap_or(Type::Unit), + bdy + } } -Param: Param<&'input str> = ":" => Param { mutable: mutable.is_some(), sym, typ }; +Param: Param<&'input str> = { + ":" => Param { + mutable: mutable.is_some(), + sym, + typ, + } +} Type: Type = { "Int" => Type::Int, @@ -89,30 +106,83 @@ Type: Type = { "Never" => Type::Never, } -BinaryOps: Expr<&'input str> = { - > => Expr::Prim{op, args: vec![e1, e2] }, - Next, -} - +// We have the following precedence: +// ExprStmt +// ExprInStmt +// ExprLogicalOr +// ExprLogicalAnd +// ExprComparative +// ExprXor +// ExprAdditive +// ExprMultiplicative +// ExprUnary +// ExprCall +// ExprAtom +// Num/Bool/Ident Expr = ExprStmt; ExprStmt: Expr<&'input str> = { - //TODO yeet this? - "let" "=" ";" => Expr::Let { sym, mutable: mutable.is_some(), bnd: Box::new(bnd), bdy: Box::new(Expr::Lit { val: Lit::Unit }) }, - "let" "=" ";" => Expr::Let { sym, mutable: mutable.is_some(), bnd: Box::new(bnd), bdy: Box::new(bdy) }, - ";" => Expr::Seq { stmt: Box::new(stmt), cnt: Box::new(Expr::Lit { val: Lit::Unit }) }, - ";" => Expr::Seq { stmt: Box::new(stmt), cnt: Box::new(cnt) }, + // TODO yeet this? + "let" "=" ";" => Expr::Let { + sym, + mutable: mutable.is_some(), + bnd: Box::new(bnd), + bdy: Box::new(Expr::Lit { val: Lit::Unit }), + }, + "let" "=" ";" => Expr::Let { + sym, + mutable: mutable.is_some(), + bnd: Box::new(bnd), + bdy: Box::new(bdy), + }, + ";" => Expr::Seq { + stmt: Box::new(stmt), + cnt: Box::new(Expr::Lit { val: Lit::Unit }), + }, + ";" => Expr::Seq { + stmt: Box::new(stmt), + cnt: Box::new(cnt), + }, ExprInStmt, } ExprInStmt: Expr<&'input str> = { - "=" => Expr::Assign { sym, bnd: Box::new(bnd) }, - "if" "{" "}" "else" "{" "}" => Expr::If { cnd: Box::new(cnd), thn: Box::new(thn), els: Box::new(els) }, - "loop" "{" "}" => Expr::Loop { bdy: Box::new(bdy) }, - "break" => Expr::Break { bdy: bdy.map(Box::new) }, + "=" => Expr::Assign { + sym, + bnd: Box::new(bnd), + }, + "if" "{" "}" "else" "{" "}" => Expr::If { + cnd: Box::new(cnd), + thn: Box::new(thn), + els: Box::new(els), + }, + "loop" "{" "}" => Expr::Loop { + bdy: Box::new(bdy), + }, + "while" "{" "}" => Expr::Loop { + bdy: Box::new(Expr::If { + cnd: Box::new(cnd), + thn: Box::new(bdy), + els: Box::new(Expr::Seq { + stmt: Box::new(Expr::Break { bdy: None }), + cnt: Box::new(Expr::Lit { val: Lit::Unit }), + }), + }), + }, + "break" => Expr::Break { + bdy: bdy.map(Box::new), + }, ExprLogicalOr, } +BinaryOps: Expr<&'input str> = { + > => Expr::Prim { + op, + args: vec![e1, e2], + }, + Next, +} + ExprLogicalOr = BinaryOps; ExprLogicalAnd = BinaryOps; ExprComparative = BinaryOps; @@ -146,14 +216,26 @@ UnaryOp: Op = { } ExprUnary: Expr<&'input str> = { - => Expr::Prim{op, args: vec![e]}, + => Expr::Prim { + op, + args: vec![e], + }, ExprCall, } ExprCall: Expr<&'input str> = { - "read" "(" ")" => Expr::Prim{ op: Op::Read, args: vec![] }, - "print" "(" ")" => Expr::Prim{ op: Op::Print, args: vec![e] }, - "(" > ")" => Expr::Apply{ fun: Box::new(fun), args }, + "read" "(" ")" => Expr::Prim { + op: Op::Read, + args: vec![], + }, + "print" "(" ")" => Expr::Prim { + op: Op::Print, + args: vec![e], + }, + "(" > ")" => Expr::Apply { + fun: Box::new(fun), + args, + }, ExprAtom, } @@ -183,4 +265,4 @@ Comma: Vec = { v } } -}; +} diff --git a/compiler/src/passes/parse/grammar.rs b/compiler/src/passes/parse/grammar.rs index bb747d9..2b3784f 100644 --- a/compiler/src/passes/parse/grammar.rs +++ b/compiler/src/passes/parse/grammar.rs @@ -1,5 +1,5 @@ // auto-generated: "lalrpop 0.20.1" -// sha3: 3c4c7923c83c86d09168a0850717bb0210feb6858f8417dbaea3c25718b22de5 +// sha3: 67623d1c97db57f74a5b5074032bfe43393e157419345957fc221a46cca5704e use std::str::FromStr; use crate::passes::parse::*; use crate::passes::parse::PrgParsed; @@ -50,294 +50,304 @@ mod __parse__Program { } const __ACTION: &[i16] = &[ // State 0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 2 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, // State 3 - 0, 0, 0, 0, 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 47, + 0, 0, 0, 0, 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, // State 4 - 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 47, + 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, // State 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, // State 6 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 7 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 8 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 79, 0, 20, 21, 80, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, // State 9 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 10 - 0, -54, 0, -54, 0, -54, 0, 87, -54, 88, 0, 0, 0, -54, -54, -54, 0, -54, -54, -54, 0, 0, 0, 0, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -54, -54, -54, 0, 0, + 0, -54, 0, -54, 0, -54, 0, 89, -54, 90, 0, 0, 0, -54, -54, -54, 0, -54, -54, -54, 0, 0, 0, 0, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -54, -54, -54, 0, 0, // State 11 - 0, 89, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, -64, 90, 91, 0, 92, 93, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, -64, -64, 0, 0, + 0, 91, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, -64, 92, 93, 0, 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, -64, -64, 0, 0, // State 12 - 0, 0, 0, 95, 0, -71, 0, 0, -71, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -71, -71, -71, 0, 0, + 0, 0, 0, 97, 0, -72, 0, 0, -72, 0, 0, 0, 0, -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, -72, -72, -72, 0, 0, // State 13 - 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -72, 96, -72, 0, 0, + 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, -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, -73, 98, -73, 0, 0, // State 14 - 0, -75, 97, -75, 0, -75, 98, -75, -75, -75, 0, 99, 0, -75, -75, -75, 0, -75, -75, -75, 0, 0, 0, 0, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -75, -75, -75, 0, 0, + 0, -76, 99, -76, 0, -76, 100, -76, -76, -76, 0, 101, 0, -76, -76, -76, 0, -76, -76, -76, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, -76, -76, 0, 0, // State 15 - 0, -85, 0, -85, 0, -85, 0, 0, -85, 0, 0, 0, 0, -85, -85, -85, 0, -85, -85, -85, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -85, -85, -85, 0, 0, + 0, -86, 0, -86, 0, -86, 0, 0, -86, 0, 0, 0, 0, -86, -86, -86, 0, -86, -86, -86, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, -86, -86, 0, 0, // State 16 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, // State 17 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 79, 0, 20, 21, 80, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, // State 18 - 77, 0, 0, 0, 18, -69, 0, 0, -69, 78, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 81, 82, 83, 84, 0, 0, -69, 85, 47, + 79, 0, 0, 0, 18, -70, 0, 0, -70, 80, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, -70, 87, 49, // State 19 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, // State 20 - 0, 0, 0, 0, 0, 0, 0, 0, 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, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, // State 21 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 79, 0, 20, 21, 80, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, // State 22 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, // State 23 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, // State 24 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, // State 25 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, // State 26 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, // State 27 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, // State 28 - 77, 0, 0, 0, 18, -33, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 79, 0, 20, 21, 80, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, // State 29 - 77, 0, 0, 0, 18, -80, 0, 0, -80, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 79, 0, 20, 21, 80, 0, 81, 82, 83, 84, 0, 0, -80, 85, 47, + 79, 0, 0, 0, 18, -33, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, // State 30 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, -81, 0, 0, -81, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, -81, 87, 49, // State 31 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, // State 32 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 79, 0, 20, 21, 80, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, // State 33 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 79, 0, 20, 21, 80, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, // State 34 - 77, 0, 0, 0, 18, -35, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 79, 0, 20, 21, 80, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, // State 35 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 79, 0, 20, 21, 80, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, -35, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, // State 36 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, // State 37 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, // State 38 - 77, 0, 0, 0, 18, -77, 0, 0, -77, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 79, 0, 20, 21, 80, 0, 81, 82, 83, 84, 0, 0, -77, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, // State 39 - 77, 0, 0, 0, 18, -76, 0, 0, -76, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 79, 0, 20, 21, 80, 0, 81, 82, 83, 84, 0, 0, -76, 85, 47, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, // State 40 - 77, 0, 0, 0, 18, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 79, 0, 20, 21, 80, 0, 81, 82, 83, 84, 0, 0, 0, 85, 47, + 79, 0, 0, 0, 18, -78, 0, 0, -78, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, -78, 87, 49, // State 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, -49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 79, 0, 0, 0, 18, -77, 0, 0, -77, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, -77, 87, 49, // State 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, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, // State 43 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 44 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, // State 45 - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -88, -88, -88, -88, -88, -88, -88, -88, -88, 0, -88, -88, -88, -88, -88, -88, -88, -88, -88, 0, 0, 0, 0, -88, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 47 - 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 48 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 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, -89, -89, -89, -89, -89, -89, -89, -89, 0, -89, -89, -89, -89, -89, -89, -89, -89, -89, 0, 0, 0, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, -89, -89, 0, 0, // State 49 - 0, 0, 0, 0, 0, -36, 0, 0, 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, + 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, // State 50 - 0, 0, 0, 0, 0, -38, 0, 0, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 51 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 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, -36, 0, 0, 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, 0, // State 52 - 0, 0, 0, 0, 0, -14, 0, 0, 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, -14, + 0, 0, 0, 0, 0, -38, 0, 0, 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, 0, // State 53 - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, // State 54 - 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, -15, + 0, 0, 0, 0, 0, -14, 0, 0, 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, -14, // State 55 - 0, 0, 0, 0, 0, -96, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 56 - 0, 0, 0, 0, 0, -102, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, // State 57 - 0, 0, 0, 0, 0, -101, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -97, 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 58 - 0, 0, 0, 0, 0, -104, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -103, 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, -103, 0, 0, 0, 0, // State 59 - 0, 0, 0, 0, 0, -103, 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, -103, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -102, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, // State 60 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -105, 0, 0, -105, 0, 0, 0, 0, 0, 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, 0, 0, 0, // State 61 - 0, -56, -56, -56, -56, -56, -56, -56, -56, -56, 0, -56, 0, -56, -56, -56, 0, -56, -56, -56, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, -56, -56, 0, 0, + 0, 0, 0, 0, 0, -104, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, // State 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, 0, 0, 0, 0, 0, 0, 101, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, // State 63 - 0, -29, 0, -29, 0, -29, 0, 0, -29, 0, 0, 0, 0, -29, -29, -29, 0, -29, -29, -29, 0, 0, 0, 0, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -29, -29, -29, 0, 0, + 0, -56, -56, -56, -56, -56, -56, -56, -56, -56, 0, -56, 0, -56, -56, -56, 0, -56, -56, -56, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, -56, -56, 0, 0, // State 64 - 0, -63, -63, -63, 29, -63, -63, -63, -63, -63, 0, -63, 0, -63, -63, -63, 0, -63, -63, -63, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, // State 65 - 0, -84, -84, -84, 0, -84, -84, -84, -84, -84, 0, -84, 0, -84, -84, -84, 0, -84, -84, -84, 0, 0, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, -84, -84, 0, 0, + 0, -29, 0, -29, 0, -29, 0, 0, -29, 0, 0, 0, 0, -29, -29, -29, 0, -29, -29, -29, 0, 0, 0, 0, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -29, -29, -29, 0, 0, // State 66 - 0, 0, 0, -23, 0, -23, 0, 0, -23, 0, 0, 0, 0, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, -23, -23, 0, 0, + 0, -63, -63, -63, 30, -63, -63, -63, -63, -63, 0, -63, 0, -63, -63, -63, 0, -63, -63, -63, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, -63, -63, 0, 0, // State 67 - 0, 0, 0, 0, 0, -82, 0, 0, -82, 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, -82, 0, 0, + 0, -85, -85, -85, 0, -85, -85, -85, -85, -85, 0, -85, 0, -85, -85, -85, 0, -85, -85, -85, 0, 0, 0, 0, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -85, -85, -85, 0, 0, // State 68 - 0, 0, 0, 0, 0, -25, 0, 0, -25, 0, 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -25, -25, -25, 0, 0, + 0, 0, 0, -23, 0, -23, 0, 0, -23, 0, 0, 0, 0, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, -23, -23, 0, 0, // State 69 - 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, -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, -70, 0, 0, + 0, 0, 0, 0, 0, -83, 0, 0, -83, 0, 0, 0, 0, 31, 0, 0, 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, // State 70 - 0, -19, 0, -19, 0, -19, 0, -19, -19, -19, 0, 0, 0, -19, -19, -19, 0, -19, -19, -19, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19, -19, -19, 0, 0, + 0, 0, 0, 0, 0, -25, 0, 0, -25, 0, 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -25, -25, -25, 0, 0, // State 71 - 0, 0, 0, 0, 0, -51, 0, 0, -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, -51, 0, 0, + 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, -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, -71, 0, 0, // State 72 - 0, -27, -27, -27, 0, -27, -27, -27, -27, -27, 0, -27, 0, -27, -27, -27, 0, -27, -27, -27, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, -27, -27, 0, 0, + 0, -19, 0, -19, 0, -19, 0, -19, -19, -19, 0, 0, 0, -19, -19, -19, 0, -19, -19, -19, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19, -19, -19, 0, 0, // State 73 - 0, -21, 0, -21, 0, -21, 0, 0, -21, 0, 0, 0, 0, -21, -21, -21, 0, -21, -21, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, -21, -21, 0, 0, + 0, 0, 0, 0, 0, -51, 0, 0, -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, 0, 0, // State 74 - 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, 0, -58, -58, -58, 31, -58, -58, -58, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -58, 0, 0, + 0, -27, -27, -27, 0, -27, -27, -27, -27, -27, 0, -27, 0, -27, -27, -27, 0, -27, -27, -27, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, -27, -27, 0, 0, // State 75 - 0, -55, -55, -55, -55, -55, -55, -55, -55, -55, 0, -55, 0, -55, -55, -55, 0, -55, -55, -55, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55, -55, -55, 0, 0, + 0, -21, 0, -21, 0, -21, 0, 0, -21, 0, 0, 0, 0, -21, -21, -21, 0, -21, -21, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, -21, -21, 0, 0, // State 76 - -106, 0, 0, 0, -106, 0, 0, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, 0, 0, 0, 0, 0, -106, -106, -106, -106, 0, 0, 0, -106, -106, + 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, 0, -58, -58, -58, 32, -58, -58, -58, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -58, 0, 0, // State 77 - -105, 0, 0, 0, -105, 0, 0, 0, 0, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -105, 0, 0, 0, 0, 0, -105, -105, -105, -105, 0, 0, 0, -105, -105, + 0, -55, -55, -55, -55, -55, -55, -55, -55, -55, 0, -55, 0, -55, -55, -55, 0, -55, -55, -55, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55, -55, -55, 0, 0, // State 78 - 0, -31, -31, -31, -31, -31, -31, -31, -31, -31, 0, -31, 0, -31, -31, -31, 0, -31, -31, -31, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, -31, -31, 0, 0, + -107, 0, 0, 0, -107, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, -107, -107, -107, -107, 0, 0, 0, 0, -107, -107, // State 79 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, + -106, 0, 0, 0, -106, 0, 0, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, 0, 0, 0, 0, 0, -106, -106, -106, -106, 0, 0, 0, 0, -106, -106, // State 80 - 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, 0, 0, 0, + 0, -31, -31, -31, -31, -31, -31, -31, -31, -31, 0, -31, 0, -31, -31, -31, 0, -31, -31, -31, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, -31, -31, 0, 0, // State 81 - 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, // State 82 - 0, -30, -30, -30, -30, -30, -30, -30, -30, -30, 0, -30, 0, -30, -30, -30, 0, -30, -30, -30, 0, 0, 0, 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -30, -30, -30, 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, 0, 0, 0, 0, // State 83 - 0, -57, -57, -57, -57, -57, -57, -57, -57, -57, 0, -57, 0, -57, -57, -57, 0, -57, -57, -57, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, -57, -57, 0, 0, + 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 84 - 0, -94, -94, -94, -94, -94, -94, -94, -94, -94, 0, -94, 0, -94, -94, -94, 0, -94, -94, -94, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, -94, -94, 0, 0, + 0, -30, -30, -30, -30, -30, -30, -30, -30, -30, 0, -30, 0, -30, -30, -30, 0, -30, -30, -30, 0, 0, 0, 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -30, -30, -30, 0, 0, // State 85 - 0, 0, 0, 0, 0, -95, 0, 0, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -57, -57, -57, -57, -57, -57, -57, -57, -57, 0, -57, 0, -57, -57, -57, 0, -57, -57, -57, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, -57, -57, 0, 0, // State 86 - -16, 0, 0, 0, -16, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, -16, -16, -16, -16, 0, 0, 0, -16, -16, + 0, -95, -95, -95, -95, -95, -95, -95, -95, -95, 0, -95, 0, -95, -95, -95, 0, -95, -95, -95, 0, 0, 0, 0, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, -95, -95, 0, 0, // State 87 - -17, 0, 0, 0, -17, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, -17, -17, -17, -17, 0, 0, 0, -17, -17, + 0, 0, 0, 0, 0, -96, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 88 - -41, 0, 0, 0, -41, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, -41, -41, -41, -41, 0, 0, 0, -41, -41, + -16, 0, 0, 0, -16, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, -16, -16, -16, -16, 0, 0, 0, 0, -16, -16, // State 89 - -44, 0, 0, 0, -44, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, -44, -44, -44, -44, 0, 0, 0, -44, -44, + -17, 0, 0, 0, -17, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, -17, -17, -17, -17, 0, 0, 0, 0, -17, -17, // State 90 - -45, 0, 0, 0, -45, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, -45, -45, -45, -45, 0, 0, 0, -45, -45, + -41, 0, 0, 0, -41, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, -41, -41, -41, -41, 0, 0, 0, 0, -41, -41, // State 91 - -40, 0, 0, 0, -40, 0, 0, 0, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -40, 0, 0, 0, 0, 0, -40, -40, -40, -40, 0, 0, 0, -40, -40, + -44, 0, 0, 0, -44, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, -44, -44, -44, -44, 0, 0, 0, 0, -44, -44, // State 92 - -42, 0, 0, 0, -42, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, -42, -42, -42, -42, 0, 0, 0, -42, -42, + -45, 0, 0, 0, -45, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, -45, -45, -45, -45, 0, 0, 0, 0, -45, -45, // State 93 - -43, 0, 0, 0, -43, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, -43, -43, -43, -43, 0, 0, 0, -43, -43, + -40, 0, 0, 0, -40, 0, 0, 0, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -40, 0, 0, 0, 0, 0, -40, -40, -40, -40, 0, 0, 0, 0, -40, -40, // State 94 - -89, 0, 0, 0, -89, 0, 0, 0, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, 0, 0, 0, 0, 0, -89, -89, -89, -89, 0, 0, 0, -89, -89, + -42, 0, 0, 0, -42, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, -42, -42, -42, -42, 0, 0, 0, 0, -42, -42, // State 95 - -90, 0, 0, 0, -90, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, -90, -90, -90, -90, 0, 0, 0, -90, -90, + -43, 0, 0, 0, -43, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, -43, -43, -43, -43, 0, 0, 0, 0, -43, -43, // State 96 - -93, 0, 0, 0, -93, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, -93, -93, -93, -93, 0, 0, 0, -93, -93, + -90, 0, 0, 0, -90, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, -90, -90, -90, -90, 0, 0, 0, 0, -90, -90, // State 97 - -91, 0, 0, 0, -91, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, -91, -91, -91, -91, 0, 0, 0, -91, -91, + -91, 0, 0, 0, -91, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, -91, -91, -91, -91, 0, 0, 0, 0, -91, -91, // State 98 - -92, 0, 0, 0, -92, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, -92, -92, -92, -92, 0, 0, 0, -92, -92, + -94, 0, 0, 0, -94, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, -94, -94, -94, -94, 0, 0, 0, 0, -94, -94, // State 99 - -107, 0, 0, 0, -107, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, -107, -107, -107, -107, 0, 0, 0, -107, -107, + -92, 0, 0, 0, -92, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, -92, -92, -92, -92, 0, 0, 0, 0, -92, -92, // State 100 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -93, 0, 0, 0, -93, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, -93, -93, -93, -93, 0, 0, 0, 0, -93, -93, // State 101 - 0, -83, -83, -83, 0, -83, -83, -83, -83, -83, 0, -83, 0, -83, -83, -83, 0, -83, -83, -83, 0, 0, 0, 0, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -83, -83, -83, 0, 0, + -108, 0, 0, 0, -108, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, -108, -108, -108, -108, 0, 0, 0, 0, -108, -108, // State 102 - 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, 0, -58, -58, -58, 0, -58, -58, -58, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -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, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 103 - 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -84, -84, -84, 0, -84, -84, -84, -84, -84, 0, -84, 0, -84, -84, -84, 0, -84, -84, -84, 0, 0, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, -84, -84, 0, 0, // State 104 - 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, + 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, 0, -58, -58, -58, 0, -58, -58, -58, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -58, -58, 0, 0, // State 105 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 106 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -69, 0, 0, -69, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, // State 107 - 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, // State 108 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 109 - 0, -18, 0, -18, 0, -18, 0, -18, -18, -18, 0, 0, 0, -18, -18, -18, 0, -18, -18, -18, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, -18, -18, 0, 0, + 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 110 - 0, -20, 0, -20, 0, -20, 0, 0, -20, 0, 0, 0, 0, -20, -20, -20, 0, -20, -20, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, -20, -20, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 111 - 0, 0, 0, -22, 0, -22, 0, 0, -22, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, -22, -22, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, // State 112 - 0, 0, 0, 0, 0, -24, 0, 0, -24, 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, -24, -24, -24, 0, 0, + 0, -18, 0, -18, 0, -18, 0, -18, -18, -18, 0, 0, 0, -18, -18, -18, 0, -18, -18, -18, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, -18, -18, 0, 0, // State 113 - 0, -26, -26, -26, 0, -26, -26, -26, -26, -26, 0, -26, 0, -26, -26, -26, 0, -26, -26, -26, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, -26, -26, 0, 0, + 0, -20, 0, -20, 0, -20, 0, 0, -20, 0, 0, 0, 0, -20, -20, -20, 0, -20, -20, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, -20, -20, 0, 0, // State 114 - 0, -28, 0, -28, 0, -28, 0, 0, -28, 0, 0, 0, 0, -28, -28, -28, 0, -28, -28, -28, 0, 0, 0, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -28, -28, -28, 0, 0, + 0, 0, 0, -22, 0, -22, 0, 0, -22, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, -22, -22, 0, 0, // State 115 - 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -24, 0, 0, -24, 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, -24, -24, -24, 0, 0, // State 116 - 0, 0, 0, 0, 0, -32, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -26, -26, -26, 0, -26, -26, -26, -26, -26, 0, -26, 0, -26, -26, -26, 0, -26, -26, -26, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, -26, -26, 0, 0, // State 117 - 0, 0, 0, 0, 0, -81, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -81, 0, 0, + 0, -28, 0, -28, 0, -28, 0, 0, -28, 0, 0, 0, 0, -28, -28, -28, 0, -28, -28, -28, 0, 0, 0, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -28, -28, -28, 0, 0, // State 118 - 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, -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, -65, 0, 0, + 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 119 - 0, -59, -59, -59, -59, -59, -59, -59, -59, -59, 0, -59, 0, -59, -59, -59, 0, -59, -59, -59, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, -59, -59, 0, 0, + 0, 0, 0, 0, 0, -32, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 120 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -82, 0, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, 0, 0, // State 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, 0, 0, 0, 0, 0, 131, 0, 0, + 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, -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, -65, 0, 0, // State 122 - 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -59, -59, -59, -59, -59, -59, -59, -59, 0, -59, 0, -59, -59, -59, 0, -59, -59, -59, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, -59, -59, 0, 0, // State 123 - 0, -60, -60, -60, 0, -60, -60, -60, -60, -60, 0, -60, 0, -60, -60, -60, 0, -60, -60, -60, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, -60, -60, 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, // State 124 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, // State 125 - 0, 0, 0, 0, 0, -34, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -62, -62, -62, 0, -62, -62, -62, -62, -62, 0, -62, 0, -62, -62, -62, 0, -62, -62, -62, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, -62, -62, 0, 0, + 0, -60, -60, -60, 0, -60, -60, -60, -60, -60, 0, -60, 0, -60, -60, -60, 0, -60, -60, -60, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, -60, -60, 0, 0, // State 127 - -9, 0, 0, 0, -9, -9, 0, 0, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9, 0, -9, 0, -9, -9, -9, 0, -9, -9, -9, -9, 0, 0, 0, -9, -9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 128 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, + 0, 0, 0, 0, 0, -34, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 129 - 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, -62, -62, -62, 0, -62, -62, -62, -62, -62, 0, -62, 0, -62, -62, -62, 0, -62, -62, -62, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, -62, -62, 0, 0, // State 130 - 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, -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, -67, 0, 0, + -9, 0, 0, 0, -9, -9, 0, 0, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9, 0, -9, 0, -9, -9, -9, 0, -9, -9, -9, -9, -9, 0, 0, 0, -9, -9, // State 131 - 0, -61, -61, -61, 0, -61, -61, -61, -61, -61, 0, -61, 0, -61, -61, -61, 0, -61, -61, -61, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, // State 132 - -10, 0, 0, 0, -10, -10, 0, 0, 0, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10, 0, -10, 0, -10, -10, -10, 0, -10, -10, -10, -10, 0, 0, 0, -10, -10, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 133 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, -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, -67, 0, 0, // State 134 - 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, -61, -61, -61, 0, -61, -61, -61, -61, -61, 0, -61, 0, -61, -61, -61, 0, -61, -61, -61, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, -61, -61, 0, 0, // State 135 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 136 - 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, + -10, 0, 0, 0, -10, -10, 0, 0, 0, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10, 0, -10, 0, -10, -10, -10, 0, -10, -10, -10, -10, -10, 0, 0, 0, -10, -10, // State 137 - 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -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, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 138 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, // State 139 - 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, -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, -66, 0, 0, + 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, + // State 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, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, + // State 141 + 0, 0, 0, 0, 0, -80, 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, -80, 0, 0, + // State 142 + 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, + // State 143 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, + // State 144 + 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, -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, -66, 0, 0, ]; fn __action(state: i16, integer: usize) -> i16 { - __ACTION[(state as usize) * 42 + integer] + __ACTION[(state as usize) * 43 + integer] } const __EOF_ACTION: &[i16] = &[ // State 0 - -99, - // State 1 -100, + // State 1 + -101, // State 2 0, // State 3 @@ -417,17 +427,17 @@ mod __parse__Program { // State 40 0, // State 41 - -49, + 0, // State 42 - -46, + 0, // State 43 - -108, + -49, // State 44 - -50, + -46, // State 45 - 0, + -109, // State 46 - 0, + -50, // State 47 0, // State 48 @@ -535,11 +545,11 @@ mod __parse__Program { // State 99 0, // State 100 - -87, + 0, // State 101 0, // State 102 - 0, + -88, // State 103 0, // State 104 @@ -583,13 +593,13 @@ mod __parse__Program { // State 123 0, // State 124 - -86, + 0, // State 125 0, // State 126 0, // State 127 - 0, + -87, // State 128 0, // State 129 @@ -614,106 +624,118 @@ mod __parse__Program { 0, // State 139 0, + // State 140 + 0, + // State 141 + 0, + // State 142 + 0, + // State 143 + 0, + // State 144 + 0, ]; fn __goto(state: i16, nt: usize) -> i16 { match nt { - 5 => 34, + 5 => 35, 8 => 4, - 9 => 22, + 9 => 23, 10 => 10, 11 => 11, 12 => 12, 13 => 13, 14 => 14, 15 => 15, - 16 => 61, - 17 => 115, - 18 => 47, - 19 => 23, + 16 => 63, + 17 => 118, + 18 => 49, + 19 => 24, 20 => match state { - 1 => 44, - _ => 41, + 1 => 46, + _ => 43, }, 22 => 1, 23 => match state { - 17 => 103, - 21 => 108, - 28 => 116, - 32 => 121, - 33 => 122, + 17 => 105, + 22 => 111, + 29 => 119, + 33 => 124, 34 => 125, 35 => 128, - 40 => 138, - _ => 62, + 36 => 131, + 38 => 135, + 42 => 143, + _ => 64, }, 25 => match state { - 27 => 114, - _ => 63, + 28 => 117, + _ => 65, }, - 26 => 64, - 27 => 65, + 26 => 66, + 27 => 67, 28 => match state { - 24 => 111, - _ => 66, + 25 => 114, + _ => 68, }, - 29 => 67, + 29 => 69, 30 => match state { - 25 => 112, - _ => 68, + 26 => 115, + _ => 70, }, 31 => match state { - 18 => 104, - 19 => 105, - 30 => 118, - 36 => 129, - 37 => 134, - _ => 69, + 18 => 106, + 19 => 107, + 21 => 110, + 31 => 121, + 37 => 132, + 39 => 138, + _ => 71, }, 33 => match state { - 22 => 109, - _ => 70, + 23 => 112, + _ => 72, }, 34 => match state { - 29 => 117, - 38 => 136, - 39 => 137, - _ => 71, + 30 => 120, + 40 => 141, + 41 => 142, + _ => 73, }, 35 => match state { - 16 => 101, - 26 => 113, - _ => 72, + 16 => 103, + 27 => 116, + _ => 74, }, 36 => match state { - 23 => 110, - _ => 73, + 24 => 113, + _ => 75, }, - 37 => 42, + 37 => 44, 38 => match state { - 2 => 45, - 3..=4 => 48, - 5 => 53, - 16 | 18..=19 | 22..=27 | 30 | 36..=37 => 102, - 20 => 106, - 31 => 120, - _ => 74, + 2 => 47, + 3..=4 => 50, + 5 => 55, + 16 | 18..=19 | 21 | 23..=28 | 31 | 37 | 39 => 104, + 20 => 108, + 32 => 123, + _ => 76, }, - 39 => 24, - 40 => 25, - 41 => 26, - 42 => 75, + 39 => 25, + 40 => 26, + 41 => 27, + 42 => 77, 43 => match state { - 4 => 50, - _ => 49, + 4 => 52, + _ => 51, }, - 45 => 43, + 45 => 45, 46 => match state { - 7 => 60, - 9 => 85, - _ => 55, + 7 => 62, + 9 => 87, + _ => 57, }, 47 => 16, - 48 => 27, + 48 => 28, _ => 0, } } @@ -755,6 +777,7 @@ mod __parse__Program { r###""read""###, r###""true""###, r###""unit""###, + r###""while""###, r###""{""###, r###""||""###, r###""}""###, @@ -828,7 +851,7 @@ mod __parse__Program { #[inline] fn error_action(&self, state: i16) -> i16 { - __action(state, 42 - 1) + __action(state, 43 - 1) } #[inline] @@ -935,8 +958,9 @@ mod __parse__Program { Token(40, _) if true => Some(37), Token(41, _) if true => Some(38), Token(42, _) if true => Some(39), - Token(0, _) if true => Some(40), - Token(1, _) if true => Some(41), + Token(43, _) if true => Some(40), + Token(0, _) if true => Some(41), + Token(1, _) if true => Some(42), _ => None, } } @@ -949,8 +973,8 @@ mod __parse__Program { ) -> __Symbol<'input> { #[allow(clippy::manual_range_patterns)]match __token_index { - 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 => match __token { - Token(3, __tok0) | Token(4, __tok0) | Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(0, __tok0) | Token(1, __tok0) if true => __Symbol::Variant0(__tok0), + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 => match __token { + Token(3, __tok0) | Token(4, __tok0) | Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(0, __tok0) | Token(1, __tok0) if true => __Symbol::Variant0(__tok0), _ => unreachable!(), }, _ => unreachable!(), @@ -1368,13 +1392,13 @@ mod __parse__Program { } 67 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 5, nonterminal_produced: 29, } } 68 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 29, } } @@ -1387,127 +1411,127 @@ mod __parse__Program { 70 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 30, + nonterminal_produced: 29, } } 71 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 31, + nonterminal_produced: 30, } } 72 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 32, + nonterminal_produced: 31, } } 73 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 1, nonterminal_produced: 32, } } 74 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 0, + nonterminal_produced: 32, + } + } + 75 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 33, } } - 75 => { + 76 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 6, nonterminal_produced: 34, } } - 76 => { + 77 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 5, nonterminal_produced: 34, } } - 77 => { + 78 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 7, nonterminal_produced: 34, } } - 78 => { + 79 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 6, nonterminal_produced: 34, } } - 79 => { + 80 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, nonterminal_produced: 34, } } - 80 => { + 81 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, nonterminal_produced: 34, } } - 81 => { + 82 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 34, } } - 82 => { + 83 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, nonterminal_produced: 35, } } - 83 => { + 84 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 35, } } - 84 => { + 85 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 36, } } - 85 => { + 86 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 10, nonterminal_produced: 37, } } - 86 => { + 87 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 8, nonterminal_produced: 37, } } - 87 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 38, - } - } 88 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 39, + nonterminal_produced: 38, } } 89 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 40, + nonterminal_produced: 39, } } 90 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 41, + nonterminal_produced: 40, } } 91 => { @@ -1525,49 +1549,49 @@ mod __parse__Program { 93 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 42, + nonterminal_produced: 41, } } 94 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 43, + states_to_pop: 1, + nonterminal_produced: 42, } } 95 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 4, nonterminal_produced: 43, } } 96 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 44, + states_to_pop: 3, + nonterminal_produced: 43, } } 97 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 1, nonterminal_produced: 44, } } 98 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 0, - nonterminal_produced: 45, + nonterminal_produced: 44, } } 99 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 0, nonterminal_produced: 45, } } 100 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 46, + nonterminal_produced: 45, } } 101 => { @@ -1591,7 +1615,7 @@ mod __parse__Program { 104 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 47, + nonterminal_produced: 46, } } 105 => { @@ -1601,12 +1625,18 @@ mod __parse__Program { } } 106 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 47, + } + } + 107 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 48, } } - 107 => __state_machine::SimulatedReduce::Accept, + 108 => __state_machine::SimulatedReduce::Accept, _ => panic!("invalid reduction index {}", __reduce_index) } } @@ -2010,6 +2040,9 @@ mod __parse__Program { __reduce106(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 107 => { + __reduce107(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 108 => { // __Program = Program => ActionFn(0); let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0; @@ -2237,11 +2270,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // "mut"? = "mut" => ActionFn(72); + // "mut"? = "mut" => ActionFn(73); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action72::<>(input, __sym0); + let __nt = super::__action73::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (1, 0) } @@ -2254,10 +2287,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // "mut"? = => ActionFn(73); + // "mut"? = => ActionFn(74); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action73::<>(input, &__start, &__end); + let __nt = super::__action74::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (0, 0) } @@ -2270,13 +2303,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" ) = "->", Type => ActionFn(76); + // ("->" ) = "->", Type => ActionFn(77); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant2(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action76::<>(input, __sym0, __sym1); + let __nt = super::__action77::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 1) } @@ -2289,13 +2322,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" )? = "->", Type => ActionFn(102); + // ("->" )? = "->", Type => ActionFn(103); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant2(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action102::<>(input, __sym0, __sym1); + let __nt = super::__action103::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 2) } @@ -2308,10 +2341,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" )? = => ActionFn(75); + // ("->" )? = => ActionFn(76); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action75::<>(input, &__start, &__end); + let __nt = super::__action76::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (0, 2) } @@ -2324,13 +2357,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Expr, "," => ActionFn(91); + // ( ",") = Expr, "," => ActionFn(92); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action91::<>(input, __sym0, __sym1); + let __nt = super::__action92::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 3) } @@ -2343,10 +2376,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(89); + // ( ",")* = => ActionFn(90); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action89::<>(input, &__start, &__end); + let __nt = super::__action90::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (0, 4) } @@ -2359,11 +2392,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(90); + // ( ",")* = ( ",")+ => ActionFn(91); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action90::<>(input, __sym0); + let __nt = super::__action91::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (1, 4) } @@ -2376,13 +2409,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(105); + // ( ",")+ = Expr, "," => ActionFn(106); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action105::<>(input, __sym0, __sym1); + let __nt = super::__action106::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (2, 5) } @@ -2395,14 +2428,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(106); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(107); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action106::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action107::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (3, 5) } @@ -2415,13 +2448,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Param, "," => ActionFn(86); + // ( ",") = Param, "," => ActionFn(87); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action86::<>(input, __sym0, __sym1); + let __nt = super::__action87::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (2, 6) } @@ -2434,10 +2467,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(84); + // ( ",")* = => ActionFn(85); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action84::<>(input, &__start, &__end); + let __nt = super::__action85::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (0, 7) } @@ -2450,11 +2483,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(85); + // ( ",")* = ( ",")+ => ActionFn(86); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action85::<>(input, __sym0); + let __nt = super::__action86::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 7) } @@ -2467,13 +2500,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Param, "," => ActionFn(109); + // ( ",")+ = Param, "," => ActionFn(110); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action109::<>(input, __sym0, __sym1); + let __nt = super::__action110::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (2, 8) } @@ -2486,14 +2519,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Param, "," => ActionFn(110); + // ( ",")+ = ( ",")+, Param, "," => ActionFn(111); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant6(__symbols); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action110::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action111::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (3, 8) } @@ -2506,11 +2539,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // AdditiveOp = "+" => ActionFn(35); + // AdditiveOp = "+" => ActionFn(36); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action35::<>(input, __sym0); + let __nt = super::__action36::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 9) } @@ -2523,11 +2556,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // AdditiveOp = "-" => ActionFn(36); + // AdditiveOp = "-" => ActionFn(37); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action36::<>(input, __sym0); + let __nt = super::__action37::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 9) } @@ -2540,14 +2573,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, AdditiveOp, ExprMultiplicative => ActionFn(60); + // BinaryOps = BinaryOps, AdditiveOp, ExprMultiplicative => ActionFn(61); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 10) } @@ -2560,11 +2593,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprMultiplicative => ActionFn(61); + // BinaryOps = ExprMultiplicative => ActionFn(62); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action61::<>(input, __sym0); + let __nt = super::__action62::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 10) } @@ -2577,14 +2610,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, ComparativeOp, ExprXor => ActionFn(64); + // BinaryOps = BinaryOps, ComparativeOp, ExprXor => ActionFn(65); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 11) } @@ -2597,11 +2630,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprXor => ActionFn(65); + // BinaryOps = ExprXor => ActionFn(66); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action65::<>(input, __sym0); + let __nt = super::__action66::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 11) } @@ -2614,14 +2647,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, LogicalAndOp, ExprComparative => ActionFn(66); + // BinaryOps = BinaryOps, LogicalAndOp, ExprComparative => ActionFn(67); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 12) } @@ -2634,11 +2667,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprComparative => ActionFn(67); + // BinaryOps = ExprComparative => ActionFn(68); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action67::<>(input, __sym0); + let __nt = super::__action68::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 12) } @@ -2651,14 +2684,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, LogicalOrOp, ExprLogicalAnd => ActionFn(68); + // BinaryOps = BinaryOps, LogicalOrOp, ExprLogicalAnd => ActionFn(69); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 13) } @@ -2671,11 +2704,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprLogicalAnd => ActionFn(69); + // BinaryOps = ExprLogicalAnd => ActionFn(70); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action69::<>(input, __sym0); + let __nt = super::__action70::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 13) } @@ -2688,14 +2721,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, MultiplicativeOp, ExprUnary => ActionFn(58); + // BinaryOps = BinaryOps, MultiplicativeOp, ExprUnary => ActionFn(59); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 14) } @@ -2708,11 +2741,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprUnary => ActionFn(59); + // BinaryOps = ExprUnary => ActionFn(60); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action59::<>(input, __sym0); + let __nt = super::__action60::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 14) } @@ -2725,14 +2758,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, XorOp, ExprAdditive => ActionFn(62); + // BinaryOps = BinaryOps, XorOp, ExprAdditive => ActionFn(63); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 15) } @@ -2745,11 +2778,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprAdditive => ActionFn(63); + // BinaryOps = ExprAdditive => ActionFn(64); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action63::<>(input, __sym0); + let __nt = super::__action64::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 15) } @@ -2762,11 +2795,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Bool = "true" => ActionFn(55); + // Bool = "true" => ActionFn(56); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action55::<>(input, __sym0); + let __nt = super::__action56::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 16) } @@ -2779,11 +2812,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Bool = "false" => ActionFn(56); + // Bool = "false" => ActionFn(57); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action56::<>(input, __sym0); + let __nt = super::__action57::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 16) } @@ -2796,11 +2829,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(115); + // Comma = Expr => ActionFn(116); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action115::<>(input, __sym0); + let __nt = super::__action116::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (1, 17) } @@ -2813,10 +2846,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(116); + // Comma = => ActionFn(117); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action116::<>(input, &__start, &__end); + let __nt = super::__action117::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (0, 17) } @@ -2829,13 +2862,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(117); + // Comma = ( ",")+, Expr => ActionFn(118); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action117::<>(input, __sym0, __sym1); + let __nt = super::__action118::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (2, 17) } @@ -2848,11 +2881,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(118); + // Comma = ( ",")+ => ActionFn(119); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action118::<>(input, __sym0); + let __nt = super::__action119::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (1, 17) } @@ -2865,11 +2898,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Param => ActionFn(121); + // Comma = Param => ActionFn(122); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action121::<>(input, __sym0); + let __nt = super::__action122::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (1, 18) } @@ -2882,10 +2915,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(122); + // Comma = => ActionFn(123); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action122::<>(input, &__start, &__end); + let __nt = super::__action123::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (0, 18) } @@ -2898,13 +2931,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Param => ActionFn(123); + // Comma = ( ",")+, Param => ActionFn(124); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant6(__symbols); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action123::<>(input, __sym0, __sym1); + let __nt = super::__action124::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (2, 18) } @@ -2917,11 +2950,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(124); + // Comma = ( ",")+ => ActionFn(125); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action124::<>(input, __sym0); + let __nt = super::__action125::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (1, 18) } @@ -2934,11 +2967,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "==" => ActionFn(28); + // ComparativeOp = "==" => ActionFn(29); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action28::<>(input, __sym0); + let __nt = super::__action29::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -2951,11 +2984,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "!=" => ActionFn(29); + // ComparativeOp = "!=" => ActionFn(30); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action29::<>(input, __sym0); + let __nt = super::__action30::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -2968,11 +3001,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = ">" => ActionFn(30); + // ComparativeOp = ">" => ActionFn(31); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action30::<>(input, __sym0); + let __nt = super::__action31::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -2985,11 +3018,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = ">=" => ActionFn(31); + // ComparativeOp = ">=" => ActionFn(32); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action31::<>(input, __sym0); + let __nt = super::__action32::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -3002,11 +3035,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "<" => ActionFn(32); + // ComparativeOp = "<" => ActionFn(33); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action32::<>(input, __sym0); + let __nt = super::__action33::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -3019,11 +3052,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "<=" => ActionFn(33); + // ComparativeOp = "<=" => ActionFn(34); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action33::<>(input, __sym0); + let __nt = super::__action34::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -3053,10 +3086,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def* = => ActionFn(78); + // Def* = => ActionFn(79); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action78::<>(input, &__start, &__end); + let __nt = super::__action79::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (0, 21) } @@ -3069,11 +3102,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def* = Def+ => ActionFn(79); + // Def* = Def+ => ActionFn(80); let __sym0 = __pop_Variant13(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action79::<>(input, __sym0); + let __nt = super::__action80::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 21) } @@ -3086,11 +3119,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def+ = Def => ActionFn(80); + // Def+ = Def => ActionFn(81); let __sym0 = __pop_Variant12(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action80::<>(input, __sym0); + let __nt = super::__action81::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 22) } @@ -3103,13 +3136,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def+ = Def+, Def => ActionFn(81); + // Def+ = Def+, Def => ActionFn(82); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant12(__symbols); let __sym0 = __pop_Variant13(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action81::<>(input, __sym0, __sym1); + let __nt = super::__action82::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (2, 22) } @@ -3139,11 +3172,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = Expr => ActionFn(87); + // Expr? = Expr => ActionFn(88); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action87::<>(input, __sym0); + let __nt = super::__action88::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 24) } @@ -3156,10 +3189,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = => ActionFn(88); + // Expr? = => ActionFn(89); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action88::<>(input, &__start, &__end); + let __nt = super::__action89::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (0, 24) } @@ -3172,11 +3205,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAdditive = BinaryOps => ActionFn(24); + // ExprAdditive = BinaryOps => ActionFn(25); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action24::<>(input, __sym0); + let __nt = super::__action25::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 25) } @@ -3189,11 +3222,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Num => ActionFn(48); + // ExprAtom = Num => ActionFn(49); let __sym0 = __pop_Variant15(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action48::<>(input, __sym0); + let __nt = super::__action49::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 26) } @@ -3206,11 +3239,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Bool => ActionFn(49); + // ExprAtom = Bool => ActionFn(50); let __sym0 = __pop_Variant9(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action49::<>(input, __sym0); + let __nt = super::__action50::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 26) } @@ -3223,11 +3256,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = "unit" => ActionFn(50); + // ExprAtom = "unit" => ActionFn(51); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action50::<>(input, __sym0); + let __nt = super::__action51::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 26) } @@ -3240,11 +3273,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Ident => ActionFn(51); + // ExprAtom = Ident => ActionFn(52); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action51::<>(input, __sym0); + let __nt = super::__action52::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 26) } @@ -3257,14 +3290,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = "(", Expr, ")" => ActionFn(52); + // ExprAtom = "(", Expr, ")" => ActionFn(53); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action53::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 26) } @@ -3277,14 +3310,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = "read", "(", ")" => ActionFn(44); + // ExprCall = "read", "(", ")" => ActionFn(45); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 27) } @@ -3297,7 +3330,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = "print", "(", Expr, ")" => ActionFn(45); + // ExprCall = "print", "(", Expr, ")" => ActionFn(46); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant4(__symbols); @@ -3305,7 +3338,7 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (4, 27) } @@ -3318,7 +3351,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = ExprAtom, "(", Comma, ")" => ActionFn(46); + // ExprCall = ExprAtom, "(", Comma, ")" => ActionFn(47); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant10(__symbols); @@ -3326,7 +3359,7 @@ mod __parse__Program { let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (4, 27) } @@ -3339,11 +3372,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = ExprAtom => ActionFn(47); + // ExprCall = ExprAtom => ActionFn(48); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action47::<>(input, __sym0); + let __nt = super::__action48::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 27) } @@ -3356,11 +3389,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprComparative = BinaryOps => ActionFn(22); + // ExprComparative = BinaryOps => ActionFn(23); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action22::<>(input, __sym0); + let __nt = super::__action23::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 28) } @@ -3440,17 +3473,39 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "break", ExprLogicalOr => ActionFn(119); + // ExprInStmt = "while", ExprLogicalOr, "{", Expr, "}" => ActionFn(18); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant4(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant4(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = super::__action18::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + (5, 29) + } + fn __reduce68< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ExprInStmt = "break", ExprLogicalOr => ActionFn(120); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action119::<>(input, __sym0, __sym1); + let __nt = super::__action120::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 29) } - fn __reduce68< + fn __reduce69< 'input, >( input: &'input str, @@ -3459,15 +3514,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "break" => ActionFn(120); + // ExprInStmt = "break" => ActionFn(121); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action120::<>(input, __sym0); + let __nt = super::__action121::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 29) } - fn __reduce69< + fn __reduce70< 'input, >( input: &'input str, @@ -3476,15 +3531,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = ExprLogicalOr => ActionFn(19); + // ExprInStmt = ExprLogicalOr => ActionFn(20); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action19::<>(input, __sym0); + let __nt = super::__action20::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 29) } - fn __reduce70< + fn __reduce71< 'input, >( input: &'input str, @@ -3493,15 +3548,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalAnd = BinaryOps => ActionFn(21); + // ExprLogicalAnd = BinaryOps => ActionFn(22); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 30) } - fn __reduce71< + fn __reduce72< 'input, >( input: &'input str, @@ -3510,15 +3565,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr = BinaryOps => ActionFn(20); + // ExprLogicalOr = BinaryOps => ActionFn(21); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action20::<>(input, __sym0); + let __nt = super::__action21::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 31) } - fn __reduce72< + fn __reduce73< 'input, >( input: &'input str, @@ -3527,15 +3582,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr? = ExprLogicalOr => ActionFn(70); + // ExprLogicalOr? = ExprLogicalOr => ActionFn(71); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action70::<>(input, __sym0); + let __nt = super::__action71::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 32) } - fn __reduce73< + fn __reduce74< 'input, >( input: &'input str, @@ -3544,14 +3599,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr? = => ActionFn(71); + // ExprLogicalOr? = => ActionFn(72); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action71::<>(input, &__start, &__end); + let __nt = super::__action72::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (0, 32) } - fn __reduce74< + fn __reduce75< 'input, >( input: &'input str, @@ -3560,15 +3615,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprMultiplicative = BinaryOps => ActionFn(25); + // ExprMultiplicative = BinaryOps => ActionFn(26); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action25::<>(input, __sym0); + let __nt = super::__action26::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 33) } - fn __reduce75< + fn __reduce76< 'input, >( input: &'input str, @@ -3577,7 +3632,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";" => ActionFn(96); + // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";" => ActionFn(97); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant4(__symbols); @@ -3587,11 +3642,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action96::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action97::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (6, 34) } - fn __reduce76< + fn __reduce77< 'input, >( input: &'input str, @@ -3600,7 +3655,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";" => ActionFn(97); + // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";" => ActionFn(98); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant4(__symbols); @@ -3609,11 +3664,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action97::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action98::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (5, 34) } - fn __reduce77< + fn __reduce78< 'input, >( input: &'input str, @@ -3622,7 +3677,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(98); + // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(99); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant4(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -3633,11 +3688,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action98::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action99::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (7, 34) } - fn __reduce78< + fn __reduce79< 'input, >( input: &'input str, @@ -3646,7 +3701,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(99); + // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(100); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant4(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -3656,11 +3711,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action99::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action100::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (6, 34) } - fn __reduce79< + fn __reduce80< 'input, >( input: &'input str, @@ -3679,7 +3734,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 34) } - fn __reduce80< + fn __reduce81< 'input, >( input: &'input str, @@ -3699,7 +3754,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 34) } - fn __reduce81< + fn __reduce82< 'input, >( input: &'input str, @@ -3716,7 +3771,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 34) } - fn __reduce82< + fn __reduce83< 'input, >( input: &'input str, @@ -3725,17 +3780,17 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprUnary = UnaryOp, ExprUnary => ActionFn(42); + // ExprUnary = UnaryOp, ExprUnary => ActionFn(43); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action42::<>(input, __sym0, __sym1); + let __nt = super::__action43::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 35) } - fn __reduce83< + fn __reduce84< 'input, >( input: &'input str, @@ -3744,15 +3799,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprUnary = ExprCall => ActionFn(43); + // ExprUnary = ExprCall => ActionFn(44); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action43::<>(input, __sym0); + let __nt = super::__action44::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 35) } - fn __reduce84< + fn __reduce85< 'input, >( input: &'input str, @@ -3761,15 +3816,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprXor = BinaryOps => ActionFn(23); + // ExprXor = BinaryOps => ActionFn(24); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 36) } - fn __reduce85< + fn __reduce86< 'input, >( input: &'input str, @@ -3778,7 +3833,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Fn = "fn", Ident, "(", Comma, ")", "->", Type, "{", Expr, "}" => ActionFn(103); + // Fn = "fn", Ident, "(", Comma, ")", "->", Type, "{", Expr, "}" => ActionFn(104); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant4(__symbols); @@ -3792,11 +3847,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym9.2; - let __nt = super::__action103::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action104::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (10, 37) } - fn __reduce86< + fn __reduce87< 'input, >( input: &'input str, @@ -3805,7 +3860,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Fn = "fn", Ident, "(", Comma, ")", "{", Expr, "}" => ActionFn(104); + // Fn = "fn", Ident, "(", Comma, ")", "{", Expr, "}" => ActionFn(105); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant4(__symbols); @@ -3817,11 +3872,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action104::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action105::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (8, 37) } - fn __reduce87< + fn __reduce88< 'input, >( input: &'input str, @@ -3830,15 +3885,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[_a-zA-Z][_a-zA-Z0-9]*"# => ActionFn(53); + // Ident = r#"[_a-zA-Z][_a-zA-Z0-9]*"# => ActionFn(54); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action53::<>(input, __sym0); + let __nt = super::__action54::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant0(__nt), __end)); (1, 38) } - fn __reduce88< + fn __reduce89< 'input, >( input: &'input str, @@ -3847,15 +3902,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // LogicalAndOp = "&&" => ActionFn(27); + // LogicalAndOp = "&&" => ActionFn(28); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action27::<>(input, __sym0); + let __nt = super::__action28::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 39) } - fn __reduce89< + fn __reduce90< 'input, >( input: &'input str, @@ -3864,15 +3919,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // LogicalOrOp = "||" => ActionFn(26); + // LogicalOrOp = "||" => ActionFn(27); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action26::<>(input, __sym0); + let __nt = super::__action27::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 40) } - fn __reduce90< + fn __reduce91< 'input, >( input: &'input str, @@ -3881,15 +3936,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "*" => ActionFn(37); + // MultiplicativeOp = "*" => ActionFn(38); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action37::<>(input, __sym0); + let __nt = super::__action38::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 41) } - fn __reduce91< + fn __reduce92< 'input, >( input: &'input str, @@ -3898,15 +3953,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "/" => ActionFn(38); + // MultiplicativeOp = "/" => ActionFn(39); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action38::<>(input, __sym0); + let __nt = super::__action39::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 41) } - fn __reduce92< + fn __reduce93< 'input, >( input: &'input str, @@ -3915,15 +3970,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "%" => ActionFn(39); + // MultiplicativeOp = "%" => ActionFn(40); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action39::<>(input, __sym0); + let __nt = super::__action40::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 41) } - fn __reduce93< + fn __reduce94< 'input, >( input: &'input str, @@ -3932,15 +3987,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"[0-9]+"# => ActionFn(54); + // Num = r#"[0-9]+"# => ActionFn(55); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action54::<>(input, __sym0); + let __nt = super::__action55::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (1, 42) } - fn __reduce94< + fn __reduce95< 'input, >( input: &'input str, @@ -3949,7 +4004,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param = "mut", Ident, ":", Type => ActionFn(100); + // Param = "mut", Ident, ":", Type => ActionFn(101); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant2(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -3957,11 +4012,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action100::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action101::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (4, 43) } - fn __reduce95< + fn __reduce96< 'input, >( input: &'input str, @@ -3970,18 +4025,18 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param = Ident, ":", Type => ActionFn(101); + // Param = Ident, ":", Type => ActionFn(102); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant2(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action101::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action102::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (3, 43) } - fn __reduce96< + fn __reduce97< 'input, >( input: &'input str, @@ -3990,15 +4045,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param? = Param => ActionFn(82); + // Param? = Param => ActionFn(83); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action82::<>(input, __sym0); + let __nt = super::__action83::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); (1, 44) } - fn __reduce97< + fn __reduce98< 'input, >( input: &'input str, @@ -4007,14 +4062,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param? = => ActionFn(83); + // Param? = => ActionFn(84); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action83::<>(input, &__start, &__end); + let __nt = super::__action84::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); (0, 44) } - fn __reduce98< + fn __reduce99< 'input, >( input: &'input str, @@ -4023,14 +4078,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Program = => ActionFn(113); + // Program = => ActionFn(114); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action113::<>(input, &__start, &__end); + let __nt = super::__action114::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); (0, 45) } - fn __reduce99< + fn __reduce100< 'input, >( input: &'input str, @@ -4039,15 +4094,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Program = Def+ => ActionFn(114); + // Program = Def+ => ActionFn(115); let __sym0 = __pop_Variant13(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action114::<>(input, __sym0); + let __nt = super::__action115::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); (1, 45) } - fn __reduce100< + fn __reduce101< 'input, >( input: &'input str, @@ -4064,7 +4119,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 46) } - fn __reduce101< + fn __reduce102< 'input, >( input: &'input str, @@ -4081,7 +4136,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 46) } - fn __reduce102< + fn __reduce103< 'input, >( input: &'input str, @@ -4098,7 +4153,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 46) } - fn __reduce103< + fn __reduce104< 'input, >( input: &'input str, @@ -4115,7 +4170,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 46) } - fn __reduce104< + fn __reduce105< 'input, >( input: &'input str, @@ -4124,15 +4179,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UnaryOp = "-" => ActionFn(40); + // UnaryOp = "-" => ActionFn(41); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action40::<>(input, __sym0); + let __nt = super::__action41::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 47) } - fn __reduce105< + fn __reduce106< 'input, >( input: &'input str, @@ -4141,15 +4196,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UnaryOp = "!" => ActionFn(41); + // UnaryOp = "!" => ActionFn(42); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action41::<>(input, __sym0); + let __nt = super::__action42::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 47) } - fn __reduce106< + fn __reduce107< 'input, >( input: &'input str, @@ -4158,11 +4213,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // XorOp = "^" => ActionFn(34); + // XorOp = "^" => ActionFn(35); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action34::<>(input, __sym0); + let __nt = super::__action35::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 48) } @@ -4223,6 +4278,7 @@ mod __intern_token { ("(?:read)", false), ("(?:true)", false), ("(?:unit)", false), + ("(?:while)", false), ("\\{", false), ("(?:\\|\\|)", false), ("\\}", false), @@ -4253,7 +4309,10 @@ fn __action1< (_, defs, _): (usize, alloc::vec::Vec>>, usize), ) -> PrgParsed<'input> { - PrgParsed{ defs, entry: "main" } + PrgParsed { + defs, + entry: "main" + } } #[allow(unused_variables)] @@ -4285,7 +4344,12 @@ fn __action3< (_, _, _): (usize, &'input str, usize), ) -> Def<&'input str, Expr<&'input str>> { - Def::Fn { sym, params, typ: typ.unwrap_or(Type::Unit), bdy } + Def::Fn { + sym, + params, + typ: typ.unwrap_or(Type::Unit), + bdy + } } #[allow(unused_variables)] @@ -4300,7 +4364,11 @@ fn __action4< (_, typ, _): (usize, Type, usize), ) -> Param<&'input str> { - Param { mutable: mutable.is_some(), sym, typ } + Param { + mutable: mutable.is_some(), + sym, + typ, + } } #[allow(unused_variables)] @@ -4377,7 +4445,12 @@ fn __action10< (_, _, _): (usize, &'input str, usize), ) -> Expr<&'input str> { - Expr::Let { sym, mutable: mutable.is_some(), bnd: Box::new(bnd), bdy: Box::new(Expr::Lit { val: Lit::Unit }) } + Expr::Let { + sym, + mutable: mutable.is_some(), + bnd: Box::new(bnd), + bdy: Box::new(Expr::Lit { val: Lit::Unit }), + } } #[allow(unused_variables)] @@ -4395,7 +4468,12 @@ fn __action11< (_, bdy, _): (usize, Expr<&'input str>, usize), ) -> Expr<&'input str> { - Expr::Let { sym, mutable: mutable.is_some(), bnd: Box::new(bnd), bdy: Box::new(bdy) } + Expr::Let { + sym, + mutable: mutable.is_some(), + bnd: Box::new(bnd), + bdy: Box::new(bdy), + } } #[allow(unused_variables)] @@ -4408,7 +4486,10 @@ fn __action12< (_, _, _): (usize, &'input str, usize), ) -> Expr<&'input str> { - Expr::Seq { stmt: Box::new(stmt), cnt: Box::new(Expr::Lit { val: Lit::Unit }) } + Expr::Seq { + stmt: Box::new(stmt), + cnt: Box::new(Expr::Lit { val: Lit::Unit }), + } } #[allow(unused_variables)] @@ -4422,7 +4503,10 @@ fn __action13< (_, cnt, _): (usize, Expr<&'input str>, usize), ) -> Expr<&'input str> { - Expr::Seq { stmt: Box::new(stmt), cnt: Box::new(cnt) } + Expr::Seq { + stmt: Box::new(stmt), + cnt: Box::new(cnt), + } } #[allow(unused_variables)] @@ -4448,7 +4532,10 @@ fn __action15< (_, bnd, _): (usize, Expr<&'input str>, usize), ) -> Expr<&'input str> { - Expr::Assign { sym, bnd: Box::new(bnd) } + Expr::Assign { + sym, + bnd: Box::new(bnd), + } } #[allow(unused_variables)] @@ -4468,7 +4555,11 @@ fn __action16< (_, _, _): (usize, &'input str, usize), ) -> Expr<&'input str> { - Expr::If { cnd: Box::new(cnd), thn: Box::new(thn), els: Box::new(els) } + Expr::If { + cnd: Box::new(cnd), + thn: Box::new(thn), + els: Box::new(els), + } } #[allow(unused_variables)] @@ -4483,7 +4574,9 @@ fn __action17< (_, _, _): (usize, &'input str, usize), ) -> Expr<&'input str> { - Expr::Loop { bdy: Box::new(bdy) } + Expr::Loop { + bdy: Box::new(bdy), + } } #[allow(unused_variables)] @@ -4493,10 +4586,22 @@ fn __action18< >( input: &'input str, (_, _, _): (usize, &'input str, usize), - (_, bdy, _): (usize, core::option::Option>, usize), + (_, cnd, _): (usize, Expr<&'input str>, usize), + (_, _, _): (usize, &'input str, usize), + (_, bdy, _): (usize, Expr<&'input str>, usize), + (_, _, _): (usize, &'input str, usize), ) -> Expr<&'input str> { - Expr::Break { bdy: bdy.map(Box::new) } + Expr::Loop { + bdy: Box::new(Expr::If { + cnd: Box::new(cnd), + thn: Box::new(bdy), + els: Box::new(Expr::Seq { + stmt: Box::new(Expr::Break { bdy: None }), + cnt: Box::new(Expr::Lit { val: Lit::Unit }), + }), + }), + } } #[allow(unused_variables)] @@ -4505,10 +4610,13 @@ fn __action19< 'input, >( input: &'input str, - (_, __0, _): (usize, Expr<&'input str>, usize), + (_, _, _): (usize, &'input str, usize), + (_, bdy, _): (usize, core::option::Option>, usize), ) -> Expr<&'input str> { - __0 + Expr::Break { + bdy: bdy.map(Box::new), + } } #[allow(unused_variables)] @@ -4587,6 +4695,18 @@ fn __action25< #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] fn __action26< 'input, +>( + input: &'input str, + (_, __0, _): (usize, Expr<&'input str>, usize), +) -> Expr<&'input str> +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] +fn __action27< + 'input, >( input: &'input str, (_, __0, _): (usize, &'input str, usize), @@ -4597,7 +4717,7 @@ fn __action26< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action27< +fn __action28< 'input, >( input: &'input str, @@ -4609,7 +4729,7 @@ fn __action27< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action28< +fn __action29< 'input, >( input: &'input str, @@ -4621,7 +4741,7 @@ fn __action28< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action29< +fn __action30< 'input, >( input: &'input str, @@ -4633,7 +4753,7 @@ fn __action29< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action30< +fn __action31< 'input, >( input: &'input str, @@ -4645,7 +4765,7 @@ fn __action30< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action31< +fn __action32< 'input, >( input: &'input str, @@ -4657,7 +4777,7 @@ fn __action31< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action32< +fn __action33< 'input, >( input: &'input str, @@ -4669,7 +4789,7 @@ fn __action32< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action33< +fn __action34< 'input, >( input: &'input str, @@ -4681,7 +4801,7 @@ fn __action33< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action34< +fn __action35< 'input, >( input: &'input str, @@ -4693,7 +4813,7 @@ fn __action34< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action35< +fn __action36< 'input, >( input: &'input str, @@ -4705,7 +4825,7 @@ fn __action35< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action36< +fn __action37< 'input, >( input: &'input str, @@ -4717,7 +4837,7 @@ fn __action36< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action37< +fn __action38< 'input, >( input: &'input str, @@ -4729,7 +4849,7 @@ fn __action37< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action38< +fn __action39< 'input, >( input: &'input str, @@ -4741,7 +4861,7 @@ fn __action38< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action39< +fn __action40< 'input, >( input: &'input str, @@ -4753,7 +4873,7 @@ fn __action39< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action40< +fn __action41< 'input, >( input: &'input str, @@ -4765,7 +4885,7 @@ fn __action40< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action41< +fn __action42< 'input, >( input: &'input str, @@ -4777,7 +4897,7 @@ fn __action41< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action42< +fn __action43< 'input, >( input: &'input str, @@ -4785,12 +4905,15 @@ fn __action42< (_, e, _): (usize, Expr<&'input str>, usize), ) -> Expr<&'input str> { - Expr::Prim{op, args: vec![e]} + Expr::Prim { + op, + args: vec![e], + } } #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action43< +fn __action44< 'input, >( input: &'input str, @@ -4802,7 +4925,7 @@ fn __action43< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action44< +fn __action45< 'input, >( input: &'input str, @@ -4811,12 +4934,15 @@ fn __action44< (_, __2, _): (usize, &'input str, usize), ) -> Expr<&'input str> { - Expr::Prim{ op: Op::Read, args: vec![] } + Expr::Prim { + op: Op::Read, + args: vec![], + } } #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action45< +fn __action46< 'input, >( input: &'input str, @@ -4826,12 +4952,15 @@ fn __action45< (_, _, _): (usize, &'input str, usize), ) -> Expr<&'input str> { - Expr::Prim{ op: Op::Print, args: vec![e] } + Expr::Prim { + op: Op::Print, + args: vec![e], + } } #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action46< +fn __action47< 'input, >( input: &'input str, @@ -4841,12 +4970,15 @@ fn __action46< (_, _, _): (usize, &'input str, usize), ) -> Expr<&'input str> { - Expr::Apply{ fun: Box::new(fun), args } + Expr::Apply { + fun: Box::new(fun), + args, + } } #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action47< +fn __action48< 'input, >( input: &'input str, @@ -4858,7 +4990,7 @@ fn __action47< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action48< +fn __action49< 'input, >( input: &'input str, @@ -4870,7 +5002,7 @@ fn __action48< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action49< +fn __action50< 'input, >( input: &'input str, @@ -4882,7 +5014,7 @@ fn __action49< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action50< +fn __action51< 'input, >( input: &'input str, @@ -4894,7 +5026,7 @@ fn __action50< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action51< +fn __action52< 'input, >( input: &'input str, @@ -4906,7 +5038,7 @@ fn __action51< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action52< +fn __action53< 'input, >( input: &'input str, @@ -4920,7 +5052,7 @@ fn __action52< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action53< +fn __action54< 'input, >( input: &'input str, @@ -4932,7 +5064,7 @@ fn __action53< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action54< +fn __action55< 'input, >( input: &'input str, @@ -4944,7 +5076,7 @@ fn __action54< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action55< +fn __action56< 'input, >( input: &'input str, @@ -4956,7 +5088,7 @@ fn __action55< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action56< +fn __action57< 'input, >( input: &'input str, @@ -4968,7 +5100,7 @@ fn __action56< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action57< +fn __action58< 'input, >( input: &'input str, @@ -4988,7 +5120,7 @@ fn __action57< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action58< +fn __action59< 'input, >( input: &'input str, @@ -4997,12 +5129,15 @@ fn __action58< (_, e2, _): (usize, Expr<&'input str>, usize), ) -> Expr<&'input str> { - Expr::Prim{op, args: vec![e1, e2] } + Expr::Prim { + op, + args: vec![e1, e2], + } } #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action59< +fn __action60< 'input, >( input: &'input str, @@ -5014,7 +5149,7 @@ fn __action59< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action60< +fn __action61< 'input, >( input: &'input str, @@ -5023,12 +5158,15 @@ fn __action60< (_, e2, _): (usize, Expr<&'input str>, usize), ) -> Expr<&'input str> { - Expr::Prim{op, args: vec![e1, e2] } + Expr::Prim { + op, + args: vec![e1, e2], + } } #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action61< +fn __action62< 'input, >( input: &'input str, @@ -5040,7 +5178,7 @@ fn __action61< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action62< +fn __action63< 'input, >( input: &'input str, @@ -5049,12 +5187,15 @@ fn __action62< (_, e2, _): (usize, Expr<&'input str>, usize), ) -> Expr<&'input str> { - Expr::Prim{op, args: vec![e1, e2] } + Expr::Prim { + op, + args: vec![e1, e2], + } } #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action63< +fn __action64< 'input, >( input: &'input str, @@ -5066,7 +5207,7 @@ fn __action63< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action64< +fn __action65< 'input, >( input: &'input str, @@ -5075,12 +5216,15 @@ fn __action64< (_, e2, _): (usize, Expr<&'input str>, usize), ) -> Expr<&'input str> { - Expr::Prim{op, args: vec![e1, e2] } + Expr::Prim { + op, + args: vec![e1, e2], + } } #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action65< +fn __action66< 'input, >( input: &'input str, @@ -5092,7 +5236,7 @@ fn __action65< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action66< +fn __action67< 'input, >( input: &'input str, @@ -5101,12 +5245,15 @@ fn __action66< (_, e2, _): (usize, Expr<&'input str>, usize), ) -> Expr<&'input str> { - Expr::Prim{op, args: vec![e1, e2] } + Expr::Prim { + op, + args: vec![e1, e2], + } } #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action67< +fn __action68< 'input, >( input: &'input str, @@ -5118,7 +5265,7 @@ fn __action67< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action68< +fn __action69< 'input, >( input: &'input str, @@ -5127,12 +5274,15 @@ fn __action68< (_, e2, _): (usize, Expr<&'input str>, usize), ) -> Expr<&'input str> { - Expr::Prim{op, args: vec![e1, e2] } + Expr::Prim { + op, + args: vec![e1, e2], + } } #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action69< +fn __action70< 'input, >( input: &'input str, @@ -5144,7 +5294,7 @@ fn __action69< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action70< +fn __action71< 'input, >( input: &'input str, @@ -5156,7 +5306,7 @@ fn __action70< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action71< +fn __action72< 'input, >( input: &'input str, @@ -5169,7 +5319,7 @@ fn __action71< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action72< +fn __action73< 'input, >( input: &'input str, @@ -5181,7 +5331,7 @@ fn __action72< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action73< +fn __action74< 'input, >( input: &'input str, @@ -5194,7 +5344,7 @@ fn __action73< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action74< +fn __action75< 'input, >( input: &'input str, @@ -5206,7 +5356,7 @@ fn __action74< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action75< +fn __action76< 'input, >( input: &'input str, @@ -5219,7 +5369,7 @@ fn __action75< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action76< +fn __action77< 'input, >( input: &'input str, @@ -5232,7 +5382,7 @@ fn __action76< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action77< +fn __action78< 'input, >( input: &'input str, @@ -5252,7 +5402,7 @@ fn __action77< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action78< +fn __action79< 'input, >( input: &'input str, @@ -5265,7 +5415,7 @@ fn __action78< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action79< +fn __action80< 'input, >( input: &'input str, @@ -5277,7 +5427,7 @@ fn __action79< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action80< +fn __action81< 'input, >( input: &'input str, @@ -5289,7 +5439,7 @@ fn __action80< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action81< +fn __action82< 'input, >( input: &'input str, @@ -5302,7 +5452,7 @@ fn __action81< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action82< +fn __action83< 'input, >( input: &'input str, @@ -5314,7 +5464,7 @@ fn __action82< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action83< +fn __action84< 'input, >( input: &'input str, @@ -5327,7 +5477,7 @@ fn __action83< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action84< +fn __action85< 'input, >( input: &'input str, @@ -5340,7 +5490,7 @@ fn __action84< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action85< +fn __action86< 'input, >( input: &'input str, @@ -5352,7 +5502,7 @@ fn __action85< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action86< +fn __action87< 'input, >( input: &'input str, @@ -5365,7 +5515,7 @@ fn __action86< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action87< +fn __action88< 'input, >( input: &'input str, @@ -5377,7 +5527,7 @@ fn __action87< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action88< +fn __action89< 'input, >( input: &'input str, @@ -5390,7 +5540,7 @@ fn __action88< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action89< +fn __action90< 'input, >( input: &'input str, @@ -5403,7 +5553,7 @@ fn __action89< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action90< +fn __action91< 'input, >( input: &'input str, @@ -5415,7 +5565,7 @@ fn __action90< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action91< +fn __action92< 'input, >( input: &'input str, @@ -5428,7 +5578,7 @@ fn __action91< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action92< +fn __action93< 'input, >( input: &'input str, @@ -5440,7 +5590,7 @@ fn __action92< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action93< +fn __action94< 'input, >( input: &'input str, @@ -5453,7 +5603,7 @@ fn __action93< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action94< +fn __action95< 'input, >( input: &'input str, @@ -5465,7 +5615,7 @@ fn __action94< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action95< +fn __action96< 'input, >( input: &'input str, @@ -5479,7 +5629,7 @@ fn __action95< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action96< +fn __action97< 'input, >( input: &'input str, @@ -5493,7 +5643,7 @@ fn __action96< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action72( + let __temp0 = __action73( input, __1, ); @@ -5512,7 +5662,7 @@ fn __action96< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action97< +fn __action98< 'input, >( input: &'input str, @@ -5525,7 +5675,7 @@ fn __action97< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action73( + let __temp0 = __action74( input, &__start0, &__end0, @@ -5545,7 +5695,7 @@ fn __action97< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action98< +fn __action99< 'input, >( input: &'input str, @@ -5560,7 +5710,7 @@ fn __action98< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action72( + let __temp0 = __action73( input, __1, ); @@ -5580,7 +5730,7 @@ fn __action98< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action99< +fn __action100< 'input, >( input: &'input str, @@ -5594,7 +5744,7 @@ fn __action99< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action73( + let __temp0 = __action74( input, &__start0, &__end0, @@ -5615,7 +5765,7 @@ fn __action99< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action100< +fn __action101< 'input, >( input: &'input str, @@ -5627,7 +5777,7 @@ fn __action100< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action72( + let __temp0 = __action73( input, __0, ); @@ -5644,7 +5794,7 @@ fn __action100< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action101< +fn __action102< 'input, >( input: &'input str, @@ -5655,7 +5805,7 @@ fn __action101< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action73( + let __temp0 = __action74( input, &__start0, &__end0, @@ -5673,7 +5823,7 @@ fn __action101< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action102< +fn __action103< 'input, >( input: &'input str, @@ -5683,13 +5833,13 @@ fn __action102< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action76( + let __temp0 = __action77( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action74( + __action75( input, __temp0, ) @@ -5698,7 +5848,7 @@ fn __action102< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action103< +fn __action104< 'input, >( input: &'input str, @@ -5716,7 +5866,7 @@ fn __action103< { let __start0 = __5.0; let __end0 = __6.2; - let __temp0 = __action102( + let __temp0 = __action103( input, __5, __6, @@ -5739,7 +5889,7 @@ fn __action103< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action104< +fn __action105< 'input, >( input: &'input str, @@ -5755,7 +5905,7 @@ fn __action104< { let __start0 = __4.2; let __end0 = __5.0; - let __temp0 = __action75( + let __temp0 = __action76( input, &__start0, &__end0, @@ -5778,7 +5928,7 @@ fn __action104< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action105< +fn __action106< 'input, >( input: &'input str, @@ -5788,13 +5938,13 @@ fn __action105< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action91( + let __temp0 = __action92( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action92( + __action93( input, __temp0, ) @@ -5803,7 +5953,7 @@ fn __action105< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action106< +fn __action107< 'input, >( input: &'input str, @@ -5814,13 +5964,13 @@ fn __action106< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action91( + let __temp0 = __action92( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action93( + __action94( input, __0, __temp0, @@ -5830,7 +5980,7 @@ fn __action106< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action107< +fn __action108< 'input, >( input: &'input str, @@ -5839,13 +5989,13 @@ fn __action107< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action89( + let __temp0 = __action90( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action57( + __action58( input, __temp0, __0, @@ -5855,7 +6005,7 @@ fn __action107< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action108< +fn __action109< 'input, >( input: &'input str, @@ -5865,12 +6015,12 @@ fn __action108< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action90( + let __temp0 = __action91( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action57( + __action58( input, __temp0, __1, @@ -5880,7 +6030,7 @@ fn __action108< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action109< +fn __action110< 'input, >( input: &'input str, @@ -5890,13 +6040,13 @@ fn __action109< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action86( + let __temp0 = __action87( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action94( + __action95( input, __temp0, ) @@ -5905,7 +6055,7 @@ fn __action109< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action110< +fn __action111< 'input, >( input: &'input str, @@ -5916,13 +6066,13 @@ fn __action110< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action86( + let __temp0 = __action87( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action95( + __action96( input, __0, __temp0, @@ -5932,7 +6082,7 @@ fn __action110< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action111< +fn __action112< 'input, >( input: &'input str, @@ -5941,13 +6091,13 @@ fn __action111< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action84( + let __temp0 = __action85( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action77( + __action78( input, __temp0, __0, @@ -5957,7 +6107,7 @@ fn __action111< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action112< +fn __action113< 'input, >( input: &'input str, @@ -5967,12 +6117,12 @@ fn __action112< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action85( + let __temp0 = __action86( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action77( + __action78( input, __temp0, __1, @@ -5982,7 +6132,7 @@ fn __action112< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action113< +fn __action114< 'input, >( input: &'input str, @@ -5992,7 +6142,7 @@ fn __action113< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action78( + let __temp0 = __action79( input, &__start0, &__end0, @@ -6007,7 +6157,7 @@ fn __action113< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action114< +fn __action115< 'input, >( input: &'input str, @@ -6016,7 +6166,7 @@ fn __action114< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action79( + let __temp0 = __action80( input, __0, ); @@ -6030,7 +6180,7 @@ fn __action114< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action115< +fn __action116< 'input, >( input: &'input str, @@ -6039,12 +6189,12 @@ fn __action115< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action87( + let __temp0 = __action88( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action107( + __action108( input, __temp0, ) @@ -6053,7 +6203,7 @@ fn __action115< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action116< +fn __action117< 'input, >( input: &'input str, @@ -6063,13 +6213,13 @@ fn __action116< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action88( + let __temp0 = __action89( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action107( + __action108( input, __temp0, ) @@ -6078,7 +6228,7 @@ fn __action116< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action117< +fn __action118< 'input, >( input: &'input str, @@ -6088,12 +6238,12 @@ fn __action117< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action87( + let __temp0 = __action88( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action108( + __action109( input, __0, __temp0, @@ -6103,7 +6253,7 @@ fn __action117< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action118< +fn __action119< 'input, >( input: &'input str, @@ -6112,13 +6262,13 @@ fn __action118< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action88( + let __temp0 = __action89( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action108( + __action109( input, __0, __temp0, @@ -6128,7 +6278,7 @@ fn __action118< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action119< +fn __action120< 'input, >( input: &'input str, @@ -6138,12 +6288,12 @@ fn __action119< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action70( + let __temp0 = __action71( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action18( + __action19( input, __0, __temp0, @@ -6153,7 +6303,7 @@ fn __action119< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action120< +fn __action121< 'input, >( input: &'input str, @@ -6162,13 +6312,13 @@ fn __action120< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action71( + let __temp0 = __action72( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action18( + __action19( input, __0, __temp0, @@ -6178,7 +6328,7 @@ fn __action120< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action121< +fn __action122< 'input, >( input: &'input str, @@ -6187,12 +6337,12 @@ fn __action121< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action82( + let __temp0 = __action83( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action111( + __action112( input, __temp0, ) @@ -6201,7 +6351,7 @@ fn __action121< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action122< +fn __action123< 'input, >( input: &'input str, @@ -6211,13 +6361,13 @@ fn __action122< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action83( + let __temp0 = __action84( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action111( + __action112( input, __temp0, ) @@ -6226,7 +6376,7 @@ fn __action122< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action123< +fn __action124< 'input, >( input: &'input str, @@ -6236,12 +6386,12 @@ fn __action123< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action82( + let __temp0 = __action83( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action112( + __action113( input, __0, __temp0, @@ -6251,7 +6401,7 @@ fn __action123< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action124< +fn __action125< 'input, >( input: &'input str, @@ -6260,13 +6410,13 @@ fn __action124< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action83( + let __temp0 = __action84( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action112( + __action113( input, __0, __temp0, diff --git a/programs/good/loops/while__count_down.test b/programs/good/loops/while__count_down.test new file mode 100644 index 0000000..be0b3a0 --- /dev/null +++ b/programs/good/loops/while__count_down.test @@ -0,0 +1,10 @@ +## +5 +# +fn main() -> Int { + let mut i = 10; + while i > 5 { + i = i - 1; + }; + i +} diff --git a/programs/good/loops/while_sum.test b/programs/good/loops/while_sum.test new file mode 100644 index 0000000..998cdaf --- /dev/null +++ b/programs/good/loops/while_sum.test @@ -0,0 +1,13 @@ +1 2 3 4 5 6 7 8 9 10 0 +# +# +55 +# +fn main() -> Int { + let mut x = 0; + let mut sum = 0; + while (x = read(); x != 0) { + sum = sum + x + }; + sum +} From 9a4f3131f999b76037730bd9f9e8888dc675e7ca Mon Sep 17 00:00:00 2001 From: Vlamonster Date: Sun, 29 Oct 2023 23:29:52 +0100 Subject: [PATCH 03/16] Fix parser verification. Note: I really, really dislike Windows more and more. `\r` was placed at the end of a string. --- compiler/src/passes/conclude/mod.rs | 2 +- compiler/src/passes/interference/liveness_analysis.rs | 2 +- compiler/src/passes/interference/mod.rs | 2 +- compiler/src/passes/mod.rs | 2 +- compiler/src/passes/patch_instructions/mod.rs | 2 +- scripts/verify_parser_up_to_date.sh | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/compiler/src/passes/conclude/mod.rs b/compiler/src/passes/conclude/mod.rs index c44cf08..1d9d24c 100644 --- a/compiler/src/passes/conclude/mod.rs +++ b/compiler/src/passes/conclude/mod.rs @@ -1 +1 @@ -pub mod conclude; \ No newline at end of file +pub mod conclude; diff --git a/compiler/src/passes/interference/liveness_analysis.rs b/compiler/src/passes/interference/liveness_analysis.rs index a47b2f4..2d0edd1 100644 --- a/compiler/src/passes/interference/liveness_analysis.rs +++ b/compiler/src/passes/interference/liveness_analysis.rs @@ -4,8 +4,8 @@ use crate::language::x86var::{ }; use crate::utils::gen_sym::UniqueSym; -use std::collections::{HashMap, HashSet}; use std::collections::hash_map::Entry; +use std::collections::{HashMap, HashSet}; impl<'p> X86Selected<'p> { pub fn add_liveness(self) -> LX86VarProgram<'p> { diff --git a/compiler/src/passes/interference/mod.rs b/compiler/src/passes/interference/mod.rs index 5557024..02cd37b 100644 --- a/compiler/src/passes/interference/mod.rs +++ b/compiler/src/passes/interference/mod.rs @@ -1,4 +1,4 @@ pub mod assign_homes; pub mod coloring_interference; pub mod compute_interference; -pub mod liveness_analysis; \ No newline at end of file +pub mod liveness_analysis; diff --git a/compiler/src/passes/mod.rs b/compiler/src/passes/mod.rs index 3a42816..d15492a 100644 --- a/compiler/src/passes/mod.rs +++ b/compiler/src/passes/mod.rs @@ -2,10 +2,10 @@ pub mod atomize; pub mod conclude; pub mod emit; pub mod explicate; +pub mod interference; pub mod parse; pub mod patch_instructions; pub mod reveal_functions; pub mod select; pub mod type_check; pub mod uniquify; -pub mod interference; diff --git a/compiler/src/passes/patch_instructions/mod.rs b/compiler/src/passes/patch_instructions/mod.rs index 782bbde..a653a24 100644 --- a/compiler/src/passes/patch_instructions/mod.rs +++ b/compiler/src/passes/patch_instructions/mod.rs @@ -1 +1 @@ -pub mod patch_instructions; \ No newline at end of file +pub mod patch_instructions; diff --git a/scripts/verify_parser_up_to_date.sh b/scripts/verify_parser_up_to_date.sh index af17366..4bad7c9 100755 --- a/scripts/verify_parser_up_to_date.sh +++ b/scripts/verify_parser_up_to_date.sh @@ -1,4 +1,4 @@ #! /usr/bin/bash hash1=$(openssl dgst -sha3-256 ./compiler/src/passes/parse/grammar.lalrpop | cut -d " " -f 2) -hash2=$(sed -n "2 s/\/\/ sha3: //p" ./compiler/src/passes/parse/grammar.rs) +hash2=$(sed -n "2 s/\/\/ sha3: //p" ./compiler/src/passes/parse/grammar.rs | sed 's/\r$//') test "$hash1" = "$hash2" From 782f6d5b765f0dfac4f334a363d96f1ad2db9a7f Mon Sep 17 00:00:00 2001 From: Vlamonster Date: Mon, 30 Oct 2023 00:51:54 +0100 Subject: [PATCH 04/16] Fix parser verification. --- compiler/src/passes/explicate/explicate.rs | 5 +---- compiler/src/passes/parse/grammar.rs | 2 +- scripts/verify_parser_up_to_date.sh | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/compiler/src/passes/explicate/explicate.rs b/compiler/src/passes/explicate/explicate.rs index e6e9259..fc9c3bf 100644 --- a/compiler/src/passes/explicate/explicate.rs +++ b/compiler/src/passes/explicate/explicate.rs @@ -282,12 +282,9 @@ fn explicate_pred<'p>( AExpr::FunRef { .. } | AExpr::Atom { atm: Atom::Val { - val: Lit::Int { .. }, + val: Lit::Int { .. } | Lit::Unit, }, } - | AExpr::Atom { - atm: Atom::Val { val: Lit::Unit }, - } | AExpr::Assign { .. } | AExpr::Break { .. } => unreachable!(), } diff --git a/compiler/src/passes/parse/grammar.rs b/compiler/src/passes/parse/grammar.rs index 2b3784f..eef1359 100644 --- a/compiler/src/passes/parse/grammar.rs +++ b/compiler/src/passes/parse/grammar.rs @@ -1,5 +1,5 @@ // auto-generated: "lalrpop 0.20.1" -// sha3: 67623d1c97db57f74a5b5074032bfe43393e157419345957fc221a46cca5704e +// sha3: 19eaac2958ee7627671379b88ee4fd1bbd2700d0b51bbf42e8cfb929dab502b9 use std::str::FromStr; use crate::passes::parse::*; use crate::passes::parse::PrgParsed; diff --git a/scripts/verify_parser_up_to_date.sh b/scripts/verify_parser_up_to_date.sh index 4bad7c9..af17366 100755 --- a/scripts/verify_parser_up_to_date.sh +++ b/scripts/verify_parser_up_to_date.sh @@ -1,4 +1,4 @@ #! /usr/bin/bash hash1=$(openssl dgst -sha3-256 ./compiler/src/passes/parse/grammar.lalrpop | cut -d " " -f 2) -hash2=$(sed -n "2 s/\/\/ sha3: //p" ./compiler/src/passes/parse/grammar.rs | sed 's/\r$//') +hash2=$(sed -n "2 s/\/\/ sha3: //p" ./compiler/src/passes/parse/grammar.rs) test "$hash1" = "$hash2" From fd0a29472235db290a007645abc15ec6003fe003 Mon Sep 17 00:00:00 2001 From: Vlamonster Date: Mon, 30 Oct 2023 01:37:25 +0100 Subject: [PATCH 05/16] Resolve lots of Clippy warnings. --- compiler/src/interpreter/x86var.rs | 18 +++++++-------- compiler/src/passes/atomize/atomize.rs | 8 ++----- compiler/src/passes/atomize/mod.rs | 2 +- compiler/src/passes/emit/mod.rs | 4 ++-- compiler/src/passes/explicate/explicate.rs | 1 + compiler/src/passes/explicate/interpret.rs | 23 ++++++++++--------- .../src/passes/interference/assign_homes.rs | 6 +---- .../interference/coloring_interference.rs | 2 ++ .../interference/compute_interference.rs | 1 + .../passes/interference/liveness_analysis.rs | 5 ++-- compiler/src/passes/parse/grammar.lalrpop | 6 ++--- compiler/src/passes/parse/grammar.rs | 6 ++--- compiler/src/passes/parse/interpreter.rs | 5 +--- compiler/src/passes/parse/mod.rs | 22 ++++++++++-------- .../patch_instructions/patch_instructions.rs | 6 +---- compiler/src/passes/reveal_functions/mod.rs | 4 ++-- .../reveal_functions/reveal_functions.rs | 3 ++- compiler/src/passes/select/io.rs | 2 +- compiler/src/passes/select/mod.rs | 11 +++------ compiler/src/passes/type_check/check.rs | 22 ++++++++---------- compiler/src/passes/uniquify/uniquify.rs | 3 ++- compiler/src/utils/split_test.rs | 1 + 22 files changed, 75 insertions(+), 86 deletions(-) diff --git a/compiler/src/interpreter/x86var.rs b/compiler/src/interpreter/x86var.rs index 5f6df92..98c719e 100644 --- a/compiler/src/interpreter/x86var.rs +++ b/compiler/src/interpreter/x86var.rs @@ -72,7 +72,7 @@ impl<'p> X86Concluded<'p> { block_ids, read_buffer: Vec::new(), write_buffer: Vec::new(), - status: Default::default(), + status: Status::default(), stats: IStats::default(), }; @@ -135,10 +135,10 @@ impl<'p, I: IO> X86Interpreter<'p, I> { self.stats.instructions_executed += 1; match instr { Instr::Addq { src, dst } => { - self.set_arg(dst, self.get_arg(src) + self.get_arg(dst)) + self.set_arg(dst, self.get_arg(src) + self.get_arg(dst)); } Instr::Subq { src, dst } => { - self.set_arg(dst, self.get_arg(dst) - self.get_arg(src)) + self.set_arg(dst, self.get_arg(dst) - self.get_arg(src)); } Instr::Negq { dst } => self.set_arg(dst, -self.get_arg(dst)), Instr::Movq { src, dst } => self.set_arg(dst, self.get_arg(src)), @@ -181,8 +181,8 @@ impl<'p, I: IO> X86Interpreter<'p, I> { Instr::Divq { divisor } => { let rax = self.regs[&Reg::RAX]; let rdx = self.regs[&Reg::RDX]; - let dividend = ((rdx as i128) << 64) | rax as i128; - let divisor = self.get_arg(divisor) as i128; + let dividend = (i128::from(rdx) << 64) | i128::from(rax); + let divisor = i128::from(self.get_arg(divisor)); self.regs.insert(Reg::RAX, (dividend / divisor) as i64); self.regs.insert(Reg::RDX, (dividend % divisor) as i64); @@ -226,16 +226,16 @@ impl<'p, I: IO> X86Interpreter<'p, I> { } } Instr::Andq { src, dst } => { - self.set_arg(dst, self.get_arg(src) & self.get_arg(dst)) + self.set_arg(dst, self.get_arg(src) & self.get_arg(dst)); } Instr::Orq { src, dst } => self.set_arg(dst, self.get_arg(src) | self.get_arg(dst)), Instr::Xorq { src, dst } => { - self.set_arg(dst, self.get_arg(src) ^ self.get_arg(dst)) + self.set_arg(dst, self.get_arg(src) ^ self.get_arg(dst)); } Instr::Notq { dst } => self.set_arg(dst, !self.get_arg(dst)), Instr::Setcc { cnd } => { let rax = self.regs[&Reg::RAX]; - let cnd = self.evaluate_cnd(*cnd) as i64; + let cnd = i64::from(self.evaluate_cnd(*cnd)); self.regs.insert(Reg::RAX, rax & !0xFF | cnd); } Instr::LoadLbl { sym, dst } => { @@ -288,7 +288,7 @@ impl<'p, I: IO> X86Interpreter<'p, I> { Cnd::LE => self.status.zero || self.status.sign != self.status.overflow, Cnd::NE => !self.status.zero, Cnd::NotOverflow => !self.status.overflow, - Cnd::NotSign => self.status.sign, + Cnd::NotSign => !self.status.sign, Cnd::Overflow => self.status.overflow, Cnd::ParityEven => self.status.parity_even, Cnd::ParityOdd => !self.status.parity_even, diff --git a/compiler/src/passes/atomize/atomize.rs b/compiler/src/passes/atomize/atomize.rs index 427784a..ce9cd7c 100644 --- a/compiler/src/passes/atomize/atomize.rs +++ b/compiler/src/passes/atomize/atomize.rs @@ -1,5 +1,5 @@ use crate::passes::atomize::{AExpr, Atom, PrgAtomized}; -use crate::passes::parse::{Def, Lit}; +use crate::passes::parse::Def; use crate::passes::reveal_functions::{PrgRevealed, RExpr}; use crate::utils::gen_sym::{gen_sym, UniqueSym}; @@ -89,11 +89,7 @@ fn atomize_expr(expr: RExpr) -> AExpr { bdy: Box::new(atomize_expr(*bdy)), }, RExpr::Break { bdy } => AExpr::Break { - bdy: bdy - .map(|bdy| Box::new(atomize_expr(*bdy))) - .unwrap_or(Box::new(AExpr::Atom { - atm: Atom::Val { val: Lit::Unit }, - })), + bdy: Box::new(atomize_expr(*bdy)), }, RExpr::Seq { stmt, cnt } => AExpr::Seq { stmt: Box::new(atomize_expr(*stmt)), diff --git a/compiler/src/passes/atomize/mod.rs b/compiler/src/passes/atomize/mod.rs index 1d7d117..d1ba761 100644 --- a/compiler/src/passes/atomize/mod.rs +++ b/compiler/src/passes/atomize/mod.rs @@ -119,7 +119,7 @@ impl<'p> From> for Expr> { bdy: Box::new((*bdy).into()), }, AExpr::Break { bdy } => Expr::Break { - bdy: Some(Box::new((*bdy).into())), + bdy: Box::new((*bdy).into()), }, AExpr::Seq { stmt, cnt } => Expr::Seq { stmt: Box::new((*stmt).into()), diff --git a/compiler/src/passes/emit/mod.rs b/compiler/src/passes/emit/mod.rs index 18587ea..b1555b7 100644 --- a/compiler/src/passes/emit/mod.rs +++ b/compiler/src/passes/emit/mod.rs @@ -89,7 +89,7 @@ fn emit_instr<'p>( } Instr::Jcc { lbl, cnd } => { rel_jumps.insert(machine_code.len() + 2, *lbl); - vec![0x0F, encode_cnd(cnd), 0x00, 0x00, 0x00, 0x00] + vec![0x0F, encode_cnd(*cnd), 0x00, 0x00, 0x00, 0x00] } Instr::Retq => vec![0xC3], Instr::Syscall { .. } => vec![0x0F, 0x05], @@ -137,7 +137,7 @@ fn encode_reg(reg: &Reg) -> (u8, u8) { } } -fn encode_cnd(cnd: &Cnd) -> u8 { +fn encode_cnd(cnd: Cnd) -> u8 { match cnd { Cnd::Above => 0x87, Cnd::AboveOrEqual | Cnd::NotCarry => 0x83, diff --git a/compiler/src/passes/explicate/explicate.rs b/compiler/src/passes/explicate/explicate.rs index fc9c3bf..c0dd7be 100644 --- a/compiler/src/passes/explicate/explicate.rs +++ b/compiler/src/passes/explicate/explicate.rs @@ -11,6 +11,7 @@ struct Env<'a, 'p> { } impl<'p> PrgAtomized<'p> { + #[must_use] pub fn explicate(self) -> PrgExplicated<'p> { let mut blocks = HashMap::new(); let mut env = Env { diff --git a/compiler/src/passes/explicate/interpret.rs b/compiler/src/passes/explicate/interpret.rs index aee545a..8914ee5 100644 --- a/compiler/src/passes/explicate/interpret.rs +++ b/compiler/src/passes/explicate/interpret.rs @@ -34,17 +34,6 @@ impl<'p> PrgExplicated<'p> { } } - pub fn interpret_atom( - &self, - atom: &Atom<'p>, - scope: &PushMap, Val>>, - ) -> Val> { - match atom { - Atom::Val { val } => (*val).into(), - Atom::Var { sym } => scope[sym], - } - } - pub fn interpret_expr( &self, expr: &CExpr<'p>, @@ -159,4 +148,16 @@ impl<'p> PrgExplicated<'p> { } } } + + #[must_use] + pub fn interpret_atom( + &self, + atom: &Atom<'p>, + scope: &PushMap, Val>>, + ) -> Val> { + match atom { + Atom::Val { val } => (*val).into(), + Atom::Var { sym } => scope[sym], + } + } } diff --git a/compiler/src/passes/interference/assign_homes.rs b/compiler/src/passes/interference/assign_homes.rs index b7490cf..6e8592c 100644 --- a/compiler/src/passes/interference/assign_homes.rs +++ b/compiler/src/passes/interference/assign_homes.rs @@ -1,7 +1,3 @@ -//! This pass compiles `X86VarProgram`s into `AX86Program`. -//! -//! This pass is responsible for assigning all the program variables to locations on the stack. - use crate::language::x86var::{Arg, Block, Instr, VarArg, X86Assigned, X86Colored}; use crate::utils::gen_sym::UniqueSym; use crate::{ @@ -11,7 +7,7 @@ use crate::{ use std::collections::HashMap; impl<'p> X86Colored<'p> { - /// See module-level documentation. + #[must_use] pub fn assign_homes(self) -> X86Assigned<'p> { X86Assigned { blocks: self diff --git a/compiler/src/passes/interference/coloring_interference.rs b/compiler/src/passes/interference/coloring_interference.rs index f3e74a4..db71854 100644 --- a/compiler/src/passes/interference/coloring_interference.rs +++ b/compiler/src/passes/interference/coloring_interference.rs @@ -4,6 +4,7 @@ use itertools::Itertools; use std::collections::{HashMap, HashSet}; impl<'p> X86WithInterference<'p> { + #[must_use] pub fn color_interference(self) -> X86Colored<'p> { let (color_map, stack_space) = color_graph(self.interference); @@ -17,6 +18,7 @@ impl<'p> X86WithInterference<'p> { } } +#[must_use] fn color_graph(graph: InterferenceGraph) -> (HashMap, usize) { let mut queue = Vec::new(); let mut node_map = HashMap::::new(); diff --git a/compiler/src/passes/interference/compute_interference.rs b/compiler/src/passes/interference/compute_interference.rs index 0e069a3..e3bbcf6 100644 --- a/compiler/src/passes/interference/compute_interference.rs +++ b/compiler/src/passes/interference/compute_interference.rs @@ -5,6 +5,7 @@ use crate::passes::interference::liveness_analysis::{handle_instr, ReadWriteOp}; use std::collections::HashMap; impl<'p> LX86VarProgram<'p> { + #[must_use] pub fn compute_interference(self) -> X86WithInterference<'p> { X86WithInterference { interference: self.build_graph(), diff --git a/compiler/src/passes/interference/liveness_analysis.rs b/compiler/src/passes/interference/liveness_analysis.rs index 2d0edd1..760527d 100644 --- a/compiler/src/passes/interference/liveness_analysis.rs +++ b/compiler/src/passes/interference/liveness_analysis.rs @@ -8,6 +8,7 @@ use std::collections::hash_map::Entry; use std::collections::{HashMap, HashSet}; impl<'p> X86Selected<'p> { + #[must_use] pub fn add_liveness(self) -> LX86VarProgram<'p> { // let graph = create_graph(&self.blocks); @@ -40,12 +41,12 @@ impl<'p> X86Selected<'p> { match liveness.get(sym) { None => { liveness.insert(*sym, new_liveness); - changed = true + changed = true; } Some(old_liveness) => { if *old_liveness != new_liveness { liveness.insert(*sym, new_liveness); - changed = true + changed = true; } } } diff --git a/compiler/src/passes/parse/grammar.lalrpop b/compiler/src/passes/parse/grammar.lalrpop index e4125ad..5e200f7 100644 --- a/compiler/src/passes/parse/grammar.lalrpop +++ b/compiler/src/passes/parse/grammar.lalrpop @@ -1,5 +1,5 @@ use std::str::FromStr; -use crate::passes::parse::*; +use crate::passes::parse::{Def, Expr, Lit, Op, Param} use crate::passes::parse::PrgParsed; use crate::passes::type_check::Type; @@ -164,13 +164,13 @@ ExprInStmt: Expr<&'input str> = { cnd: Box::new(cnd), thn: Box::new(bdy), els: Box::new(Expr::Seq { - stmt: Box::new(Expr::Break { bdy: None }), + stmt: Box::new(Expr::Break { bdy: Box::new(Expr::Lit { val: Lit::Unit }) }), cnt: Box::new(Expr::Lit { val: Lit::Unit }), }), }), }, "break" => Expr::Break { - bdy: bdy.map(Box::new), + bdy: Box::new(bdy.unwrap_or(Expr::Lit { val: Lit::Unit })), }, ExprLogicalOr, } diff --git a/compiler/src/passes/parse/grammar.rs b/compiler/src/passes/parse/grammar.rs index eef1359..977ed43 100644 --- a/compiler/src/passes/parse/grammar.rs +++ b/compiler/src/passes/parse/grammar.rs @@ -1,5 +1,5 @@ // auto-generated: "lalrpop 0.20.1" -// sha3: 19eaac2958ee7627671379b88ee4fd1bbd2700d0b51bbf42e8cfb929dab502b9 +// sha3: c9e9fedb1e07d89e4fbaef0611beb45686afea48b8df51c64ffcd5ddf109995e use std::str::FromStr; use crate::passes::parse::*; use crate::passes::parse::PrgParsed; @@ -4597,7 +4597,7 @@ fn __action18< cnd: Box::new(cnd), thn: Box::new(bdy), els: Box::new(Expr::Seq { - stmt: Box::new(Expr::Break { bdy: None }), + stmt: Box::new(Expr::Break { bdy: Box::new(Expr::Lit { val: Lit::Unit }) }), cnt: Box::new(Expr::Lit { val: Lit::Unit }), }), }), @@ -4615,7 +4615,7 @@ fn __action19< ) -> Expr<&'input str> { Expr::Break { - bdy: bdy.map(Box::new), + bdy: Box::new(bdy.unwrap_or(Expr::Lit { val: Lit::Unit })), } } diff --git a/compiler/src/passes/parse/interpreter.rs b/compiler/src/passes/parse/interpreter.rs index 15fd83b..3073be7 100644 --- a/compiler/src/passes/parse/interpreter.rs +++ b/compiler/src/passes/parse/interpreter.rs @@ -184,10 +184,7 @@ impl PrgGenericVar { } }, Expr::Break { bdy } => { - return ControlFlow::Break(match bdy { - Some(bdy) => b!(self.interpret_expr(bdy, scope, io)), - None => Val::Unit, - }) + return ControlFlow::Break(b!(self.interpret_expr(bdy, scope, io))) } Expr::Seq { stmt, cnt } => { b!(self.interpret_expr(stmt, scope, io)); diff --git a/compiler/src/passes/parse/mod.rs b/compiler/src/passes/parse/mod.rs index 043ae4b..8abe88e 100644 --- a/compiler/src/passes/parse/mod.rs +++ b/compiler/src/passes/parse/mod.rs @@ -1,5 +1,5 @@ #[rustfmt::skip] -#[allow(clippy::all)] +#[allow(clippy::all, clippy::pedantic)] mod grammar; pub mod interpreter; pub mod parse; @@ -69,7 +69,7 @@ pub enum Expr { bdy: Box>, }, Break { - bdy: Option>>, + bdy: Box>, }, Seq { stmt: Box>, @@ -113,17 +113,21 @@ pub enum Lit { } impl Lit { + #[must_use] pub fn int(self) -> i64 { - match self { - Lit::Int { val } => val, - _ => panic!(), + if let Lit::Int { val } = self { + val + } else { + panic!() } } + #[must_use] pub fn bool(self) -> bool { - match self { - Lit::Bool { val } => val, - _ => panic!(), + if let Lit::Bool { val } = self { + val + } else { + panic!() } } } @@ -134,7 +138,7 @@ mod tests { use test_each_file::test_each_file; fn parse([test]: [&str; 1]) { - split_test(test); + let _ = split_test(test); } test_each_file! { for ["test"] in "./programs/good" as parse => parse } diff --git a/compiler/src/passes/patch_instructions/patch_instructions.rs b/compiler/src/passes/patch_instructions/patch_instructions.rs index c08f627..24e573a 100644 --- a/compiler/src/passes/patch_instructions/patch_instructions.rs +++ b/compiler/src/passes/patch_instructions/patch_instructions.rs @@ -1,12 +1,8 @@ -//! This pass compiles `AX86Program`s into `PX86Program`. -//! -//! This pass makes sure that no instructions use more than one argument that is dereferenced. - use crate::language::x86var::{Arg, Block, Instr, X86Assigned, X86Patched}; use crate::{addq, movq, reg, subq}; impl<'p> X86Assigned<'p> { - /// See module-level documentation. + #[must_use] pub fn patch(self) -> X86Patched<'p> { X86Patched { blocks: self diff --git a/compiler/src/passes/reveal_functions/mod.rs b/compiler/src/passes/reveal_functions/mod.rs index 773d5d5..e62717c 100644 --- a/compiler/src/passes/reveal_functions/mod.rs +++ b/compiler/src/passes/reveal_functions/mod.rs @@ -44,7 +44,7 @@ pub enum RExpr<'p> { bdy: Box>, }, Break { - bdy: Option>>, + bdy: Box>, }, Seq { stmt: Box>, @@ -116,7 +116,7 @@ impl<'p> From> for Expr> { bdy: Box::new((*bdy).into()), }, RExpr::Break { bdy } => Expr::Break { - bdy: bdy.map(|bdy| Box::new((*bdy).into())), + bdy: Box::new((*bdy).into()), }, RExpr::Seq { stmt, cnt } => Expr::Seq { stmt: Box::new((*stmt).into()), diff --git a/compiler/src/passes/reveal_functions/reveal_functions.rs b/compiler/src/passes/reveal_functions/reveal_functions.rs index ee7e7f2..38bbdd4 100644 --- a/compiler/src/passes/reveal_functions/reveal_functions.rs +++ b/compiler/src/passes/reveal_functions/reveal_functions.rs @@ -5,6 +5,7 @@ use crate::utils::gen_sym::UniqueSym; use crate::utils::push_map::PushMap; impl<'p> PrgUniquified<'p> { + #[must_use] pub fn reveal(self) -> PrgRevealed<'p> { let mut scope = PushMap::from_iter(self.defs.keys().map(|s| (*s, ()))); @@ -76,7 +77,7 @@ fn reveal_expr<'p>(expr: Expr>, scope: &mut PushMap, bdy: Box::new(reveal_expr(*bdy, scope)), }, Expr::Break { bdy } => RExpr::Break { - bdy: bdy.map(|bdy| Box::new(reveal_expr(*bdy, scope))), + bdy: Box::new(reveal_expr(*bdy, scope)), }, Expr::Seq { stmt, cnt } => RExpr::Seq { stmt: Box::new(reveal_expr(*stmt, scope)), diff --git a/compiler/src/passes/select/io.rs b/compiler/src/passes/select/io.rs index 72af130..7710089 100644 --- a/compiler/src/passes/select/io.rs +++ b/compiler/src/passes/select/io.rs @@ -7,7 +7,7 @@ use crate::{ }; use std::collections::HashMap; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct Std<'p> { pub exit: UniqueSym<'p>, pub print_int: UniqueSym<'p>, diff --git a/compiler/src/passes/select/mod.rs b/compiler/src/passes/select/mod.rs index acdca92..14bb123 100644 --- a/compiler/src/passes/select/mod.rs +++ b/compiler/src/passes/select/mod.rs @@ -1,8 +1,3 @@ -//! This pass begins the work of translating from `CVarProgram` to `X86`. -//! The target language `X86VarProgram` of this pass is a variant of x86 that still uses variables. -//! -//! Just like a `CVarProgram` program, a `X86VarProgram` consists of a list of blocks. - pub mod io; use crate::language::x86var::{ @@ -17,7 +12,7 @@ use crate::*; use std::collections::HashMap; impl<'p> PrgExplicated<'p> { - /// See module-level documentation. + #[must_use] pub fn select(self) -> X86Selected<'p> { let mut blocks = HashMap::new(); let std = Std::new(&mut blocks); @@ -47,7 +42,7 @@ fn select_block<'p>( if let Some(params) = fn_params.get(&sym) { instrs.push(pushq!(reg!(RBP))); instrs.push(movq!(reg!(RSP), reg!(RBP))); - for reg in CALLEE_SAVED_NO_STACK.into_iter() { + for reg in CALLEE_SAVED_NO_STACK { instrs.push(pushq!(VarArg::Reg { reg })); } @@ -89,7 +84,7 @@ fn select_tail<'p>(tail: Tail<'p>, instrs: &mut Vec>>, std: cmpq!(select_atom(&args[1]), var!(tmp)), jcc!(thn, select_cmp(op)), jmp!(els), - ]) + ]); } _ => unreachable!(), }, diff --git a/compiler/src/passes/type_check/check.rs b/compiler/src/passes/type_check/check.rs index df6a8db..494dacb 100644 --- a/compiler/src/passes/type_check/check.rs +++ b/compiler/src/passes/type_check/check.rs @@ -1,7 +1,6 @@ use crate::passes::parse::{Def, Expr, Lit, Op, PrgParsed}; use crate::passes::type_check::check::TypeError::*; -use crate::passes::type_check::PrgTypeChecked; -use crate::passes::type_check::*; +use crate::passes::type_check::{PrgTypeChecked, Type}; use crate::utils::expect::expect; use crate::utils::push_map::PushMap; use miette::Diagnostic; @@ -94,7 +93,7 @@ impl<'p> PrgParsed<'p> { params.iter().map(|p| (p.sym, (p.mutable, p.typ.clone()))), |env| expect_type(bdy, typ.clone(), env), ) - .map(|_| (sym, def)), + .map(|()| (sym, def)), }) .collect::, _>>()?; @@ -126,7 +125,7 @@ fn uncover_fns<'p>(program: &PrgParsed<'p>) -> Result(program: &PrgParsed<'p>) -> Result(expr: &Expr<&'p str>, env: &mut Env<'_, 'p>) -> Result match (op, args.as_slice()) { (Op::Plus | Op::Minus | Op::Mul | Op::Mod | Op::Div, [e1, e2]) => { @@ -241,17 +240,14 @@ fn type_check_expr<'p>(expr: &Expr<&'p str>, env: &mut Env<'_, 'p>) -> Result { expect(env.in_loop, BreakOutsideLoop)?; - let bdy_type = match bdy { - None => Type::Unit, - Some(bdy) => type_check_expr(bdy, env)?, - }; + let bdy_type = type_check_expr(bdy, env)?; if let Some(loop_type) = env.loop_type { expect( *loop_type == bdy_type, TypeMismatchEqual { t1: loop_type.clone(), - t2: bdy_type.clone(), + t2: bdy_type, }, )?; } else { @@ -266,12 +262,12 @@ fn type_check_expr<'p>(expr: &Expr<&'p str>, env: &mut Env<'_, 'p>) -> Result { let (mutable, typ) = env.scope.get(sym).cloned().ok_or(UndeclaredVar { - sym: sym.to_string(), + sym: (*sym).to_string(), })?; expect( mutable, ModifyImmutable { - sym: sym.to_string(), + sym: (*sym).to_string(), }, )?; expect_type(bnd, typ, env)?; diff --git a/compiler/src/passes/uniquify/uniquify.rs b/compiler/src/passes/uniquify/uniquify.rs index bc5e823..87a1858 100644 --- a/compiler/src/passes/uniquify/uniquify.rs +++ b/compiler/src/passes/uniquify/uniquify.rs @@ -5,6 +5,7 @@ use crate::utils::gen_sym::{gen_sym, UniqueSym}; use crate::utils::push_map::PushMap; impl<'p> PrgTypeChecked<'p> { + #[must_use] pub fn uniquify(self) -> PrgUniquified<'p> { let mut scope = PushMap::from_iter(self.defs.iter().map(|(&sym, _)| (sym, gen_sym(sym)))); @@ -99,7 +100,7 @@ fn uniquify_expression<'p>( bdy: Box::new(uniquify_expression(*bdy, scope)), }, Expr::Break { bdy } => Expr::Break { - bdy: bdy.map(|bdy| Box::new(uniquify_expression(*bdy, scope))), + bdy: Box::new(uniquify_expression(*bdy, scope)), }, Expr::Seq { stmt, cnt } => Expr::Seq { stmt: Box::new(uniquify_expression(*stmt, scope)), diff --git a/compiler/src/utils/split_test.rs b/compiler/src/utils/split_test.rs index 4603565..b38033b 100644 --- a/compiler/src/utils/split_test.rs +++ b/compiler/src/utils/split_test.rs @@ -27,6 +27,7 @@ pub fn split_test_raw(test: &str) -> (Vec, Vec, Lit, &str) { (input, expected_output, expected_return, program) } +#[must_use] pub fn split_test(test: &str) -> (Vec, Vec, Lit, PrgParsed) { let (input, expected_output, expected_return, program) = split_test_raw(test); let program = parse_program(program).unwrap(); From 696c335698e956c1d4ed7cf7ecd11cedae449f63 Mon Sep 17 00:00:00 2001 From: Vlamonster Date: Mon, 30 Oct 2023 02:01:46 +0100 Subject: [PATCH 06/16] Implement continues. --- compiler/src/passes/atomize/atomize.rs | 5 +- compiler/src/passes/atomize/mod.rs | 2 + compiler/src/passes/conclude/conclude.rs | 1 + compiler/src/passes/emit/mod.rs | 1 + compiler/src/passes/explicate/explicate.rs | 11 +- compiler/src/passes/parse/grammar.lalrpop | 4 +- compiler/src/passes/parse/grammar.rs | 1251 +++++++++-------- compiler/src/passes/parse/interpreter.rs | 13 +- compiler/src/passes/parse/mod.rs | 1 + compiler/src/passes/reveal_functions/mod.rs | 2 + .../reveal_functions/reveal_functions.rs | 1 + compiler/src/passes/type_check/check.rs | 1 + compiler/src/passes/uniquify/uniquify.rs | 1 + programs/good/loops/while_continue.test | 18 + 14 files changed, 700 insertions(+), 612 deletions(-) create mode 100644 programs/good/loops/while_continue.test diff --git a/compiler/src/passes/atomize/atomize.rs b/compiler/src/passes/atomize/atomize.rs index ce9cd7c..8519724 100644 --- a/compiler/src/passes/atomize/atomize.rs +++ b/compiler/src/passes/atomize/atomize.rs @@ -4,6 +4,7 @@ use crate::passes::reveal_functions::{PrgRevealed, RExpr}; use crate::utils::gen_sym::{gen_sym, UniqueSym}; impl<'p> PrgRevealed<'p> { + #[must_use] pub fn atomize(self) -> PrgAtomized<'p> { PrgAtomized { defs: self @@ -99,6 +100,7 @@ fn atomize_expr(expr: RExpr) -> AExpr { sym, bnd: Box::new(atomize_expr(*bnd)), }, + RExpr::Continue => AExpr::Continue, } } @@ -114,7 +116,8 @@ fn atomize_atom(expr: RExpr) -> (Atom, Option<(UniqueSym, AExpr)>) { | RExpr::Break { .. } | RExpr::Seq { .. } | RExpr::Assign { .. } - | RExpr::Var { .. } => { + | RExpr::Var { .. } + | RExpr::Continue => { let tmp = gen_sym("tmp"); (Atom::Var { sym: tmp }, Some((tmp, atomize_expr(expr)))) } diff --git a/compiler/src/passes/atomize/mod.rs b/compiler/src/passes/atomize/mod.rs index d1ba761..f773ab2 100644 --- a/compiler/src/passes/atomize/mod.rs +++ b/compiler/src/passes/atomize/mod.rs @@ -43,6 +43,7 @@ pub enum AExpr<'p> { Break { bdy: Box>, }, + Continue, Seq { stmt: Box>, cnt: Box>, @@ -129,6 +130,7 @@ impl<'p> From> for Expr> { sym, bnd: Box::new((*bnd).into()), }, + AExpr::Continue => Expr::Continue, } } } diff --git a/compiler/src/passes/conclude/conclude.rs b/compiler/src/passes/conclude/conclude.rs index 6224b55..313dcac 100644 --- a/compiler/src/passes/conclude/conclude.rs +++ b/compiler/src/passes/conclude/conclude.rs @@ -3,6 +3,7 @@ use crate::utils::gen_sym::gen_sym; use crate::{addq, block, callq_direct, imm, movq, popq, pushq, reg, subq}; impl<'p> X86Patched<'p> { + #[must_use] pub fn conclude(mut self) -> X86Concluded<'p> { let entry = gen_sym("main"); self.blocks.insert( diff --git a/compiler/src/passes/emit/mod.rs b/compiler/src/passes/emit/mod.rs index b1555b7..3915c0f 100644 --- a/compiler/src/passes/emit/mod.rs +++ b/compiler/src/passes/emit/mod.rs @@ -18,6 +18,7 @@ use crate::utils::gen_sym::UniqueSym; use std::collections::HashMap; impl<'p> X86Concluded<'p> { + #[must_use] pub fn emit(self) -> (usize, Vec) { let mut machine_code = Vec::new(); diff --git a/compiler/src/passes/explicate/explicate.rs b/compiler/src/passes/explicate/explicate.rs index c0dd7be..ad7285b 100644 --- a/compiler/src/passes/explicate/explicate.rs +++ b/compiler/src/passes/explicate/explicate.rs @@ -1,4 +1,5 @@ use crate::passes::atomize::{AExpr, Atom, PrgAtomized}; +use crate::passes::explicate::Tail::Goto; use crate::passes::explicate::{CExpr, PrgExplicated, Tail}; use crate::passes::parse::{Def, Lit, Op}; use crate::utils::gen_sym::{gen_sym, UniqueSym}; @@ -8,6 +9,8 @@ struct Env<'a, 'p> { blocks: &'a mut HashMap, Tail<'p>>, /// (block to jump to, variable to write to) break_target: Option<(UniqueSym<'p>, UniqueSym<'p>)>, + /// block to jump to + continue_target: Option>, } impl<'p> PrgAtomized<'p> { @@ -17,6 +20,7 @@ impl<'p> PrgAtomized<'p> { let mut env = Env { blocks: &mut blocks, break_target: None, + continue_target: None, }; let fn_params = self @@ -111,6 +115,7 @@ fn explicate_assign<'p>( let mut env = Env { blocks: env.blocks, break_target: Some((tail, sym)), + continue_target: Some(loop_block_sym), }; let loop_block = explicate_assign( @@ -153,6 +158,9 @@ fn explicate_assign<'p>( ), env, ), + AExpr::Continue => Goto { + lbl: env.continue_target.unwrap(), + }, } } @@ -287,6 +295,7 @@ fn explicate_pred<'p>( }, } | AExpr::Assign { .. } - | AExpr::Break { .. } => unreachable!(), + | AExpr::Break { .. } + | AExpr::Continue => unreachable!(), } } diff --git a/compiler/src/passes/parse/grammar.lalrpop b/compiler/src/passes/parse/grammar.lalrpop index 5e200f7..1c29799 100644 --- a/compiler/src/passes/parse/grammar.lalrpop +++ b/compiler/src/passes/parse/grammar.lalrpop @@ -1,5 +1,5 @@ use std::str::FromStr; -use crate::passes::parse::{Def, Expr, Lit, Op, Param} +use crate::passes::parse::{Def, Expr, Lit, Op, Param}; use crate::passes::parse::PrgParsed; use crate::passes::type_check::Type; @@ -14,6 +14,7 @@ match { "loop", "while", "break", + "continue", "mut", // Structural tokens @@ -172,6 +173,7 @@ ExprInStmt: Expr<&'input str> = { "break" => Expr::Break { bdy: Box::new(bdy.unwrap_or(Expr::Lit { val: Lit::Unit })), }, + "continue" => Expr::Continue, ExprLogicalOr, } diff --git a/compiler/src/passes/parse/grammar.rs b/compiler/src/passes/parse/grammar.rs index 977ed43..1c2138e 100644 --- a/compiler/src/passes/parse/grammar.rs +++ b/compiler/src/passes/parse/grammar.rs @@ -1,7 +1,7 @@ // auto-generated: "lalrpop 0.20.1" -// sha3: c9e9fedb1e07d89e4fbaef0611beb45686afea48b8df51c64ffcd5ddf109995e +// sha3: d36163131e92e950e9b964d04df47bb8e04a6117e98beb62f6de2ce4ddb033c5 use std::str::FromStr; -use crate::passes::parse::*; +use crate::passes::parse::{Def, Expr, Lit, Op, Param}; use crate::passes::parse::PrgParsed; use crate::passes::type_check::Type; #[allow(unused_extern_crates)] @@ -16,7 +16,7 @@ extern crate alloc; mod __parse__Program { use std::str::FromStr; - use crate::passes::parse::*; + use crate::passes::parse::{Def, Expr, Lit, Op, Param}; use crate::passes::parse::PrgParsed; use crate::passes::type_check::Type; #[allow(unused_extern_crates)] @@ -50,304 +50,306 @@ mod __parse__Program { } const __ACTION: &[i16] = &[ // State 0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 2 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 3 - 0, 0, 0, 0, 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, + 0, 0, 0, 0, 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, // State 4 - 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, + 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, // State 6 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61, 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, 0, 0, 0, 0, 0, 0, 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 7 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61, 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, 0, 0, 0, 0, 0, 0, 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 8 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 9 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61, 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, 0, 0, 0, 0, 0, 0, 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 10 - 0, -54, 0, -54, 0, -54, 0, 89, -54, 90, 0, 0, 0, -54, -54, -54, 0, -54, -54, -54, 0, 0, 0, 0, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -54, -54, -54, 0, 0, + 0, -54, 0, -54, 0, -54, 0, 90, -54, 91, 0, 0, 0, -54, -54, -54, 0, -54, -54, -54, 0, 0, 0, 0, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -54, -54, -54, 0, 0, // State 11 - 0, 91, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, -64, 92, 93, 0, 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, -64, -64, 0, 0, + 0, 92, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, -64, 93, 94, 0, 95, 96, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, -64, -64, 0, 0, // State 12 - 0, 0, 0, 97, 0, -72, 0, 0, -72, 0, 0, 0, 0, -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, -72, -72, -72, 0, 0, + 0, 0, 0, 98, 0, -73, 0, 0, -73, 0, 0, 0, 0, -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, -73, -73, -73, 0, 0, // State 13 - 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, -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, -73, 98, -73, 0, 0, + 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 99, -74, 0, 0, // State 14 - 0, -76, 99, -76, 0, -76, 100, -76, -76, -76, 0, 101, 0, -76, -76, -76, 0, -76, -76, -76, 0, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -76, -76, -76, 0, 0, + 0, -77, 100, -77, 0, -77, 101, -77, -77, -77, 0, 102, 0, -77, -77, -77, 0, -77, -77, -77, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, -77, -77, 0, 0, // State 15 - 0, -86, 0, -86, 0, -86, 0, 0, -86, 0, 0, 0, 0, -86, -86, -86, 0, -86, -86, -86, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, -86, -86, 0, 0, + 0, -87, 0, -87, 0, -87, 0, 0, -87, 0, 0, 0, 0, -87, -87, -87, 0, -87, -87, -87, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, -87, -87, 0, 0, // State 16 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 17 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 18 - 79, 0, 0, 0, 18, -70, 0, 0, -70, 80, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, -70, 87, 49, + 79, 0, 0, 0, 18, -70, 0, 0, -70, 80, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, -70, 88, 49, // State 19 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 20 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, // State 21 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 22 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 23 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 24 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 25 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 26 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 27 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 28 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 29 - 79, 0, 0, 0, 18, -33, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, -33, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 30 - 79, 0, 0, 0, 18, -81, 0, 0, -81, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, -81, 87, 49, + 79, 0, 0, 0, 18, -82, 0, 0, -82, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -82, 88, 49, // State 31 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, // State 33 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 34 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 35 - 79, 0, 0, 0, 18, -35, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, -35, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 36 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 37 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 38 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 39 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 83, 84, 85, 86, 0, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 40 - 79, 0, 0, 0, 18, -78, 0, 0, -78, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, -78, 87, 49, + 79, 0, 0, 0, 18, -79, 0, 0, -79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -79, 88, 49, // State 41 - 79, 0, 0, 0, 18, -77, 0, 0, -77, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, -77, 87, 49, + 79, 0, 0, 0, 18, -78, 0, 0, -78, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -78, 88, 49, // State 42 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 81, 0, 20, 21, 82, 0, 83, 84, 85, 86, 22, 0, 0, 0, 87, 49, + 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 44 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 47 - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 48 - 0, -89, -89, -89, -89, -89, -89, -89, -89, -89, 0, -89, -89, -89, -89, -89, -89, -89, -89, -89, 0, 0, 0, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, -89, -89, 0, 0, + 0, -90, -90, -90, -90, -90, -90, -90, -90, -90, 0, -90, -90, -90, -90, -90, -90, -90, -90, -90, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, -90, -90, 0, 0, // State 49 - 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, // State 50 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 51 - 0, 0, 0, 0, 0, -36, 0, 0, 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, 0, + 0, 0, 0, 0, 0, -36, 0, 0, 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, 0, 0, // State 52 - 0, 0, 0, 0, 0, -38, 0, 0, 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, 0, + 0, 0, 0, 0, 0, -38, 0, 0, 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, 0, 0, // State 53 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, // State 54 - 0, 0, 0, 0, 0, -14, 0, 0, 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, -14, + 0, 0, 0, 0, 0, -14, 0, 0, 0, 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, -14, // State 55 - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 56 - 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, + 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, // State 57 - 0, 0, 0, 0, 0, -97, 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, + 0, 0, 0, 0, 0, -98, 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, // State 58 - 0, 0, 0, 0, 0, -103, 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, -103, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -104, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, // State 59 - 0, 0, 0, 0, 0, -102, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -103, 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, -103, 0, 0, 0, 0, // State 60 - 0, 0, 0, 0, 0, -105, 0, 0, -105, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, -106, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, 0, 0, 0, 0, // State 61 - 0, 0, 0, 0, 0, -104, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -105, 0, 0, -105, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, // State 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, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, // State 63 - 0, -56, -56, -56, -56, -56, -56, -56, -56, -56, 0, -56, 0, -56, -56, -56, 0, -56, -56, -56, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, -56, -56, 0, 0, + 0, -56, -56, -56, -56, -56, -56, -56, -56, -56, 0, -56, 0, -56, -56, -56, 0, -56, -56, -56, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, -56, -56, 0, 0, // State 64 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, // State 65 - 0, -29, 0, -29, 0, -29, 0, 0, -29, 0, 0, 0, 0, -29, -29, -29, 0, -29, -29, -29, 0, 0, 0, 0, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -29, -29, -29, 0, 0, + 0, -29, 0, -29, 0, -29, 0, 0, -29, 0, 0, 0, 0, -29, -29, -29, 0, -29, -29, -29, 0, 0, 0, 0, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -29, -29, -29, 0, 0, // State 66 - 0, -63, -63, -63, 30, -63, -63, -63, -63, -63, 0, -63, 0, -63, -63, -63, 0, -63, -63, -63, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, -63, -63, 0, 0, + 0, -63, -63, -63, 30, -63, -63, -63, -63, -63, 0, -63, 0, -63, -63, -63, 0, -63, -63, -63, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, -63, -63, 0, 0, // State 67 - 0, -85, -85, -85, 0, -85, -85, -85, -85, -85, 0, -85, 0, -85, -85, -85, 0, -85, -85, -85, 0, 0, 0, 0, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -85, -85, -85, 0, 0, + 0, -86, -86, -86, 0, -86, -86, -86, -86, -86, 0, -86, 0, -86, -86, -86, 0, -86, -86, -86, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, -86, -86, 0, 0, // State 68 - 0, 0, 0, -23, 0, -23, 0, 0, -23, 0, 0, 0, 0, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, -23, -23, 0, 0, + 0, 0, 0, -23, 0, -23, 0, 0, -23, 0, 0, 0, 0, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, -23, -23, 0, 0, // State 69 - 0, 0, 0, 0, 0, -83, 0, 0, -83, 0, 0, 0, 0, 31, 0, 0, 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, -84, 0, 0, -84, 0, 0, 0, 0, 31, 0, 0, 0, 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, // State 70 - 0, 0, 0, 0, 0, -25, 0, 0, -25, 0, 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -25, -25, -25, 0, 0, + 0, 0, 0, 0, 0, -25, 0, 0, -25, 0, 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -25, -25, -25, 0, 0, // State 71 - 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, -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, -71, 0, 0, + 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, -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, -72, 0, 0, // State 72 - 0, -19, 0, -19, 0, -19, 0, -19, -19, -19, 0, 0, 0, -19, -19, -19, 0, -19, -19, -19, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19, -19, -19, 0, 0, + 0, -19, 0, -19, 0, -19, 0, -19, -19, -19, 0, 0, 0, -19, -19, -19, 0, -19, -19, -19, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19, -19, -19, 0, 0, // State 73 - 0, 0, 0, 0, 0, -51, 0, 0, -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, 0, 0, + 0, 0, 0, 0, 0, -51, 0, 0, -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, -51, 0, 0, // State 74 - 0, -27, -27, -27, 0, -27, -27, -27, -27, -27, 0, -27, 0, -27, -27, -27, 0, -27, -27, -27, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, -27, -27, 0, 0, + 0, -27, -27, -27, 0, -27, -27, -27, -27, -27, 0, -27, 0, -27, -27, -27, 0, -27, -27, -27, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, -27, -27, 0, 0, // State 75 - 0, -21, 0, -21, 0, -21, 0, 0, -21, 0, 0, 0, 0, -21, -21, -21, 0, -21, -21, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, -21, -21, 0, 0, + 0, -21, 0, -21, 0, -21, 0, 0, -21, 0, 0, 0, 0, -21, -21, -21, 0, -21, -21, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, -21, -21, 0, 0, // State 76 - 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, 0, -58, -58, -58, 32, -58, -58, -58, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -58, 0, 0, + 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, 0, -58, -58, -58, 32, -58, -58, -58, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -58, 0, 0, // State 77 - 0, -55, -55, -55, -55, -55, -55, -55, -55, -55, 0, -55, 0, -55, -55, -55, 0, -55, -55, -55, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55, -55, -55, 0, 0, + 0, -55, -55, -55, -55, -55, -55, -55, -55, -55, 0, -55, 0, -55, -55, -55, 0, -55, -55, -55, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55, -55, -55, 0, 0, // State 78 - -107, 0, 0, 0, -107, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, -107, -107, -107, -107, 0, 0, 0, 0, -107, -107, + -108, 0, 0, 0, -108, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, -108, -108, -108, -108, 0, 0, 0, 0, -108, -108, // State 79 - -106, 0, 0, 0, -106, 0, 0, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, 0, 0, 0, 0, 0, -106, -106, -106, -106, 0, 0, 0, 0, -106, -106, + -107, 0, 0, 0, -107, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, -107, -107, -107, -107, 0, 0, 0, 0, -107, -107, // State 80 - 0, -31, -31, -31, -31, -31, -31, -31, -31, -31, 0, -31, 0, -31, -31, -31, 0, -31, -31, -31, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, -31, -31, 0, 0, + 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, -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, -71, 0, 0, // State 81 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, + 0, -31, -31, -31, -31, -31, -31, -31, -31, -31, 0, -31, 0, -31, -31, -31, 0, -31, -31, -31, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, -31, -31, 0, 0, // State 82 - 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, // State 83 - 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, // State 84 - 0, -30, -30, -30, -30, -30, -30, -30, -30, -30, 0, -30, 0, -30, -30, -30, 0, -30, -30, -30, 0, 0, 0, 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -30, -30, -30, 0, 0, + 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 85 - 0, -57, -57, -57, -57, -57, -57, -57, -57, -57, 0, -57, 0, -57, -57, -57, 0, -57, -57, -57, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, -57, -57, 0, 0, + 0, -30, -30, -30, -30, -30, -30, -30, -30, -30, 0, -30, 0, -30, -30, -30, 0, -30, -30, -30, 0, 0, 0, 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -30, -30, -30, 0, 0, // State 86 - 0, -95, -95, -95, -95, -95, -95, -95, -95, -95, 0, -95, 0, -95, -95, -95, 0, -95, -95, -95, 0, 0, 0, 0, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, -95, -95, 0, 0, + 0, -57, -57, -57, -57, -57, -57, -57, -57, -57, 0, -57, 0, -57, -57, -57, 0, -57, -57, -57, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, -57, -57, 0, 0, // State 87 - 0, 0, 0, 0, 0, -96, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -96, -96, -96, -96, -96, -96, -96, -96, -96, 0, -96, 0, -96, -96, -96, 0, -96, -96, -96, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, -96, -96, 0, 0, // State 88 - -16, 0, 0, 0, -16, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, -16, -16, -16, -16, 0, 0, 0, 0, -16, -16, + 0, 0, 0, 0, 0, -97, 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, 0, // State 89 - -17, 0, 0, 0, -17, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, -17, -17, -17, -17, 0, 0, 0, 0, -17, -17, + -16, 0, 0, 0, -16, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, -16, -16, -16, -16, 0, 0, 0, 0, -16, -16, // State 90 - -41, 0, 0, 0, -41, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, -41, -41, -41, -41, 0, 0, 0, 0, -41, -41, + -17, 0, 0, 0, -17, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, -17, -17, -17, -17, 0, 0, 0, 0, -17, -17, // State 91 - -44, 0, 0, 0, -44, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, -44, -44, -44, -44, 0, 0, 0, 0, -44, -44, + -41, 0, 0, 0, -41, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, -41, -41, -41, -41, 0, 0, 0, 0, -41, -41, // State 92 - -45, 0, 0, 0, -45, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, -45, -45, -45, -45, 0, 0, 0, 0, -45, -45, + -44, 0, 0, 0, -44, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, -44, -44, -44, -44, 0, 0, 0, 0, -44, -44, // State 93 - -40, 0, 0, 0, -40, 0, 0, 0, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -40, 0, 0, 0, 0, 0, -40, -40, -40, -40, 0, 0, 0, 0, -40, -40, + -45, 0, 0, 0, -45, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, -45, -45, -45, -45, 0, 0, 0, 0, -45, -45, // State 94 - -42, 0, 0, 0, -42, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, -42, -42, -42, -42, 0, 0, 0, 0, -42, -42, + -40, 0, 0, 0, -40, 0, 0, 0, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -40, 0, 0, 0, 0, 0, -40, -40, -40, -40, 0, 0, 0, 0, -40, -40, // State 95 - -43, 0, 0, 0, -43, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, -43, -43, -43, -43, 0, 0, 0, 0, -43, -43, + -42, 0, 0, 0, -42, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, -42, -42, -42, -42, 0, 0, 0, 0, -42, -42, // State 96 - -90, 0, 0, 0, -90, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, -90, -90, -90, -90, 0, 0, 0, 0, -90, -90, + -43, 0, 0, 0, -43, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, -43, -43, -43, -43, 0, 0, 0, 0, -43, -43, // State 97 - -91, 0, 0, 0, -91, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, -91, -91, -91, -91, 0, 0, 0, 0, -91, -91, + -91, 0, 0, 0, -91, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, -91, -91, -91, -91, 0, 0, 0, 0, -91, -91, // State 98 - -94, 0, 0, 0, -94, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, -94, -94, -94, -94, 0, 0, 0, 0, -94, -94, + -92, 0, 0, 0, -92, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, -92, -92, -92, -92, 0, 0, 0, 0, -92, -92, // State 99 - -92, 0, 0, 0, -92, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, -92, -92, -92, -92, 0, 0, 0, 0, -92, -92, + -95, 0, 0, 0, -95, 0, 0, 0, 0, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, 0, 0, 0, 0, 0, -95, -95, -95, -95, 0, 0, 0, 0, -95, -95, // State 100 - -93, 0, 0, 0, -93, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, -93, -93, -93, -93, 0, 0, 0, 0, -93, -93, + -93, 0, 0, 0, -93, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, -93, -93, -93, -93, 0, 0, 0, 0, -93, -93, // State 101 - -108, 0, 0, 0, -108, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, -108, -108, -108, -108, 0, 0, 0, 0, -108, -108, + -94, 0, 0, 0, -94, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, -94, -94, -94, -94, 0, 0, 0, 0, -94, -94, // State 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, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -109, 0, 0, 0, -109, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, -109, -109, -109, -109, 0, 0, 0, 0, -109, -109, // State 103 - 0, -84, -84, -84, 0, -84, -84, -84, -84, -84, 0, -84, 0, -84, -84, -84, 0, -84, -84, -84, 0, 0, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 104 - 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, 0, -58, -58, -58, 0, -58, -58, -58, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -58, -58, 0, 0, + 0, -85, -85, -85, 0, -85, -85, -85, -85, -85, 0, -85, 0, -85, -85, -85, 0, -85, -85, -85, 0, 0, 0, 0, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -85, -85, -85, 0, 0, // State 105 - 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, 0, -58, -58, -58, 0, -58, -58, -58, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -58, -58, 0, 0, // State 106 - 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, + 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, // State 108 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, // State 109 - 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 110 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 111 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, // State 112 - 0, -18, 0, -18, 0, -18, 0, -18, -18, -18, 0, 0, 0, -18, -18, -18, 0, -18, -18, -18, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, -18, -18, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, // State 113 - 0, -20, 0, -20, 0, -20, 0, 0, -20, 0, 0, 0, 0, -20, -20, -20, 0, -20, -20, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, -20, -20, 0, 0, + 0, -18, 0, -18, 0, -18, 0, -18, -18, -18, 0, 0, 0, -18, -18, -18, 0, -18, -18, -18, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, -18, -18, 0, 0, // State 114 - 0, 0, 0, -22, 0, -22, 0, 0, -22, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, -22, -22, 0, 0, + 0, -20, 0, -20, 0, -20, 0, 0, -20, 0, 0, 0, 0, -20, -20, -20, 0, -20, -20, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, -20, -20, 0, 0, // State 115 - 0, 0, 0, 0, 0, -24, 0, 0, -24, 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, -24, -24, -24, 0, 0, + 0, 0, 0, -22, 0, -22, 0, 0, -22, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, -22, -22, 0, 0, // State 116 - 0, -26, -26, -26, 0, -26, -26, -26, -26, -26, 0, -26, 0, -26, -26, -26, 0, -26, -26, -26, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, -26, -26, 0, 0, + 0, 0, 0, 0, 0, -24, 0, 0, -24, 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, -24, -24, -24, 0, 0, // State 117 - 0, -28, 0, -28, 0, -28, 0, 0, -28, 0, 0, 0, 0, -28, -28, -28, 0, -28, -28, -28, 0, 0, 0, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -28, -28, -28, 0, 0, + 0, -26, -26, -26, 0, -26, -26, -26, -26, -26, 0, -26, 0, -26, -26, -26, 0, -26, -26, -26, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, -26, -26, 0, 0, // State 118 - 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -28, 0, -28, 0, -28, 0, 0, -28, 0, 0, 0, 0, -28, -28, -28, 0, -28, -28, -28, 0, 0, 0, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -28, -28, -28, 0, 0, // State 119 - 0, 0, 0, 0, 0, -32, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 120 - 0, 0, 0, 0, 0, -82, 0, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, 0, 0, + 0, 0, 0, 0, 0, -32, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 121 - 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, -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, -65, 0, 0, + 0, 0, 0, 0, 0, -83, 0, 0, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -83, 0, 0, // State 122 - 0, -59, -59, -59, -59, -59, -59, -59, -59, -59, 0, -59, 0, -59, -59, -59, 0, -59, -59, -59, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, -59, -59, 0, 0, + 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, -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, -65, 0, 0, // State 123 - 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, -59, -59, -59, -59, -59, -59, -59, -59, -59, 0, -59, 0, -59, -59, -59, 0, -59, -59, -59, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, -59, -59, 0, 0, // State 124 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 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, // State 125 - 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, // State 126 - 0, -60, -60, -60, 0, -60, -60, -60, -60, -60, 0, -60, 0, -60, -60, -60, 0, -60, -60, -60, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, -60, -60, 0, 0, + 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, 0, 0, 0, 0, 0, // State 127 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -60, -60, -60, 0, -60, -60, -60, -60, -60, 0, -60, 0, -60, -60, -60, 0, -60, -60, -60, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, -60, -60, 0, 0, // State 128 - 0, 0, 0, 0, 0, -34, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 129 - 0, -62, -62, -62, 0, -62, -62, -62, -62, -62, 0, -62, 0, -62, -62, -62, 0, -62, -62, -62, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, -62, -62, 0, 0, + 0, 0, 0, 0, 0, -34, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 130 - -9, 0, 0, 0, -9, -9, 0, 0, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9, 0, -9, 0, -9, -9, -9, 0, -9, -9, -9, -9, -9, 0, 0, 0, -9, -9, + 0, -62, -62, -62, 0, -62, -62, -62, -62, -62, 0, -62, 0, -62, -62, -62, 0, -62, -62, -62, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, -62, -62, 0, 0, // State 131 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, + -9, 0, 0, 0, -9, -9, 0, 0, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9, -9, 0, -9, 0, -9, -9, -9, 0, -9, -9, -9, -9, -9, 0, 0, 0, -9, -9, // State 132 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, // State 133 - 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, -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, -67, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 134 - 0, -61, -61, -61, 0, -61, -61, -61, -61, -61, 0, -61, 0, -61, -61, -61, 0, -61, -61, -61, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, -61, -61, 0, 0, + 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, -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, -67, 0, 0, // State 135 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -61, -61, -61, 0, -61, -61, -61, -61, -61, 0, -61, 0, -61, -61, -61, 0, -61, -61, -61, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, -61, -61, 0, 0, // State 136 - -10, 0, 0, 0, -10, -10, 0, 0, 0, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10, 0, -10, 0, -10, -10, -10, 0, -10, -10, -10, -10, -10, 0, 0, 0, -10, -10, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 137 - 0, 0, 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, + -10, 0, 0, 0, -10, -10, 0, 0, 0, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10, -10, 0, -10, 0, -10, -10, -10, 0, -10, -10, -10, -10, -10, 0, 0, 0, -10, -10, // State 138 - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 139 - 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 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, // State 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, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, // State 141 - 0, 0, 0, 0, 0, -80, 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, -80, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, // State 142 - 0, 0, 0, 0, 0, -79, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, 0, 0, + 0, 0, 0, 0, 0, -81, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -81, 0, 0, // State 143 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, + 0, 0, 0, 0, 0, -80, 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, -80, 0, 0, // State 144 - 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, -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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, + // State 145 + 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, -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, -66, 0, 0, ]; fn __action(state: i16, integer: usize) -> i16 { - __ACTION[(state as usize) * 43 + integer] + __ACTION[(state as usize) * 44 + integer] } const __EOF_ACTION: &[i16] = &[ // State 0 - -100, - // State 1 -101, + // State 1 + -102, // State 2 0, // State 3 @@ -435,7 +437,7 @@ mod __parse__Program { // State 44 -46, // State 45 - -109, + -110, // State 46 -50, // State 47 @@ -549,9 +551,9 @@ mod __parse__Program { // State 101 0, // State 102 - -88, - // State 103 0, + // State 103 + -89, // State 104 0, // State 105 @@ -599,9 +601,9 @@ mod __parse__Program { // State 126 0, // State 127 - -87, - // State 128 0, + // State 128 + -88, // State 129 0, // State 130 @@ -634,6 +636,8 @@ mod __parse__Program { 0, // State 144 0, + // State 145 + 0, ]; fn __goto(state: i16, nt: usize) -> i16 { match nt { @@ -647,7 +651,7 @@ mod __parse__Program { 14 => 14, 15 => 15, 16 => 63, - 17 => 118, + 17 => 119, 18 => 49, 19 => 24, 20 => match state { @@ -656,58 +660,58 @@ mod __parse__Program { }, 22 => 1, 23 => match state { - 17 => 105, - 22 => 111, - 29 => 119, - 33 => 124, - 34 => 125, - 35 => 128, - 36 => 131, - 38 => 135, - 42 => 143, + 17 => 106, + 22 => 112, + 29 => 120, + 33 => 125, + 34 => 126, + 35 => 129, + 36 => 132, + 38 => 136, + 42 => 144, _ => 64, }, 25 => match state { - 28 => 117, + 28 => 118, _ => 65, }, 26 => 66, 27 => 67, 28 => match state { - 25 => 114, + 25 => 115, _ => 68, }, 29 => 69, 30 => match state { - 26 => 115, + 26 => 116, _ => 70, }, 31 => match state { - 18 => 106, - 19 => 107, - 21 => 110, - 31 => 121, - 37 => 132, - 39 => 138, + 18 => 107, + 19 => 108, + 21 => 111, + 31 => 122, + 37 => 133, + 39 => 139, _ => 71, }, 33 => match state { - 23 => 112, + 23 => 113, _ => 72, }, 34 => match state { - 30 => 120, - 40 => 141, - 41 => 142, + 30 => 121, + 40 => 142, + 41 => 143, _ => 73, }, 35 => match state { - 16 => 103, - 27 => 116, + 16 => 104, + 27 => 117, _ => 74, }, 36 => match state { - 24 => 113, + 24 => 114, _ => 75, }, 37 => 44, @@ -715,9 +719,9 @@ mod __parse__Program { 2 => 47, 3..=4 => 50, 5 => 55, - 16 | 18..=19 | 21 | 23..=28 | 31 | 37 | 39 => 104, - 20 => 108, - 32 => 123, + 16 | 18..=19 | 21 | 23..=28 | 31 | 37 | 39 => 105, + 20 => 109, + 32 => 124, _ => 76, }, 39 => 25, @@ -731,7 +735,7 @@ mod __parse__Program { 45 => 45, 46 => match state { 7 => 62, - 9 => 87, + 9 => 88, _ => 57, }, 47 => 16, @@ -766,6 +770,7 @@ mod __parse__Program { r###""Unit""###, r###""^""###, r###""break""###, + r###""continue""###, r###""else""###, r###""false""###, r###""fn""###, @@ -851,7 +856,7 @@ mod __parse__Program { #[inline] fn error_action(&self, state: i16) -> i16 { - __action(state, 43 - 1) + __action(state, 44 - 1) } #[inline] @@ -959,8 +964,9 @@ mod __parse__Program { Token(41, _) if true => Some(38), Token(42, _) if true => Some(39), Token(43, _) if true => Some(40), - Token(0, _) if true => Some(41), - Token(1, _) if true => Some(42), + Token(44, _) if true => Some(41), + Token(0, _) if true => Some(42), + Token(1, _) if true => Some(43), _ => None, } } @@ -973,8 +979,8 @@ mod __parse__Program { ) -> __Symbol<'input> { #[allow(clippy::manual_range_patterns)]match __token_index { - 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 => match __token { - Token(3, __tok0) | Token(4, __tok0) | Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(0, __tok0) | Token(1, __tok0) if true => __Symbol::Variant0(__tok0), + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 => match __token { + Token(3, __tok0) | Token(4, __tok0) | Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(0, __tok0) | Token(1, __tok0) if true => __Symbol::Variant0(__tok0), _ => unreachable!(), }, _ => unreachable!(), @@ -1417,127 +1423,127 @@ mod __parse__Program { 71 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 30, + nonterminal_produced: 29, } } 72 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 31, + nonterminal_produced: 30, } } 73 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 32, + nonterminal_produced: 31, } } 74 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 1, nonterminal_produced: 32, } } 75 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 0, + nonterminal_produced: 32, + } + } + 76 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 33, } } - 76 => { + 77 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 6, nonterminal_produced: 34, } } - 77 => { + 78 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 5, nonterminal_produced: 34, } } - 78 => { + 79 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 7, nonterminal_produced: 34, } } - 79 => { + 80 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 6, nonterminal_produced: 34, } } - 80 => { + 81 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, nonterminal_produced: 34, } } - 81 => { + 82 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, nonterminal_produced: 34, } } - 82 => { + 83 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 34, } } - 83 => { + 84 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, nonterminal_produced: 35, } } - 84 => { + 85 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 35, } } - 85 => { + 86 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 36, } } - 86 => { + 87 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 10, nonterminal_produced: 37, } } - 87 => { + 88 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 8, nonterminal_produced: 37, } } - 88 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 38, - } - } 89 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 39, + nonterminal_produced: 38, } } 90 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 40, + nonterminal_produced: 39, } } 91 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 41, + nonterminal_produced: 40, } } 92 => { @@ -1555,49 +1561,49 @@ mod __parse__Program { 94 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 42, + nonterminal_produced: 41, } } 95 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 43, + states_to_pop: 1, + nonterminal_produced: 42, } } 96 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 4, nonterminal_produced: 43, } } 97 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 44, + states_to_pop: 3, + nonterminal_produced: 43, } } 98 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 1, nonterminal_produced: 44, } } 99 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 0, - nonterminal_produced: 45, + nonterminal_produced: 44, } } 100 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 0, nonterminal_produced: 45, } } 101 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 46, + nonterminal_produced: 45, } } 102 => { @@ -1621,7 +1627,7 @@ mod __parse__Program { 105 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 47, + nonterminal_produced: 46, } } 106 => { @@ -1631,12 +1637,18 @@ mod __parse__Program { } } 107 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 47, + } + } + 108 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 48, } } - 108 => __state_machine::SimulatedReduce::Accept, + 109 => __state_machine::SimulatedReduce::Accept, _ => panic!("invalid reduction index {}", __reduce_index) } } @@ -2043,6 +2055,9 @@ mod __parse__Program { __reduce107(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 108 => { + __reduce108(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 109 => { // __Program = Program => ActionFn(0); let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0; @@ -2270,11 +2285,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // "mut"? = "mut" => ActionFn(73); + // "mut"? = "mut" => ActionFn(74); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action73::<>(input, __sym0); + let __nt = super::__action74::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (1, 0) } @@ -2287,10 +2302,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // "mut"? = => ActionFn(74); + // "mut"? = => ActionFn(75); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action74::<>(input, &__start, &__end); + let __nt = super::__action75::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (0, 0) } @@ -2303,13 +2318,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" ) = "->", Type => ActionFn(77); + // ("->" ) = "->", Type => ActionFn(78); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant2(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action77::<>(input, __sym0, __sym1); + let __nt = super::__action78::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 1) } @@ -2322,13 +2337,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" )? = "->", Type => ActionFn(103); + // ("->" )? = "->", Type => ActionFn(104); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant2(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action103::<>(input, __sym0, __sym1); + let __nt = super::__action104::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 2) } @@ -2341,10 +2356,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" )? = => ActionFn(76); + // ("->" )? = => ActionFn(77); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action76::<>(input, &__start, &__end); + let __nt = super::__action77::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (0, 2) } @@ -2357,13 +2372,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Expr, "," => ActionFn(92); + // ( ",") = Expr, "," => ActionFn(93); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action92::<>(input, __sym0, __sym1); + let __nt = super::__action93::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 3) } @@ -2376,10 +2391,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(90); + // ( ",")* = => ActionFn(91); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action90::<>(input, &__start, &__end); + let __nt = super::__action91::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (0, 4) } @@ -2392,11 +2407,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(91); + // ( ",")* = ( ",")+ => ActionFn(92); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action91::<>(input, __sym0); + let __nt = super::__action92::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (1, 4) } @@ -2409,13 +2424,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(106); + // ( ",")+ = Expr, "," => ActionFn(107); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action106::<>(input, __sym0, __sym1); + let __nt = super::__action107::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (2, 5) } @@ -2428,14 +2443,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(107); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(108); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action107::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action108::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (3, 5) } @@ -2448,13 +2463,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Param, "," => ActionFn(87); + // ( ",") = Param, "," => ActionFn(88); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action87::<>(input, __sym0, __sym1); + let __nt = super::__action88::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (2, 6) } @@ -2467,10 +2482,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(85); + // ( ",")* = => ActionFn(86); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action85::<>(input, &__start, &__end); + let __nt = super::__action86::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (0, 7) } @@ -2483,11 +2498,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(86); + // ( ",")* = ( ",")+ => ActionFn(87); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action86::<>(input, __sym0); + let __nt = super::__action87::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 7) } @@ -2500,13 +2515,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Param, "," => ActionFn(110); + // ( ",")+ = Param, "," => ActionFn(111); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action110::<>(input, __sym0, __sym1); + let __nt = super::__action111::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (2, 8) } @@ -2519,14 +2534,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Param, "," => ActionFn(111); + // ( ",")+ = ( ",")+, Param, "," => ActionFn(112); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant6(__symbols); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action111::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action112::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (3, 8) } @@ -2539,11 +2554,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // AdditiveOp = "+" => ActionFn(36); + // AdditiveOp = "+" => ActionFn(37); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action36::<>(input, __sym0); + let __nt = super::__action37::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 9) } @@ -2556,11 +2571,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // AdditiveOp = "-" => ActionFn(37); + // AdditiveOp = "-" => ActionFn(38); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action37::<>(input, __sym0); + let __nt = super::__action38::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 9) } @@ -2573,14 +2588,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, AdditiveOp, ExprMultiplicative => ActionFn(61); + // BinaryOps = BinaryOps, AdditiveOp, ExprMultiplicative => ActionFn(62); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 10) } @@ -2593,11 +2608,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprMultiplicative => ActionFn(62); + // BinaryOps = ExprMultiplicative => ActionFn(63); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action62::<>(input, __sym0); + let __nt = super::__action63::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 10) } @@ -2610,14 +2625,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, ComparativeOp, ExprXor => ActionFn(65); + // BinaryOps = BinaryOps, ComparativeOp, ExprXor => ActionFn(66); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 11) } @@ -2630,11 +2645,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprXor => ActionFn(66); + // BinaryOps = ExprXor => ActionFn(67); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action66::<>(input, __sym0); + let __nt = super::__action67::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 11) } @@ -2647,14 +2662,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, LogicalAndOp, ExprComparative => ActionFn(67); + // BinaryOps = BinaryOps, LogicalAndOp, ExprComparative => ActionFn(68); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 12) } @@ -2667,11 +2682,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprComparative => ActionFn(68); + // BinaryOps = ExprComparative => ActionFn(69); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action68::<>(input, __sym0); + let __nt = super::__action69::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 12) } @@ -2684,14 +2699,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, LogicalOrOp, ExprLogicalAnd => ActionFn(69); + // BinaryOps = BinaryOps, LogicalOrOp, ExprLogicalAnd => ActionFn(70); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 13) } @@ -2704,11 +2719,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprLogicalAnd => ActionFn(70); + // BinaryOps = ExprLogicalAnd => ActionFn(71); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action70::<>(input, __sym0); + let __nt = super::__action71::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 13) } @@ -2721,14 +2736,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, MultiplicativeOp, ExprUnary => ActionFn(59); + // BinaryOps = BinaryOps, MultiplicativeOp, ExprUnary => ActionFn(60); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 14) } @@ -2741,11 +2756,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprUnary => ActionFn(60); + // BinaryOps = ExprUnary => ActionFn(61); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action60::<>(input, __sym0); + let __nt = super::__action61::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 14) } @@ -2758,14 +2773,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, XorOp, ExprAdditive => ActionFn(63); + // BinaryOps = BinaryOps, XorOp, ExprAdditive => ActionFn(64); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 15) } @@ -2778,11 +2793,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprAdditive => ActionFn(64); + // BinaryOps = ExprAdditive => ActionFn(65); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action64::<>(input, __sym0); + let __nt = super::__action65::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 15) } @@ -2795,11 +2810,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Bool = "true" => ActionFn(56); + // Bool = "true" => ActionFn(57); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action56::<>(input, __sym0); + let __nt = super::__action57::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 16) } @@ -2812,11 +2827,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Bool = "false" => ActionFn(57); + // Bool = "false" => ActionFn(58); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action57::<>(input, __sym0); + let __nt = super::__action58::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 16) } @@ -2829,11 +2844,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(116); + // Comma = Expr => ActionFn(117); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action116::<>(input, __sym0); + let __nt = super::__action117::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (1, 17) } @@ -2846,10 +2861,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(117); + // Comma = => ActionFn(118); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action117::<>(input, &__start, &__end); + let __nt = super::__action118::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (0, 17) } @@ -2862,13 +2877,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(118); + // Comma = ( ",")+, Expr => ActionFn(119); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action118::<>(input, __sym0, __sym1); + let __nt = super::__action119::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (2, 17) } @@ -2881,11 +2896,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(119); + // Comma = ( ",")+ => ActionFn(120); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action119::<>(input, __sym0); + let __nt = super::__action120::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (1, 17) } @@ -2898,11 +2913,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Param => ActionFn(122); + // Comma = Param => ActionFn(123); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action122::<>(input, __sym0); + let __nt = super::__action123::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (1, 18) } @@ -2915,10 +2930,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(123); + // Comma = => ActionFn(124); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action123::<>(input, &__start, &__end); + let __nt = super::__action124::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (0, 18) } @@ -2931,13 +2946,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Param => ActionFn(124); + // Comma = ( ",")+, Param => ActionFn(125); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant6(__symbols); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action124::<>(input, __sym0, __sym1); + let __nt = super::__action125::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (2, 18) } @@ -2950,11 +2965,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(125); + // Comma = ( ",")+ => ActionFn(126); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action125::<>(input, __sym0); + let __nt = super::__action126::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (1, 18) } @@ -2967,11 +2982,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "==" => ActionFn(29); + // ComparativeOp = "==" => ActionFn(30); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action29::<>(input, __sym0); + let __nt = super::__action30::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -2984,11 +2999,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "!=" => ActionFn(30); + // ComparativeOp = "!=" => ActionFn(31); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action30::<>(input, __sym0); + let __nt = super::__action31::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -3001,11 +3016,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = ">" => ActionFn(31); + // ComparativeOp = ">" => ActionFn(32); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action31::<>(input, __sym0); + let __nt = super::__action32::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -3018,11 +3033,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = ">=" => ActionFn(32); + // ComparativeOp = ">=" => ActionFn(33); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action32::<>(input, __sym0); + let __nt = super::__action33::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -3035,11 +3050,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "<" => ActionFn(33); + // ComparativeOp = "<" => ActionFn(34); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action33::<>(input, __sym0); + let __nt = super::__action34::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -3052,11 +3067,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "<=" => ActionFn(34); + // ComparativeOp = "<=" => ActionFn(35); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action34::<>(input, __sym0); + let __nt = super::__action35::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -3086,10 +3101,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def* = => ActionFn(79); + // Def* = => ActionFn(80); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action79::<>(input, &__start, &__end); + let __nt = super::__action80::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (0, 21) } @@ -3102,11 +3117,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def* = Def+ => ActionFn(80); + // Def* = Def+ => ActionFn(81); let __sym0 = __pop_Variant13(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action80::<>(input, __sym0); + let __nt = super::__action81::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 21) } @@ -3119,11 +3134,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def+ = Def => ActionFn(81); + // Def+ = Def => ActionFn(82); let __sym0 = __pop_Variant12(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action81::<>(input, __sym0); + let __nt = super::__action82::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 22) } @@ -3136,13 +3151,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def+ = Def+, Def => ActionFn(82); + // Def+ = Def+, Def => ActionFn(83); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant12(__symbols); let __sym0 = __pop_Variant13(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action82::<>(input, __sym0, __sym1); + let __nt = super::__action83::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (2, 22) } @@ -3172,11 +3187,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = Expr => ActionFn(88); + // Expr? = Expr => ActionFn(89); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action88::<>(input, __sym0); + let __nt = super::__action89::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 24) } @@ -3189,10 +3204,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = => ActionFn(89); + // Expr? = => ActionFn(90); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action89::<>(input, &__start, &__end); + let __nt = super::__action90::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (0, 24) } @@ -3205,11 +3220,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAdditive = BinaryOps => ActionFn(25); + // ExprAdditive = BinaryOps => ActionFn(26); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action25::<>(input, __sym0); + let __nt = super::__action26::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 25) } @@ -3222,11 +3237,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Num => ActionFn(49); + // ExprAtom = Num => ActionFn(50); let __sym0 = __pop_Variant15(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action49::<>(input, __sym0); + let __nt = super::__action50::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 26) } @@ -3239,11 +3254,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Bool => ActionFn(50); + // ExprAtom = Bool => ActionFn(51); let __sym0 = __pop_Variant9(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action50::<>(input, __sym0); + let __nt = super::__action51::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 26) } @@ -3256,11 +3271,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = "unit" => ActionFn(51); + // ExprAtom = "unit" => ActionFn(52); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action51::<>(input, __sym0); + let __nt = super::__action52::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 26) } @@ -3273,11 +3288,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Ident => ActionFn(52); + // ExprAtom = Ident => ActionFn(53); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action52::<>(input, __sym0); + let __nt = super::__action53::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 26) } @@ -3290,14 +3305,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = "(", Expr, ")" => ActionFn(53); + // ExprAtom = "(", Expr, ")" => ActionFn(54); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action53::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 26) } @@ -3310,14 +3325,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = "read", "(", ")" => ActionFn(45); + // ExprCall = "read", "(", ")" => ActionFn(46); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 27) } @@ -3330,7 +3345,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = "print", "(", Expr, ")" => ActionFn(46); + // ExprCall = "print", "(", Expr, ")" => ActionFn(47); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant4(__symbols); @@ -3338,7 +3353,7 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (4, 27) } @@ -3351,7 +3366,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = ExprAtom, "(", Comma, ")" => ActionFn(47); + // ExprCall = ExprAtom, "(", Comma, ")" => ActionFn(48); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant10(__symbols); @@ -3359,7 +3374,7 @@ mod __parse__Program { let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (4, 27) } @@ -3372,11 +3387,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = ExprAtom => ActionFn(48); + // ExprCall = ExprAtom => ActionFn(49); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action48::<>(input, __sym0); + let __nt = super::__action49::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 27) } @@ -3389,11 +3404,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprComparative = BinaryOps => ActionFn(23); + // ExprComparative = BinaryOps => ActionFn(24); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 28) } @@ -3495,13 +3510,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "break", ExprLogicalOr => ActionFn(120); + // ExprInStmt = "break", ExprLogicalOr => ActionFn(121); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action120::<>(input, __sym0, __sym1); + let __nt = super::__action121::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 29) } @@ -3514,11 +3529,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "break" => ActionFn(121); + // ExprInStmt = "break" => ActionFn(122); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action121::<>(input, __sym0); + let __nt = super::__action122::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 29) } @@ -3531,8 +3546,8 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = ExprLogicalOr => ActionFn(20); - let __sym0 = __pop_Variant4(__symbols); + // ExprInStmt = "continue" => ActionFn(20); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action20::<>(input, __sym0); @@ -3548,13 +3563,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalAnd = BinaryOps => ActionFn(22); + // ExprInStmt = ExprLogicalOr => ActionFn(21); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action22::<>(input, __sym0); + let __nt = super::__action21::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 30) + (1, 29) } fn __reduce72< 'input, @@ -3565,13 +3580,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr = BinaryOps => ActionFn(21); + // ExprLogicalAnd = BinaryOps => ActionFn(23); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action23::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 31) + (1, 30) } fn __reduce73< 'input, @@ -3582,15 +3597,32 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr? = ExprLogicalOr => ActionFn(71); + // ExprLogicalOr = BinaryOps => ActionFn(22); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action71::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + (1, 31) + } + fn __reduce74< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ExprLogicalOr? = ExprLogicalOr => ActionFn(72); + let __sym0 = __pop_Variant4(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action72::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 32) } - fn __reduce74< + fn __reduce75< 'input, >( input: &'input str, @@ -3599,14 +3631,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr? = => ActionFn(72); + // ExprLogicalOr? = => ActionFn(73); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action72::<>(input, &__start, &__end); + let __nt = super::__action73::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (0, 32) } - fn __reduce75< + fn __reduce76< 'input, >( input: &'input str, @@ -3615,15 +3647,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprMultiplicative = BinaryOps => ActionFn(26); + // ExprMultiplicative = BinaryOps => ActionFn(27); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action26::<>(input, __sym0); + let __nt = super::__action27::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 33) } - fn __reduce76< + fn __reduce77< 'input, >( input: &'input str, @@ -3632,7 +3664,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";" => ActionFn(97); + // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";" => ActionFn(98); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant4(__symbols); @@ -3642,11 +3674,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action97::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action98::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (6, 34) } - fn __reduce77< + fn __reduce78< 'input, >( input: &'input str, @@ -3655,7 +3687,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";" => ActionFn(98); + // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";" => ActionFn(99); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant4(__symbols); @@ -3664,11 +3696,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action98::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action99::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (5, 34) } - fn __reduce78< + fn __reduce79< 'input, >( input: &'input str, @@ -3677,7 +3709,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(99); + // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(100); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant4(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -3688,11 +3720,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action99::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action100::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (7, 34) } - fn __reduce79< + fn __reduce80< 'input, >( input: &'input str, @@ -3701,7 +3733,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(100); + // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(101); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant4(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -3711,11 +3743,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action100::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action101::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (6, 34) } - fn __reduce80< + fn __reduce81< 'input, >( input: &'input str, @@ -3734,7 +3766,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 34) } - fn __reduce81< + fn __reduce82< 'input, >( input: &'input str, @@ -3754,7 +3786,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 34) } - fn __reduce82< + fn __reduce83< 'input, >( input: &'input str, @@ -3771,7 +3803,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 34) } - fn __reduce83< + fn __reduce84< 'input, >( input: &'input str, @@ -3780,17 +3812,17 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprUnary = UnaryOp, ExprUnary => ActionFn(43); + // ExprUnary = UnaryOp, ExprUnary => ActionFn(44); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action43::<>(input, __sym0, __sym1); + let __nt = super::__action44::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 35) } - fn __reduce84< + fn __reduce85< 'input, >( input: &'input str, @@ -3799,15 +3831,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprUnary = ExprCall => ActionFn(44); + // ExprUnary = ExprCall => ActionFn(45); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action44::<>(input, __sym0); + let __nt = super::__action45::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 35) } - fn __reduce85< + fn __reduce86< 'input, >( input: &'input str, @@ -3816,15 +3848,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprXor = BinaryOps => ActionFn(24); + // ExprXor = BinaryOps => ActionFn(25); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action24::<>(input, __sym0); + let __nt = super::__action25::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 36) } - fn __reduce86< + fn __reduce87< 'input, >( input: &'input str, @@ -3833,7 +3865,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Fn = "fn", Ident, "(", Comma, ")", "->", Type, "{", Expr, "}" => ActionFn(104); + // Fn = "fn", Ident, "(", Comma, ")", "->", Type, "{", Expr, "}" => ActionFn(105); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant4(__symbols); @@ -3847,11 +3879,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym9.2; - let __nt = super::__action104::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action105::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (10, 37) } - fn __reduce87< + fn __reduce88< 'input, >( input: &'input str, @@ -3860,7 +3892,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Fn = "fn", Ident, "(", Comma, ")", "{", Expr, "}" => ActionFn(105); + // Fn = "fn", Ident, "(", Comma, ")", "{", Expr, "}" => ActionFn(106); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant4(__symbols); @@ -3872,11 +3904,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action105::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action106::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (8, 37) } - fn __reduce88< + fn __reduce89< 'input, >( input: &'input str, @@ -3885,15 +3917,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[_a-zA-Z][_a-zA-Z0-9]*"# => ActionFn(54); + // Ident = r#"[_a-zA-Z][_a-zA-Z0-9]*"# => ActionFn(55); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action54::<>(input, __sym0); + let __nt = super::__action55::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant0(__nt), __end)); (1, 38) } - fn __reduce89< + fn __reduce90< 'input, >( input: &'input str, @@ -3902,15 +3934,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // LogicalAndOp = "&&" => ActionFn(28); + // LogicalAndOp = "&&" => ActionFn(29); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action28::<>(input, __sym0); + let __nt = super::__action29::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 39) } - fn __reduce90< + fn __reduce91< 'input, >( input: &'input str, @@ -3919,15 +3951,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // LogicalOrOp = "||" => ActionFn(27); + // LogicalOrOp = "||" => ActionFn(28); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action27::<>(input, __sym0); + let __nt = super::__action28::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 40) } - fn __reduce91< + fn __reduce92< 'input, >( input: &'input str, @@ -3936,15 +3968,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "*" => ActionFn(38); + // MultiplicativeOp = "*" => ActionFn(39); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action38::<>(input, __sym0); + let __nt = super::__action39::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 41) } - fn __reduce92< + fn __reduce93< 'input, >( input: &'input str, @@ -3953,15 +3985,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "/" => ActionFn(39); + // MultiplicativeOp = "/" => ActionFn(40); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action39::<>(input, __sym0); + let __nt = super::__action40::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 41) } - fn __reduce93< + fn __reduce94< 'input, >( input: &'input str, @@ -3970,15 +4002,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "%" => ActionFn(40); + // MultiplicativeOp = "%" => ActionFn(41); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action40::<>(input, __sym0); + let __nt = super::__action41::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 41) } - fn __reduce94< + fn __reduce95< 'input, >( input: &'input str, @@ -3987,15 +4019,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"[0-9]+"# => ActionFn(55); + // Num = r#"[0-9]+"# => ActionFn(56); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action55::<>(input, __sym0); + let __nt = super::__action56::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (1, 42) } - fn __reduce95< + fn __reduce96< 'input, >( input: &'input str, @@ -4004,7 +4036,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param = "mut", Ident, ":", Type => ActionFn(101); + // Param = "mut", Ident, ":", Type => ActionFn(102); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant2(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -4012,11 +4044,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action101::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action102::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (4, 43) } - fn __reduce96< + fn __reduce97< 'input, >( input: &'input str, @@ -4025,18 +4057,18 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param = Ident, ":", Type => ActionFn(102); + // Param = Ident, ":", Type => ActionFn(103); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant2(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action102::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action103::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (3, 43) } - fn __reduce97< + fn __reduce98< 'input, >( input: &'input str, @@ -4045,15 +4077,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param? = Param => ActionFn(83); + // Param? = Param => ActionFn(84); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action83::<>(input, __sym0); + let __nt = super::__action84::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); (1, 44) } - fn __reduce98< + fn __reduce99< 'input, >( input: &'input str, @@ -4062,14 +4094,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param? = => ActionFn(84); + // Param? = => ActionFn(85); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action84::<>(input, &__start, &__end); + let __nt = super::__action85::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); (0, 44) } - fn __reduce99< + fn __reduce100< 'input, >( input: &'input str, @@ -4078,14 +4110,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Program = => ActionFn(114); + // Program = => ActionFn(115); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action114::<>(input, &__start, &__end); + let __nt = super::__action115::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); (0, 45) } - fn __reduce100< + fn __reduce101< 'input, >( input: &'input str, @@ -4094,15 +4126,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Program = Def+ => ActionFn(115); + // Program = Def+ => ActionFn(116); let __sym0 = __pop_Variant13(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action115::<>(input, __sym0); + let __nt = super::__action116::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); (1, 45) } - fn __reduce101< + fn __reduce102< 'input, >( input: &'input str, @@ -4119,7 +4151,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 46) } - fn __reduce102< + fn __reduce103< 'input, >( input: &'input str, @@ -4136,7 +4168,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 46) } - fn __reduce103< + fn __reduce104< 'input, >( input: &'input str, @@ -4153,7 +4185,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 46) } - fn __reduce104< + fn __reduce105< 'input, >( input: &'input str, @@ -4170,7 +4202,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 46) } - fn __reduce105< + fn __reduce106< 'input, >( input: &'input str, @@ -4179,15 +4211,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UnaryOp = "-" => ActionFn(41); + // UnaryOp = "-" => ActionFn(42); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action41::<>(input, __sym0); + let __nt = super::__action42::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 47) } - fn __reduce106< + fn __reduce107< 'input, >( input: &'input str, @@ -4196,15 +4228,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UnaryOp = "!" => ActionFn(42); + // UnaryOp = "!" => ActionFn(43); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action42::<>(input, __sym0); + let __nt = super::__action43::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 47) } - fn __reduce107< + fn __reduce108< 'input, >( input: &'input str, @@ -4213,11 +4245,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // XorOp = "^" => ActionFn(35); + // XorOp = "^" => ActionFn(36); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action35::<>(input, __sym0); + let __nt = super::__action36::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 48) } @@ -4227,7 +4259,7 @@ pub use self::__parse__Program::ProgramParser; mod __intern_token { #![allow(unused_imports)] use std::str::FromStr; - use crate::passes::parse::*; + use crate::passes::parse::{Def, Expr, Lit, Op, Param}; use crate::passes::parse::PrgParsed; use crate::passes::type_check::Type; #[allow(unused_extern_crates)] @@ -4267,6 +4299,7 @@ mod __intern_token { ("(?:Unit)", false), ("\\^", false), ("(?:break)", false), + ("(?:continue)", false), ("(?:else)", false), ("(?:false)", false), ("(?:fn)", false), @@ -4625,10 +4658,10 @@ fn __action20< 'input, >( input: &'input str, - (_, __0, _): (usize, Expr<&'input str>, usize), + (_, __0, _): (usize, &'input str, usize), ) -> Expr<&'input str> { - __0 + Expr::Continue } #[allow(unused_variables)] @@ -4709,10 +4742,10 @@ fn __action27< 'input, >( input: &'input str, - (_, __0, _): (usize, &'input str, usize), -) -> Op + (_, __0, _): (usize, Expr<&'input str>, usize), +) -> Expr<&'input str> { - Op::LOr + __0 } #[allow(unused_variables)] @@ -4724,7 +4757,7 @@ fn __action28< (_, __0, _): (usize, &'input str, usize), ) -> Op { - Op::LAnd + Op::LOr } #[allow(unused_variables)] @@ -4736,7 +4769,7 @@ fn __action29< (_, __0, _): (usize, &'input str, usize), ) -> Op { - Op::EQ + Op::LAnd } #[allow(unused_variables)] @@ -4748,7 +4781,7 @@ fn __action30< (_, __0, _): (usize, &'input str, usize), ) -> Op { - Op::NE + Op::EQ } #[allow(unused_variables)] @@ -4760,7 +4793,7 @@ fn __action31< (_, __0, _): (usize, &'input str, usize), ) -> Op { - Op::GT + Op::NE } #[allow(unused_variables)] @@ -4772,7 +4805,7 @@ fn __action32< (_, __0, _): (usize, &'input str, usize), ) -> Op { - Op::GE + Op::GT } #[allow(unused_variables)] @@ -4784,7 +4817,7 @@ fn __action33< (_, __0, _): (usize, &'input str, usize), ) -> Op { - Op::LT + Op::GE } #[allow(unused_variables)] @@ -4796,7 +4829,7 @@ fn __action34< (_, __0, _): (usize, &'input str, usize), ) -> Op { - Op::LE + Op::LT } #[allow(unused_variables)] @@ -4808,7 +4841,7 @@ fn __action35< (_, __0, _): (usize, &'input str, usize), ) -> Op { - Op::Xor + Op::LE } #[allow(unused_variables)] @@ -4820,7 +4853,7 @@ fn __action36< (_, __0, _): (usize, &'input str, usize), ) -> Op { - Op::Plus + Op::Xor } #[allow(unused_variables)] @@ -4832,7 +4865,7 @@ fn __action37< (_, __0, _): (usize, &'input str, usize), ) -> Op { - Op::Minus + Op::Plus } #[allow(unused_variables)] @@ -4844,7 +4877,7 @@ fn __action38< (_, __0, _): (usize, &'input str, usize), ) -> Op { - Op::Mul + Op::Minus } #[allow(unused_variables)] @@ -4856,7 +4889,7 @@ fn __action39< (_, __0, _): (usize, &'input str, usize), ) -> Op { - Op::Div + Op::Mul } #[allow(unused_variables)] @@ -4868,7 +4901,7 @@ fn __action40< (_, __0, _): (usize, &'input str, usize), ) -> Op { - Op::Mod + Op::Div } #[allow(unused_variables)] @@ -4880,7 +4913,7 @@ fn __action41< (_, __0, _): (usize, &'input str, usize), ) -> Op { - Op::Minus + Op::Mod } #[allow(unused_variables)] @@ -4892,13 +4925,25 @@ fn __action42< (_, __0, _): (usize, &'input str, usize), ) -> Op { - Op::Not + Op::Minus } #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] fn __action43< 'input, +>( + input: &'input str, + (_, __0, _): (usize, &'input str, usize), +) -> Op +{ + Op::Not +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] +fn __action44< + 'input, >( input: &'input str, (_, op, _): (usize, Op, usize), @@ -4913,7 +4958,7 @@ fn __action43< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action44< +fn __action45< 'input, >( input: &'input str, @@ -4925,7 +4970,7 @@ fn __action44< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action45< +fn __action46< 'input, >( input: &'input str, @@ -4942,7 +4987,7 @@ fn __action45< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action46< +fn __action47< 'input, >( input: &'input str, @@ -4960,7 +5005,7 @@ fn __action46< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action47< +fn __action48< 'input, >( input: &'input str, @@ -4978,7 +5023,7 @@ fn __action47< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action48< +fn __action49< 'input, >( input: &'input str, @@ -4990,7 +5035,7 @@ fn __action48< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action49< +fn __action50< 'input, >( input: &'input str, @@ -5002,7 +5047,7 @@ fn __action49< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action50< +fn __action51< 'input, >( input: &'input str, @@ -5014,7 +5059,7 @@ fn __action50< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action51< +fn __action52< 'input, >( input: &'input str, @@ -5026,7 +5071,7 @@ fn __action51< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action52< +fn __action53< 'input, >( input: &'input str, @@ -5038,7 +5083,7 @@ fn __action52< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action53< +fn __action54< 'input, >( input: &'input str, @@ -5052,7 +5097,7 @@ fn __action53< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action54< +fn __action55< 'input, >( input: &'input str, @@ -5064,7 +5109,7 @@ fn __action54< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action55< +fn __action56< 'input, >( input: &'input str, @@ -5076,7 +5121,7 @@ fn __action55< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action56< +fn __action57< 'input, >( input: &'input str, @@ -5088,7 +5133,7 @@ fn __action56< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action57< +fn __action58< 'input, >( input: &'input str, @@ -5100,7 +5145,7 @@ fn __action57< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action58< +fn __action59< 'input, >( input: &'input str, @@ -5120,7 +5165,7 @@ fn __action58< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action59< +fn __action60< 'input, >( input: &'input str, @@ -5137,7 +5182,7 @@ fn __action59< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action60< +fn __action61< 'input, >( input: &'input str, @@ -5149,7 +5194,7 @@ fn __action60< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action61< +fn __action62< 'input, >( input: &'input str, @@ -5166,7 +5211,7 @@ fn __action61< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action62< +fn __action63< 'input, >( input: &'input str, @@ -5178,7 +5223,7 @@ fn __action62< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action63< +fn __action64< 'input, >( input: &'input str, @@ -5195,7 +5240,7 @@ fn __action63< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action64< +fn __action65< 'input, >( input: &'input str, @@ -5207,7 +5252,7 @@ fn __action64< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action65< +fn __action66< 'input, >( input: &'input str, @@ -5224,7 +5269,7 @@ fn __action65< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action66< +fn __action67< 'input, >( input: &'input str, @@ -5236,7 +5281,7 @@ fn __action66< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action67< +fn __action68< 'input, >( input: &'input str, @@ -5253,7 +5298,7 @@ fn __action67< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action68< +fn __action69< 'input, >( input: &'input str, @@ -5265,7 +5310,7 @@ fn __action68< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action69< +fn __action70< 'input, >( input: &'input str, @@ -5282,7 +5327,7 @@ fn __action69< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action70< +fn __action71< 'input, >( input: &'input str, @@ -5294,7 +5339,7 @@ fn __action70< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action71< +fn __action72< 'input, >( input: &'input str, @@ -5306,7 +5351,7 @@ fn __action71< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action72< +fn __action73< 'input, >( input: &'input str, @@ -5319,7 +5364,7 @@ fn __action72< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action73< +fn __action74< 'input, >( input: &'input str, @@ -5331,7 +5376,7 @@ fn __action73< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action74< +fn __action75< 'input, >( input: &'input str, @@ -5344,7 +5389,7 @@ fn __action74< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action75< +fn __action76< 'input, >( input: &'input str, @@ -5356,7 +5401,7 @@ fn __action75< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action76< +fn __action77< 'input, >( input: &'input str, @@ -5369,7 +5414,7 @@ fn __action76< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action77< +fn __action78< 'input, >( input: &'input str, @@ -5382,7 +5427,7 @@ fn __action77< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action78< +fn __action79< 'input, >( input: &'input str, @@ -5402,7 +5447,7 @@ fn __action78< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action79< +fn __action80< 'input, >( input: &'input str, @@ -5415,7 +5460,7 @@ fn __action79< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action80< +fn __action81< 'input, >( input: &'input str, @@ -5427,7 +5472,7 @@ fn __action80< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action81< +fn __action82< 'input, >( input: &'input str, @@ -5439,7 +5484,7 @@ fn __action81< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action82< +fn __action83< 'input, >( input: &'input str, @@ -5452,7 +5497,7 @@ fn __action82< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action83< +fn __action84< 'input, >( input: &'input str, @@ -5464,7 +5509,7 @@ fn __action83< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action84< +fn __action85< 'input, >( input: &'input str, @@ -5477,7 +5522,7 @@ fn __action84< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action85< +fn __action86< 'input, >( input: &'input str, @@ -5490,7 +5535,7 @@ fn __action85< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action86< +fn __action87< 'input, >( input: &'input str, @@ -5502,7 +5547,7 @@ fn __action86< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action87< +fn __action88< 'input, >( input: &'input str, @@ -5515,7 +5560,7 @@ fn __action87< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action88< +fn __action89< 'input, >( input: &'input str, @@ -5527,7 +5572,7 @@ fn __action88< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action89< +fn __action90< 'input, >( input: &'input str, @@ -5540,7 +5585,7 @@ fn __action89< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action90< +fn __action91< 'input, >( input: &'input str, @@ -5553,7 +5598,7 @@ fn __action90< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action91< +fn __action92< 'input, >( input: &'input str, @@ -5565,7 +5610,7 @@ fn __action91< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action92< +fn __action93< 'input, >( input: &'input str, @@ -5578,7 +5623,7 @@ fn __action92< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action93< +fn __action94< 'input, >( input: &'input str, @@ -5590,7 +5635,7 @@ fn __action93< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action94< +fn __action95< 'input, >( input: &'input str, @@ -5603,7 +5648,7 @@ fn __action94< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action95< +fn __action96< 'input, >( input: &'input str, @@ -5615,7 +5660,7 @@ fn __action95< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action96< +fn __action97< 'input, >( input: &'input str, @@ -5629,7 +5674,7 @@ fn __action96< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action97< +fn __action98< 'input, >( input: &'input str, @@ -5643,7 +5688,7 @@ fn __action97< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action73( + let __temp0 = __action74( input, __1, ); @@ -5662,7 +5707,7 @@ fn __action97< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action98< +fn __action99< 'input, >( input: &'input str, @@ -5675,7 +5720,7 @@ fn __action98< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action74( + let __temp0 = __action75( input, &__start0, &__end0, @@ -5695,7 +5740,7 @@ fn __action98< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action99< +fn __action100< 'input, >( input: &'input str, @@ -5710,7 +5755,7 @@ fn __action99< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action73( + let __temp0 = __action74( input, __1, ); @@ -5730,7 +5775,7 @@ fn __action99< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action100< +fn __action101< 'input, >( input: &'input str, @@ -5744,7 +5789,7 @@ fn __action100< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action74( + let __temp0 = __action75( input, &__start0, &__end0, @@ -5765,7 +5810,7 @@ fn __action100< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action101< +fn __action102< 'input, >( input: &'input str, @@ -5777,7 +5822,7 @@ fn __action101< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action73( + let __temp0 = __action74( input, __0, ); @@ -5794,7 +5839,7 @@ fn __action101< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action102< +fn __action103< 'input, >( input: &'input str, @@ -5805,7 +5850,7 @@ fn __action102< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action74( + let __temp0 = __action75( input, &__start0, &__end0, @@ -5823,7 +5868,7 @@ fn __action102< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action103< +fn __action104< 'input, >( input: &'input str, @@ -5833,13 +5878,13 @@ fn __action103< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action77( + let __temp0 = __action78( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action75( + __action76( input, __temp0, ) @@ -5848,7 +5893,7 @@ fn __action103< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action104< +fn __action105< 'input, >( input: &'input str, @@ -5866,7 +5911,7 @@ fn __action104< { let __start0 = __5.0; let __end0 = __6.2; - let __temp0 = __action103( + let __temp0 = __action104( input, __5, __6, @@ -5889,7 +5934,7 @@ fn __action104< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action105< +fn __action106< 'input, >( input: &'input str, @@ -5905,7 +5950,7 @@ fn __action105< { let __start0 = __4.2; let __end0 = __5.0; - let __temp0 = __action76( + let __temp0 = __action77( input, &__start0, &__end0, @@ -5928,7 +5973,7 @@ fn __action105< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action106< +fn __action107< 'input, >( input: &'input str, @@ -5938,13 +5983,13 @@ fn __action106< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action92( + let __temp0 = __action93( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action93( + __action94( input, __temp0, ) @@ -5953,7 +5998,7 @@ fn __action106< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action107< +fn __action108< 'input, >( input: &'input str, @@ -5964,13 +6009,13 @@ fn __action107< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action92( + let __temp0 = __action93( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action94( + __action95( input, __0, __temp0, @@ -5980,7 +6025,7 @@ fn __action107< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action108< +fn __action109< 'input, >( input: &'input str, @@ -5989,13 +6034,13 @@ fn __action108< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action90( + let __temp0 = __action91( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action58( + __action59( input, __temp0, __0, @@ -6005,7 +6050,7 @@ fn __action108< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action109< +fn __action110< 'input, >( input: &'input str, @@ -6015,12 +6060,12 @@ fn __action109< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action91( + let __temp0 = __action92( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action58( + __action59( input, __temp0, __1, @@ -6030,7 +6075,7 @@ fn __action109< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action110< +fn __action111< 'input, >( input: &'input str, @@ -6040,13 +6085,13 @@ fn __action110< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action87( + let __temp0 = __action88( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action95( + __action96( input, __temp0, ) @@ -6055,7 +6100,7 @@ fn __action110< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action111< +fn __action112< 'input, >( input: &'input str, @@ -6066,13 +6111,13 @@ fn __action111< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action87( + let __temp0 = __action88( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action96( + __action97( input, __0, __temp0, @@ -6082,7 +6127,7 @@ fn __action111< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action112< +fn __action113< 'input, >( input: &'input str, @@ -6091,13 +6136,13 @@ fn __action112< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action85( + let __temp0 = __action86( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action78( + __action79( input, __temp0, __0, @@ -6107,7 +6152,7 @@ fn __action112< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action113< +fn __action114< 'input, >( input: &'input str, @@ -6117,12 +6162,12 @@ fn __action113< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action86( + let __temp0 = __action87( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action78( + __action79( input, __temp0, __1, @@ -6132,7 +6177,7 @@ fn __action113< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action114< +fn __action115< 'input, >( input: &'input str, @@ -6142,7 +6187,7 @@ fn __action114< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action79( + let __temp0 = __action80( input, &__start0, &__end0, @@ -6157,7 +6202,7 @@ fn __action114< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action115< +fn __action116< 'input, >( input: &'input str, @@ -6166,7 +6211,7 @@ fn __action115< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action80( + let __temp0 = __action81( input, __0, ); @@ -6180,7 +6225,7 @@ fn __action115< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action116< +fn __action117< 'input, >( input: &'input str, @@ -6189,12 +6234,12 @@ fn __action116< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action88( + let __temp0 = __action89( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action108( + __action109( input, __temp0, ) @@ -6203,7 +6248,7 @@ fn __action116< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action117< +fn __action118< 'input, >( input: &'input str, @@ -6213,13 +6258,13 @@ fn __action117< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action89( + let __temp0 = __action90( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action108( + __action109( input, __temp0, ) @@ -6228,7 +6273,7 @@ fn __action117< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action118< +fn __action119< 'input, >( input: &'input str, @@ -6238,12 +6283,12 @@ fn __action118< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action88( + let __temp0 = __action89( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action109( + __action110( input, __0, __temp0, @@ -6253,7 +6298,7 @@ fn __action118< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action119< +fn __action120< 'input, >( input: &'input str, @@ -6262,13 +6307,13 @@ fn __action119< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action89( + let __temp0 = __action90( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action109( + __action110( input, __0, __temp0, @@ -6278,7 +6323,7 @@ fn __action119< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action120< +fn __action121< 'input, >( input: &'input str, @@ -6288,7 +6333,7 @@ fn __action120< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action71( + let __temp0 = __action72( input, __1, ); @@ -6303,7 +6348,7 @@ fn __action120< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action121< +fn __action122< 'input, >( input: &'input str, @@ -6312,7 +6357,7 @@ fn __action121< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action72( + let __temp0 = __action73( input, &__start0, &__end0, @@ -6328,7 +6373,7 @@ fn __action121< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action122< +fn __action123< 'input, >( input: &'input str, @@ -6337,12 +6382,12 @@ fn __action122< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action83( + let __temp0 = __action84( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action112( + __action113( input, __temp0, ) @@ -6351,7 +6396,7 @@ fn __action122< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action123< +fn __action124< 'input, >( input: &'input str, @@ -6361,13 +6406,13 @@ fn __action123< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action84( + let __temp0 = __action85( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action112( + __action113( input, __temp0, ) @@ -6376,7 +6421,7 @@ fn __action123< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action124< +fn __action125< 'input, >( input: &'input str, @@ -6386,12 +6431,12 @@ fn __action124< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action83( + let __temp0 = __action84( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action113( + __action114( input, __0, __temp0, @@ -6401,7 +6446,7 @@ fn __action124< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action125< +fn __action126< 'input, >( input: &'input str, @@ -6410,13 +6455,13 @@ fn __action125< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action84( + let __temp0 = __action85( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action113( + __action114( input, __0, __temp0, diff --git a/compiler/src/passes/parse/interpreter.rs b/compiler/src/passes/parse/interpreter.rs index 3073be7..c7904de 100644 --- a/compiler/src/passes/parse/interpreter.rs +++ b/compiler/src/passes/parse/interpreter.rs @@ -9,13 +9,14 @@ use std::hash::Hash; pub enum ControlFlow { Val(Val), Break(Val), + Continue, } impl ControlFlow { pub fn val(self) -> Val { match self { ControlFlow::Val(v) => v, - ControlFlow::Break(_) => panic!("Sterf"), + ControlFlow::Break(_) | ControlFlow::Continue => panic!("Sterf"), } } } @@ -24,8 +25,8 @@ macro_rules! b { ($e: expr) => {{ let e = $e; match e { - ControlFlow::Break(_) => return e, - ControlFlow::Val(x) => x, + ControlFlow::Break(_) | ControlFlow::Continue => return e, + ControlFlow::Val(val) => val, } }}; } @@ -178,9 +179,8 @@ impl PrgGenericVar { self.interpret_fn(sym, args, scope, io) } Expr::Loop { bdy } => loop { - let x = self.interpret_expr(bdy, scope, io); - if let ControlFlow::Break(x) = x { - return ControlFlow::Val(x); + if let ControlFlow::Break(val) = self.interpret_expr(bdy, scope, io) { + return ControlFlow::Val(val); } }, Expr::Break { bdy } => { @@ -195,6 +195,7 @@ impl PrgGenericVar { scope.0.insert(*sym, bnd); Val::Unit } + Expr::Continue => return ControlFlow::Continue, }) } } diff --git a/compiler/src/passes/parse/mod.rs b/compiler/src/passes/parse/mod.rs index 8abe88e..3de8e1b 100644 --- a/compiler/src/passes/parse/mod.rs +++ b/compiler/src/passes/parse/mod.rs @@ -71,6 +71,7 @@ pub enum Expr { Break { bdy: Box>, }, + Continue, Seq { stmt: Box>, cnt: Box>, diff --git a/compiler/src/passes/reveal_functions/mod.rs b/compiler/src/passes/reveal_functions/mod.rs index e62717c..67fac95 100644 --- a/compiler/src/passes/reveal_functions/mod.rs +++ b/compiler/src/passes/reveal_functions/mod.rs @@ -46,6 +46,7 @@ pub enum RExpr<'p> { Break { bdy: Box>, }, + Continue, Seq { stmt: Box>, cnt: Box>, @@ -126,6 +127,7 @@ impl<'p> From> for Expr> { sym, bnd: Box::new((*bnd).into()), }, + RExpr::Continue => Expr::Continue, } } } diff --git a/compiler/src/passes/reveal_functions/reveal_functions.rs b/compiler/src/passes/reveal_functions/reveal_functions.rs index 38bbdd4..a1b4679 100644 --- a/compiler/src/passes/reveal_functions/reveal_functions.rs +++ b/compiler/src/passes/reveal_functions/reveal_functions.rs @@ -87,5 +87,6 @@ fn reveal_expr<'p>(expr: Expr>, scope: &mut PushMap, sym, bnd: Box::new(reveal_expr(*bnd, scope)), }, + Expr::Continue => RExpr::Continue, } } diff --git a/compiler/src/passes/type_check/check.rs b/compiler/src/passes/type_check/check.rs index 494dacb..942bc3f 100644 --- a/compiler/src/passes/type_check/check.rs +++ b/compiler/src/passes/type_check/check.rs @@ -273,6 +273,7 @@ fn type_check_expr<'p>(expr: &Expr<&'p str>, env: &mut Env<'_, 'p>) -> Result Ok(Type::Never), } } diff --git a/compiler/src/passes/uniquify/uniquify.rs b/compiler/src/passes/uniquify/uniquify.rs index 87a1858..a629212 100644 --- a/compiler/src/passes/uniquify/uniquify.rs +++ b/compiler/src/passes/uniquify/uniquify.rs @@ -110,5 +110,6 @@ fn uniquify_expression<'p>( sym: scope[sym], bnd: Box::new(uniquify_expression(*bnd, scope)), }, + Expr::Continue => Expr::Continue, } } diff --git a/programs/good/loops/while_continue.test b/programs/good/loops/while_continue.test new file mode 100644 index 0000000..d5b1507 --- /dev/null +++ b/programs/good/loops/while_continue.test @@ -0,0 +1,18 @@ +1 2 3 4 5 6 7 8 9 10 0 +# +# +30 +# +fn main() -> Int { + let mut x = 0; + let mut sum = 0; + while (x = read(); x != 0) { + if x % 2 == 0 { + unit + } else { + continue; + }; + sum = sum + x + }; + sum +} From 564bcd5cb793ae36d35ab95cff62fca4477c3daf Mon Sep 17 00:00:00 2001 From: Vlamonster Date: Mon, 30 Oct 2023 02:25:08 +0100 Subject: [PATCH 07/16] Implement if without else. --- compiler/src/passes/parse/grammar.lalrpop | 5 + compiler/src/passes/parse/grammar.rs | 1011 +++++++++++---------- programs/good/loops/while_continue.test | 4 +- 3 files changed, 537 insertions(+), 483 deletions(-) diff --git a/compiler/src/passes/parse/grammar.lalrpop b/compiler/src/passes/parse/grammar.lalrpop index 1c29799..4f45afa 100644 --- a/compiler/src/passes/parse/grammar.lalrpop +++ b/compiler/src/passes/parse/grammar.lalrpop @@ -157,6 +157,11 @@ ExprInStmt: Expr<&'input str> = { thn: Box::new(thn), els: Box::new(els), }, + "if" "{" "}" => Expr::If { + cnd: Box::new(cnd), + thn: Box::new(thn), + els: Box::new(Expr::Lit { val: Lit::Unit }), + }, "loop" "{" "}" => Expr::Loop { bdy: Box::new(bdy), }, diff --git a/compiler/src/passes/parse/grammar.rs b/compiler/src/passes/parse/grammar.rs index 1c2138e..c5727d6 100644 --- a/compiler/src/passes/parse/grammar.rs +++ b/compiler/src/passes/parse/grammar.rs @@ -1,5 +1,5 @@ // auto-generated: "lalrpop 0.20.1" -// sha3: d36163131e92e950e9b964d04df47bb8e04a6117e98beb62f6de2ce4ddb033c5 +// sha3: d69707b1434726d2bb476e4c466ebf3b3d22100461d5638e682d23b8515ccd3a use std::str::FromStr; use crate::passes::parse::{Def, Expr, Lit, Op, Param}; use crate::passes::parse::PrgParsed; @@ -74,19 +74,19 @@ mod __parse__Program { // State 11 0, 92, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, -64, 93, 94, 0, 95, 96, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, -64, -64, 0, 0, // State 12 - 0, 0, 0, 98, 0, -73, 0, 0, -73, 0, 0, 0, 0, -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, -73, -73, -73, 0, 0, + 0, 0, 0, 98, 0, -74, 0, 0, -74, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, -74, -74, 0, 0, // State 13 - 0, 0, 0, 0, 0, -74, 0, 0, -74, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, 99, -74, 0, 0, + 0, 0, 0, 0, 0, -75, 0, 0, -75, 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, -75, 99, -75, 0, 0, // State 14 - 0, -77, 100, -77, 0, -77, 101, -77, -77, -77, 0, 102, 0, -77, -77, -77, 0, -77, -77, -77, 0, 0, 0, 0, -77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -77, -77, -77, 0, 0, + 0, -78, 100, -78, 0, -78, 101, -78, -78, -78, 0, 102, 0, -78, -78, -78, 0, -78, -78, -78, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, -78, -78, 0, 0, // State 15 - 0, -87, 0, -87, 0, -87, 0, 0, -87, 0, 0, 0, 0, -87, -87, -87, 0, -87, -87, -87, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, -87, -87, 0, 0, + 0, -88, 0, -88, 0, -88, 0, 0, -88, 0, 0, 0, 0, -88, -88, -88, 0, -88, -88, -88, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -88, -88, -88, 0, 0, // State 16 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 17 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 18 - 79, 0, 0, 0, 18, -70, 0, 0, -70, 80, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, -70, 88, 49, + 79, 0, 0, 0, 18, -71, 0, 0, -71, 80, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, -71, 88, 49, // State 19 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 20 @@ -110,7 +110,7 @@ mod __parse__Program { // State 29 79, 0, 0, 0, 18, -33, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 30 - 79, 0, 0, 0, 18, -82, 0, 0, -82, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -82, 88, 49, + 79, 0, 0, 0, 18, -83, 0, 0, -83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -83, 88, 49, // State 31 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 32 @@ -130,9 +130,9 @@ mod __parse__Program { // State 39 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 40 - 79, 0, 0, 0, 18, -79, 0, 0, -79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -79, 88, 49, + 79, 0, 0, 0, 18, -80, 0, 0, -80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -80, 88, 49, // State 41 - 79, 0, 0, 0, 18, -78, 0, 0, -78, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -78, 88, 49, + 79, 0, 0, 0, 18, -79, 0, 0, -79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -79, 88, 49, // State 42 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 43 @@ -146,7 +146,7 @@ mod __parse__Program { // State 47 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 48 - 0, -90, -90, -90, -90, -90, -90, -90, -90, -90, 0, -90, -90, -90, -90, -90, -90, -90, -90, -90, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, -90, -90, 0, 0, + 0, -91, -91, -91, -91, -91, -91, -91, -91, -91, 0, -91, -91, -91, -91, -91, -91, -91, -91, -91, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, -91, -91, 0, 0, // State 49 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, // State 50 @@ -164,15 +164,15 @@ mod __parse__Program { // State 56 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, // State 57 - 0, 0, 0, 0, 0, -98, 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, + 0, 0, 0, 0, 0, -99, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 58 - 0, 0, 0, 0, 0, -104, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -105, 0, 0, -105, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, // State 59 - 0, 0, 0, 0, 0, -103, 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, -103, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -104, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, // State 60 - 0, 0, 0, 0, 0, -106, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -107, 0, 0, -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, 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, // State 61 - 0, 0, 0, 0, 0, -105, 0, 0, -105, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, -106, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, 0, 0, 0, 0, // State 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, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, // State 63 @@ -184,15 +184,15 @@ mod __parse__Program { // State 66 0, -63, -63, -63, 30, -63, -63, -63, -63, -63, 0, -63, 0, -63, -63, -63, 0, -63, -63, -63, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, -63, -63, 0, 0, // State 67 - 0, -86, -86, -86, 0, -86, -86, -86, -86, -86, 0, -86, 0, -86, -86, -86, 0, -86, -86, -86, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, -86, -86, 0, 0, + 0, -87, -87, -87, 0, -87, -87, -87, -87, -87, 0, -87, 0, -87, -87, -87, 0, -87, -87, -87, 0, 0, 0, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, -87, -87, 0, 0, // State 68 0, 0, 0, -23, 0, -23, 0, 0, -23, 0, 0, 0, 0, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, -23, -23, 0, 0, // State 69 - 0, 0, 0, 0, 0, -84, 0, 0, -84, 0, 0, 0, 0, 31, 0, 0, 0, 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, -85, 0, 0, -85, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -85, 0, 0, // State 70 0, 0, 0, 0, 0, -25, 0, 0, -25, 0, 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -25, -25, -25, 0, 0, // State 71 - 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, -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, -72, 0, 0, + 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, -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, -73, 0, 0, // State 72 0, -19, 0, -19, 0, -19, 0, -19, -19, -19, 0, 0, 0, -19, -19, -19, 0, -19, -19, -19, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19, -19, -19, 0, 0, // State 73 @@ -206,11 +206,11 @@ mod __parse__Program { // State 77 0, -55, -55, -55, -55, -55, -55, -55, -55, -55, 0, -55, 0, -55, -55, -55, 0, -55, -55, -55, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55, -55, -55, 0, 0, // State 78 - -108, 0, 0, 0, -108, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, -108, -108, -108, -108, 0, 0, 0, 0, -108, -108, + -109, 0, 0, 0, -109, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, -109, -109, -109, -109, 0, 0, 0, 0, -109, -109, // State 79 - -107, 0, 0, 0, -107, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, 0, -107, -107, -107, -107, 0, 0, 0, 0, -107, -107, + -108, 0, 0, 0, -108, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, -108, -108, -108, -108, 0, 0, 0, 0, -108, -108, // State 80 - 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, -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, -71, 0, 0, + 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, -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, -72, 0, 0, // State 81 0, -31, -31, -31, -31, -31, -31, -31, -31, -31, 0, -31, 0, -31, -31, -31, 0, -31, -31, -31, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, -31, -31, 0, 0, // State 82 @@ -224,9 +224,9 @@ mod __parse__Program { // State 86 0, -57, -57, -57, -57, -57, -57, -57, -57, -57, 0, -57, 0, -57, -57, -57, 0, -57, -57, -57, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, -57, -57, 0, 0, // State 87 - 0, -96, -96, -96, -96, -96, -96, -96, -96, -96, 0, -96, 0, -96, -96, -96, 0, -96, -96, -96, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, -96, -96, 0, 0, + 0, -97, -97, -97, -97, -97, -97, -97, -97, -97, 0, -97, 0, -97, -97, -97, 0, -97, -97, -97, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, -97, -97, 0, 0, // State 88 - 0, 0, 0, 0, 0, -97, 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, 0, + 0, 0, 0, 0, 0, -98, 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, // State 89 -16, 0, 0, 0, -16, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, -16, -16, -16, -16, 0, 0, 0, 0, -16, -16, // State 90 @@ -244,27 +244,27 @@ mod __parse__Program { // State 96 -43, 0, 0, 0, -43, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, -43, -43, -43, -43, 0, 0, 0, 0, -43, -43, // State 97 - -91, 0, 0, 0, -91, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, -91, -91, -91, -91, 0, 0, 0, 0, -91, -91, - // State 98 -92, 0, 0, 0, -92, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, -92, -92, -92, -92, 0, 0, 0, 0, -92, -92, + // State 98 + -93, 0, 0, 0, -93, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, -93, -93, -93, -93, 0, 0, 0, 0, -93, -93, // State 99 - -95, 0, 0, 0, -95, 0, 0, 0, 0, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, 0, 0, 0, 0, 0, -95, -95, -95, -95, 0, 0, 0, 0, -95, -95, + -96, 0, 0, 0, -96, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, -96, -96, -96, -96, 0, 0, 0, 0, -96, -96, // State 100 - -93, 0, 0, 0, -93, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, -93, -93, -93, -93, 0, 0, 0, 0, -93, -93, - // State 101 -94, 0, 0, 0, -94, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, -94, -94, -94, -94, 0, 0, 0, 0, -94, -94, + // State 101 + -95, 0, 0, 0, -95, 0, 0, 0, 0, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, 0, 0, 0, 0, 0, -95, -95, -95, -95, 0, 0, 0, 0, -95, -95, // State 102 - -109, 0, 0, 0, -109, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, -109, -109, -109, -109, 0, 0, 0, 0, -109, -109, + -110, 0, 0, 0, -110, 0, 0, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, 0, 0, 0, 0, -110, -110, -110, -110, 0, 0, 0, 0, -110, -110, // State 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, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 104 - 0, -85, -85, -85, 0, -85, -85, -85, -85, -85, 0, -85, 0, -85, -85, -85, 0, -85, -85, -85, 0, 0, 0, 0, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -85, -85, -85, 0, 0, + 0, -86, -86, -86, 0, -86, -86, -86, -86, -86, 0, -86, 0, -86, -86, -86, 0, -86, -86, -86, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, -86, -86, 0, 0, // State 105 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, 0, -58, -58, -58, 0, -58, -58, -58, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -58, -58, 0, 0, // State 106 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 107 - 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, + 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, -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, -70, 0, 0, // State 108 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, // State 109 @@ -292,7 +292,7 @@ mod __parse__Program { // State 120 0, 0, 0, 0, 0, -32, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 121 - 0, 0, 0, 0, 0, -83, 0, 0, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -83, 0, 0, + 0, 0, 0, 0, 0, -84, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, 0, 0, // State 122 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, -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, -65, 0, 0, // State 123 @@ -306,7 +306,7 @@ mod __parse__Program { // State 127 0, -60, -60, -60, 0, -60, -60, -60, -60, -60, 0, -60, 0, -60, -60, -60, 0, -60, -60, -60, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, -60, -60, 0, 0, // State 128 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 129 0, 0, 0, 0, 0, -34, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 130 @@ -318,7 +318,7 @@ mod __parse__Program { // State 133 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 134 - 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, -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, -67, 0, 0, + 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, // State 135 0, -61, -61, -61, 0, -61, -61, -61, -61, -61, 0, -61, 0, -61, -61, -61, 0, -61, -61, -61, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, -61, -61, 0, 0, // State 136 @@ -326,17 +326,17 @@ mod __parse__Program { // State 137 -10, 0, 0, 0, -10, -10, 0, 0, 0, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10, -10, 0, -10, 0, -10, -10, -10, 0, -10, -10, -10, -10, -10, 0, 0, 0, -10, -10, // State 138 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, // State 139 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, // State 140 - 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, + 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, // State 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, 43, 0, 0, 0, 0, // State 142 - 0, 0, 0, 0, 0, -81, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -81, 0, 0, + 0, 0, 0, 0, 0, -82, 0, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, 0, 0, // State 143 - 0, 0, 0, 0, 0, -80, 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, -80, 0, 0, + 0, 0, 0, 0, 0, -81, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -81, 0, 0, // State 144 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, // State 145 @@ -347,9 +347,9 @@ mod __parse__Program { } const __EOF_ACTION: &[i16] = &[ // State 0 - -101, - // State 1 -102, + // State 1 + -103, // State 2 0, // State 3 @@ -437,7 +437,7 @@ mod __parse__Program { // State 44 -46, // State 45 - -110, + -111, // State 46 -50, // State 47 @@ -553,7 +553,7 @@ mod __parse__Program { // State 102 0, // State 103 - -89, + -90, // State 104 0, // State 105 @@ -603,7 +603,7 @@ mod __parse__Program { // State 127 0, // State 128 - -88, + -89, // State 129 0, // State 130 @@ -1392,25 +1392,25 @@ mod __parse__Program { } 66 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, + states_to_pop: 5, nonterminal_produced: 29, } } 67 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, + states_to_pop: 4, nonterminal_produced: 29, } } 68 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 5, nonterminal_produced: 29, } } 69 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 29, } } @@ -1429,127 +1429,127 @@ mod __parse__Program { 72 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 30, + nonterminal_produced: 29, } } 73 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 31, + nonterminal_produced: 30, } } 74 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 32, + nonterminal_produced: 31, } } 75 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 1, nonterminal_produced: 32, } } 76 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 0, + nonterminal_produced: 32, + } + } + 77 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 33, } } - 77 => { + 78 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 6, nonterminal_produced: 34, } } - 78 => { + 79 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 5, nonterminal_produced: 34, } } - 79 => { + 80 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 7, nonterminal_produced: 34, } } - 80 => { + 81 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 6, nonterminal_produced: 34, } } - 81 => { + 82 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, nonterminal_produced: 34, } } - 82 => { + 83 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, nonterminal_produced: 34, } } - 83 => { + 84 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 34, } } - 84 => { + 85 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, nonterminal_produced: 35, } } - 85 => { + 86 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 35, } } - 86 => { + 87 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 36, } } - 87 => { + 88 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 10, nonterminal_produced: 37, } } - 88 => { + 89 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 8, nonterminal_produced: 37, } } - 89 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 38, - } - } 90 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 39, + nonterminal_produced: 38, } } 91 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 40, + nonterminal_produced: 39, } } 92 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 41, + nonterminal_produced: 40, } } 93 => { @@ -1567,49 +1567,49 @@ mod __parse__Program { 95 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 42, + nonterminal_produced: 41, } } 96 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 43, + states_to_pop: 1, + nonterminal_produced: 42, } } 97 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 4, nonterminal_produced: 43, } } 98 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 44, + states_to_pop: 3, + nonterminal_produced: 43, } } 99 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 1, nonterminal_produced: 44, } } 100 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 0, - nonterminal_produced: 45, + nonterminal_produced: 44, } } 101 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 0, nonterminal_produced: 45, } } 102 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 46, + nonterminal_produced: 45, } } 103 => { @@ -1633,7 +1633,7 @@ mod __parse__Program { 106 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 47, + nonterminal_produced: 46, } } 107 => { @@ -1643,12 +1643,18 @@ mod __parse__Program { } } 108 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 47, + } + } + 109 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 48, } } - 109 => __state_machine::SimulatedReduce::Accept, + 110 => __state_machine::SimulatedReduce::Accept, _ => panic!("invalid reduction index {}", __reduce_index) } } @@ -2058,6 +2064,9 @@ mod __parse__Program { __reduce108(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 109 => { + __reduce109(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 110 => { // __Program = Program => ActionFn(0); let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0; @@ -2285,11 +2294,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // "mut"? = "mut" => ActionFn(74); + // "mut"? = "mut" => ActionFn(75); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action74::<>(input, __sym0); + let __nt = super::__action75::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (1, 0) } @@ -2302,10 +2311,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // "mut"? = => ActionFn(75); + // "mut"? = => ActionFn(76); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action75::<>(input, &__start, &__end); + let __nt = super::__action76::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (0, 0) } @@ -2318,13 +2327,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" ) = "->", Type => ActionFn(78); + // ("->" ) = "->", Type => ActionFn(79); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant2(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action78::<>(input, __sym0, __sym1); + let __nt = super::__action79::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 1) } @@ -2337,13 +2346,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" )? = "->", Type => ActionFn(104); + // ("->" )? = "->", Type => ActionFn(105); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant2(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action104::<>(input, __sym0, __sym1); + let __nt = super::__action105::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 2) } @@ -2356,10 +2365,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" )? = => ActionFn(77); + // ("->" )? = => ActionFn(78); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action77::<>(input, &__start, &__end); + let __nt = super::__action78::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (0, 2) } @@ -2372,13 +2381,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Expr, "," => ActionFn(93); + // ( ",") = Expr, "," => ActionFn(94); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action93::<>(input, __sym0, __sym1); + let __nt = super::__action94::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 3) } @@ -2391,10 +2400,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(91); + // ( ",")* = => ActionFn(92); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action91::<>(input, &__start, &__end); + let __nt = super::__action92::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (0, 4) } @@ -2407,11 +2416,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(92); + // ( ",")* = ( ",")+ => ActionFn(93); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action92::<>(input, __sym0); + let __nt = super::__action93::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (1, 4) } @@ -2424,13 +2433,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(107); + // ( ",")+ = Expr, "," => ActionFn(108); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action107::<>(input, __sym0, __sym1); + let __nt = super::__action108::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (2, 5) } @@ -2443,14 +2452,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(108); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(109); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action108::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action109::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (3, 5) } @@ -2463,13 +2472,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Param, "," => ActionFn(88); + // ( ",") = Param, "," => ActionFn(89); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action88::<>(input, __sym0, __sym1); + let __nt = super::__action89::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (2, 6) } @@ -2482,10 +2491,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(86); + // ( ",")* = => ActionFn(87); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action86::<>(input, &__start, &__end); + let __nt = super::__action87::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (0, 7) } @@ -2498,11 +2507,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(87); + // ( ",")* = ( ",")+ => ActionFn(88); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action87::<>(input, __sym0); + let __nt = super::__action88::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 7) } @@ -2515,13 +2524,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Param, "," => ActionFn(111); + // ( ",")+ = Param, "," => ActionFn(112); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action111::<>(input, __sym0, __sym1); + let __nt = super::__action112::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (2, 8) } @@ -2534,14 +2543,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Param, "," => ActionFn(112); + // ( ",")+ = ( ",")+, Param, "," => ActionFn(113); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant6(__symbols); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action112::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action113::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (3, 8) } @@ -2554,11 +2563,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // AdditiveOp = "+" => ActionFn(37); + // AdditiveOp = "+" => ActionFn(38); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action37::<>(input, __sym0); + let __nt = super::__action38::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 9) } @@ -2571,11 +2580,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // AdditiveOp = "-" => ActionFn(38); + // AdditiveOp = "-" => ActionFn(39); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action38::<>(input, __sym0); + let __nt = super::__action39::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 9) } @@ -2588,14 +2597,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, AdditiveOp, ExprMultiplicative => ActionFn(62); + // BinaryOps = BinaryOps, AdditiveOp, ExprMultiplicative => ActionFn(63); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 10) } @@ -2608,11 +2617,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprMultiplicative => ActionFn(63); + // BinaryOps = ExprMultiplicative => ActionFn(64); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action63::<>(input, __sym0); + let __nt = super::__action64::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 10) } @@ -2625,14 +2634,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, ComparativeOp, ExprXor => ActionFn(66); + // BinaryOps = BinaryOps, ComparativeOp, ExprXor => ActionFn(67); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 11) } @@ -2645,11 +2654,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprXor => ActionFn(67); + // BinaryOps = ExprXor => ActionFn(68); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action67::<>(input, __sym0); + let __nt = super::__action68::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 11) } @@ -2662,14 +2671,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, LogicalAndOp, ExprComparative => ActionFn(68); + // BinaryOps = BinaryOps, LogicalAndOp, ExprComparative => ActionFn(69); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 12) } @@ -2682,11 +2691,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprComparative => ActionFn(69); + // BinaryOps = ExprComparative => ActionFn(70); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action69::<>(input, __sym0); + let __nt = super::__action70::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 12) } @@ -2699,14 +2708,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, LogicalOrOp, ExprLogicalAnd => ActionFn(70); + // BinaryOps = BinaryOps, LogicalOrOp, ExprLogicalAnd => ActionFn(71); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action71::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 13) } @@ -2719,11 +2728,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprLogicalAnd => ActionFn(71); + // BinaryOps = ExprLogicalAnd => ActionFn(72); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action71::<>(input, __sym0); + let __nt = super::__action72::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 13) } @@ -2736,14 +2745,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, MultiplicativeOp, ExprUnary => ActionFn(60); + // BinaryOps = BinaryOps, MultiplicativeOp, ExprUnary => ActionFn(61); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 14) } @@ -2756,11 +2765,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprUnary => ActionFn(61); + // BinaryOps = ExprUnary => ActionFn(62); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action61::<>(input, __sym0); + let __nt = super::__action62::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 14) } @@ -2773,14 +2782,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, XorOp, ExprAdditive => ActionFn(64); + // BinaryOps = BinaryOps, XorOp, ExprAdditive => ActionFn(65); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant8(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 15) } @@ -2793,11 +2802,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprAdditive => ActionFn(65); + // BinaryOps = ExprAdditive => ActionFn(66); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action65::<>(input, __sym0); + let __nt = super::__action66::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 15) } @@ -2810,11 +2819,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Bool = "true" => ActionFn(57); + // Bool = "true" => ActionFn(58); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action57::<>(input, __sym0); + let __nt = super::__action58::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 16) } @@ -2827,11 +2836,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Bool = "false" => ActionFn(58); + // Bool = "false" => ActionFn(59); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action58::<>(input, __sym0); + let __nt = super::__action59::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 16) } @@ -2844,11 +2853,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(117); + // Comma = Expr => ActionFn(118); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action117::<>(input, __sym0); + let __nt = super::__action118::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (1, 17) } @@ -2861,10 +2870,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(118); + // Comma = => ActionFn(119); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action118::<>(input, &__start, &__end); + let __nt = super::__action119::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (0, 17) } @@ -2877,13 +2886,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(119); + // Comma = ( ",")+, Expr => ActionFn(120); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action119::<>(input, __sym0, __sym1); + let __nt = super::__action120::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (2, 17) } @@ -2896,11 +2905,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(120); + // Comma = ( ",")+ => ActionFn(121); let __sym0 = __pop_Variant5(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action120::<>(input, __sym0); + let __nt = super::__action121::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (1, 17) } @@ -2913,11 +2922,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Param => ActionFn(123); + // Comma = Param => ActionFn(124); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action123::<>(input, __sym0); + let __nt = super::__action124::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (1, 18) } @@ -2930,10 +2939,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(124); + // Comma = => ActionFn(125); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action124::<>(input, &__start, &__end); + let __nt = super::__action125::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (0, 18) } @@ -2946,13 +2955,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Param => ActionFn(125); + // Comma = ( ",")+, Param => ActionFn(126); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant6(__symbols); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action125::<>(input, __sym0, __sym1); + let __nt = super::__action126::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (2, 18) } @@ -2965,11 +2974,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(126); + // Comma = ( ",")+ => ActionFn(127); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action126::<>(input, __sym0); + let __nt = super::__action127::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (1, 18) } @@ -2982,11 +2991,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "==" => ActionFn(30); + // ComparativeOp = "==" => ActionFn(31); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action30::<>(input, __sym0); + let __nt = super::__action31::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -2999,11 +3008,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "!=" => ActionFn(31); + // ComparativeOp = "!=" => ActionFn(32); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action31::<>(input, __sym0); + let __nt = super::__action32::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -3016,11 +3025,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = ">" => ActionFn(32); + // ComparativeOp = ">" => ActionFn(33); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action32::<>(input, __sym0); + let __nt = super::__action33::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -3033,11 +3042,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = ">=" => ActionFn(33); + // ComparativeOp = ">=" => ActionFn(34); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action33::<>(input, __sym0); + let __nt = super::__action34::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -3050,11 +3059,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "<" => ActionFn(34); + // ComparativeOp = "<" => ActionFn(35); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action34::<>(input, __sym0); + let __nt = super::__action35::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -3067,11 +3076,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "<=" => ActionFn(35); + // ComparativeOp = "<=" => ActionFn(36); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action35::<>(input, __sym0); + let __nt = super::__action36::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 19) } @@ -3101,10 +3110,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def* = => ActionFn(80); + // Def* = => ActionFn(81); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action80::<>(input, &__start, &__end); + let __nt = super::__action81::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (0, 21) } @@ -3117,11 +3126,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def* = Def+ => ActionFn(81); + // Def* = Def+ => ActionFn(82); let __sym0 = __pop_Variant13(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action81::<>(input, __sym0); + let __nt = super::__action82::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 21) } @@ -3134,11 +3143,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def+ = Def => ActionFn(82); + // Def+ = Def => ActionFn(83); let __sym0 = __pop_Variant12(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action82::<>(input, __sym0); + let __nt = super::__action83::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 22) } @@ -3151,13 +3160,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def+ = Def+, Def => ActionFn(83); + // Def+ = Def+, Def => ActionFn(84); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant12(__symbols); let __sym0 = __pop_Variant13(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action83::<>(input, __sym0, __sym1); + let __nt = super::__action84::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (2, 22) } @@ -3187,11 +3196,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = Expr => ActionFn(89); + // Expr? = Expr => ActionFn(90); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action89::<>(input, __sym0); + let __nt = super::__action90::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 24) } @@ -3204,10 +3213,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = => ActionFn(90); + // Expr? = => ActionFn(91); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action90::<>(input, &__start, &__end); + let __nt = super::__action91::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (0, 24) } @@ -3220,11 +3229,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAdditive = BinaryOps => ActionFn(26); + // ExprAdditive = BinaryOps => ActionFn(27); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action26::<>(input, __sym0); + let __nt = super::__action27::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 25) } @@ -3237,11 +3246,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Num => ActionFn(50); + // ExprAtom = Num => ActionFn(51); let __sym0 = __pop_Variant15(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action50::<>(input, __sym0); + let __nt = super::__action51::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 26) } @@ -3254,11 +3263,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Bool => ActionFn(51); + // ExprAtom = Bool => ActionFn(52); let __sym0 = __pop_Variant9(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action51::<>(input, __sym0); + let __nt = super::__action52::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 26) } @@ -3271,11 +3280,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = "unit" => ActionFn(52); + // ExprAtom = "unit" => ActionFn(53); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action52::<>(input, __sym0); + let __nt = super::__action53::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 26) } @@ -3288,11 +3297,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Ident => ActionFn(53); + // ExprAtom = Ident => ActionFn(54); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action53::<>(input, __sym0); + let __nt = super::__action54::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 26) } @@ -3305,14 +3314,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = "(", Expr, ")" => ActionFn(54); + // ExprAtom = "(", Expr, ")" => ActionFn(55); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 26) } @@ -3325,14 +3334,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = "read", "(", ")" => ActionFn(46); + // ExprCall = "read", "(", ")" => ActionFn(47); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 27) } @@ -3345,7 +3354,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = "print", "(", Expr, ")" => ActionFn(47); + // ExprCall = "print", "(", Expr, ")" => ActionFn(48); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant4(__symbols); @@ -3353,7 +3362,7 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (4, 27) } @@ -3366,7 +3375,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = ExprAtom, "(", Comma, ")" => ActionFn(48); + // ExprCall = ExprAtom, "(", Comma, ")" => ActionFn(49); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant10(__symbols); @@ -3374,7 +3383,7 @@ mod __parse__Program { let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action49::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (4, 27) } @@ -3387,11 +3396,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = ExprAtom => ActionFn(49); + // ExprCall = ExprAtom => ActionFn(50); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action49::<>(input, __sym0); + let __nt = super::__action50::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 27) } @@ -3404,11 +3413,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprComparative = BinaryOps => ActionFn(24); + // ExprComparative = BinaryOps => ActionFn(25); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action24::<>(input, __sym0); + let __nt = super::__action25::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 28) } @@ -3467,7 +3476,29 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "loop", "{", Expr, "}" => ActionFn(17); + // ExprInStmt = "if", ExprLogicalOr, "{", Expr, "}" => ActionFn(17); + assert!(__symbols.len() >= 5); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant4(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant4(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym4.2; + let __nt = super::__action17::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + (5, 29) + } + fn __reduce67< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ExprInStmt = "loop", "{", Expr, "}" => ActionFn(18); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant4(__symbols); @@ -3475,11 +3506,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action17::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action18::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (4, 29) } - fn __reduce67< + fn __reduce68< 'input, >( input: &'input str, @@ -3488,7 +3519,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "while", ExprLogicalOr, "{", Expr, "}" => ActionFn(18); + // ExprInStmt = "while", ExprLogicalOr, "{", Expr, "}" => ActionFn(19); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant4(__symbols); @@ -3497,11 +3528,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action18::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action19::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (5, 29) } - fn __reduce68< + fn __reduce69< 'input, >( input: &'input str, @@ -3510,17 +3541,17 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "break", ExprLogicalOr => ActionFn(121); + // ExprInStmt = "break", ExprLogicalOr => ActionFn(122); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action121::<>(input, __sym0, __sym1); + let __nt = super::__action122::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 29) } - fn __reduce69< + fn __reduce70< 'input, >( input: &'input str, @@ -3529,15 +3560,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "break" => ActionFn(122); + // ExprInStmt = "break" => ActionFn(123); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action122::<>(input, __sym0); + let __nt = super::__action123::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 29) } - fn __reduce70< + fn __reduce71< 'input, >( input: &'input str, @@ -3546,15 +3577,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "continue" => ActionFn(20); + // ExprInStmt = "continue" => ActionFn(21); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action20::<>(input, __sym0); + let __nt = super::__action21::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 29) } - fn __reduce71< + fn __reduce72< 'input, >( input: &'input str, @@ -3563,15 +3594,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = ExprLogicalOr => ActionFn(21); + // ExprInStmt = ExprLogicalOr => ActionFn(22); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 29) } - fn __reduce72< + fn __reduce73< 'input, >( input: &'input str, @@ -3580,15 +3611,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalAnd = BinaryOps => ActionFn(23); + // ExprLogicalAnd = BinaryOps => ActionFn(24); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 30) } - fn __reduce73< + fn __reduce74< 'input, >( input: &'input str, @@ -3597,15 +3628,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr = BinaryOps => ActionFn(22); + // ExprLogicalOr = BinaryOps => ActionFn(23); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action22::<>(input, __sym0); + let __nt = super::__action23::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 31) } - fn __reduce74< + fn __reduce75< 'input, >( input: &'input str, @@ -3614,15 +3645,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr? = ExprLogicalOr => ActionFn(72); + // ExprLogicalOr? = ExprLogicalOr => ActionFn(73); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action72::<>(input, __sym0); + let __nt = super::__action73::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 32) } - fn __reduce75< + fn __reduce76< 'input, >( input: &'input str, @@ -3631,14 +3662,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr? = => ActionFn(73); + // ExprLogicalOr? = => ActionFn(74); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action73::<>(input, &__start, &__end); + let __nt = super::__action74::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (0, 32) } - fn __reduce76< + fn __reduce77< 'input, >( input: &'input str, @@ -3647,15 +3678,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprMultiplicative = BinaryOps => ActionFn(27); + // ExprMultiplicative = BinaryOps => ActionFn(28); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action27::<>(input, __sym0); + let __nt = super::__action28::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 33) } - fn __reduce77< + fn __reduce78< 'input, >( input: &'input str, @@ -3664,7 +3695,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";" => ActionFn(98); + // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";" => ActionFn(99); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant4(__symbols); @@ -3674,11 +3705,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action98::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action99::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (6, 34) } - fn __reduce78< + fn __reduce79< 'input, >( input: &'input str, @@ -3687,7 +3718,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";" => ActionFn(99); + // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";" => ActionFn(100); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant4(__symbols); @@ -3696,11 +3727,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action99::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action100::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (5, 34) } - fn __reduce79< + fn __reduce80< 'input, >( input: &'input str, @@ -3709,7 +3740,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(100); + // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(101); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant4(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -3720,11 +3751,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action100::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action101::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (7, 34) } - fn __reduce80< + fn __reduce81< 'input, >( input: &'input str, @@ -3733,7 +3764,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(101); + // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(102); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant4(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -3743,11 +3774,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action101::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action102::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (6, 34) } - fn __reduce81< + fn __reduce82< 'input, >( input: &'input str, @@ -3766,7 +3797,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 34) } - fn __reduce82< + fn __reduce83< 'input, >( input: &'input str, @@ -3786,7 +3817,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 34) } - fn __reduce83< + fn __reduce84< 'input, >( input: &'input str, @@ -3803,7 +3834,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 34) } - fn __reduce84< + fn __reduce85< 'input, >( input: &'input str, @@ -3812,17 +3843,17 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprUnary = UnaryOp, ExprUnary => ActionFn(44); + // ExprUnary = UnaryOp, ExprUnary => ActionFn(45); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action44::<>(input, __sym0, __sym1); + let __nt = super::__action45::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 35) } - fn __reduce85< + fn __reduce86< 'input, >( input: &'input str, @@ -3831,15 +3862,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprUnary = ExprCall => ActionFn(45); + // ExprUnary = ExprCall => ActionFn(46); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action45::<>(input, __sym0); + let __nt = super::__action46::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 35) } - fn __reduce86< + fn __reduce87< 'input, >( input: &'input str, @@ -3848,15 +3879,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprXor = BinaryOps => ActionFn(25); + // ExprXor = BinaryOps => ActionFn(26); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action25::<>(input, __sym0); + let __nt = super::__action26::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 36) } - fn __reduce87< + fn __reduce88< 'input, >( input: &'input str, @@ -3865,7 +3896,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Fn = "fn", Ident, "(", Comma, ")", "->", Type, "{", Expr, "}" => ActionFn(105); + // Fn = "fn", Ident, "(", Comma, ")", "->", Type, "{", Expr, "}" => ActionFn(106); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant4(__symbols); @@ -3879,11 +3910,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym9.2; - let __nt = super::__action105::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action106::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (10, 37) } - fn __reduce88< + fn __reduce89< 'input, >( input: &'input str, @@ -3892,7 +3923,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Fn = "fn", Ident, "(", Comma, ")", "{", Expr, "}" => ActionFn(106); + // Fn = "fn", Ident, "(", Comma, ")", "{", Expr, "}" => ActionFn(107); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant4(__symbols); @@ -3904,11 +3935,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action106::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action107::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (8, 37) } - fn __reduce89< + fn __reduce90< 'input, >( input: &'input str, @@ -3917,15 +3948,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[_a-zA-Z][_a-zA-Z0-9]*"# => ActionFn(55); + // Ident = r#"[_a-zA-Z][_a-zA-Z0-9]*"# => ActionFn(56); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action55::<>(input, __sym0); + let __nt = super::__action56::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant0(__nt), __end)); (1, 38) } - fn __reduce90< + fn __reduce91< 'input, >( input: &'input str, @@ -3934,15 +3965,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // LogicalAndOp = "&&" => ActionFn(29); + // LogicalAndOp = "&&" => ActionFn(30); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action29::<>(input, __sym0); + let __nt = super::__action30::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 39) } - fn __reduce91< + fn __reduce92< 'input, >( input: &'input str, @@ -3951,15 +3982,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // LogicalOrOp = "||" => ActionFn(28); + // LogicalOrOp = "||" => ActionFn(29); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action28::<>(input, __sym0); + let __nt = super::__action29::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 40) } - fn __reduce92< + fn __reduce93< 'input, >( input: &'input str, @@ -3968,15 +3999,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "*" => ActionFn(39); + // MultiplicativeOp = "*" => ActionFn(40); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action39::<>(input, __sym0); + let __nt = super::__action40::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 41) } - fn __reduce93< + fn __reduce94< 'input, >( input: &'input str, @@ -3985,15 +4016,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "/" => ActionFn(40); + // MultiplicativeOp = "/" => ActionFn(41); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action40::<>(input, __sym0); + let __nt = super::__action41::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 41) } - fn __reduce94< + fn __reduce95< 'input, >( input: &'input str, @@ -4002,15 +4033,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "%" => ActionFn(41); + // MultiplicativeOp = "%" => ActionFn(42); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action41::<>(input, __sym0); + let __nt = super::__action42::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 41) } - fn __reduce95< + fn __reduce96< 'input, >( input: &'input str, @@ -4019,15 +4050,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"[0-9]+"# => ActionFn(56); + // Num = r#"[0-9]+"# => ActionFn(57); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action56::<>(input, __sym0); + let __nt = super::__action57::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (1, 42) } - fn __reduce96< + fn __reduce97< 'input, >( input: &'input str, @@ -4036,7 +4067,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param = "mut", Ident, ":", Type => ActionFn(102); + // Param = "mut", Ident, ":", Type => ActionFn(103); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant2(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -4044,11 +4075,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action102::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action103::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (4, 43) } - fn __reduce97< + fn __reduce98< 'input, >( input: &'input str, @@ -4057,18 +4088,18 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param = Ident, ":", Type => ActionFn(103); + // Param = Ident, ":", Type => ActionFn(104); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant2(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action103::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action104::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (3, 43) } - fn __reduce98< + fn __reduce99< 'input, >( input: &'input str, @@ -4077,15 +4108,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param? = Param => ActionFn(84); + // Param? = Param => ActionFn(85); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action84::<>(input, __sym0); + let __nt = super::__action85::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); (1, 44) } - fn __reduce99< + fn __reduce100< 'input, >( input: &'input str, @@ -4094,14 +4125,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param? = => ActionFn(85); + // Param? = => ActionFn(86); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action85::<>(input, &__start, &__end); + let __nt = super::__action86::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); (0, 44) } - fn __reduce100< + fn __reduce101< 'input, >( input: &'input str, @@ -4110,14 +4141,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Program = => ActionFn(115); + // Program = => ActionFn(116); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action115::<>(input, &__start, &__end); + let __nt = super::__action116::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); (0, 45) } - fn __reduce101< + fn __reduce102< 'input, >( input: &'input str, @@ -4126,15 +4157,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Program = Def+ => ActionFn(116); + // Program = Def+ => ActionFn(117); let __sym0 = __pop_Variant13(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action116::<>(input, __sym0); + let __nt = super::__action117::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); (1, 45) } - fn __reduce102< + fn __reduce103< 'input, >( input: &'input str, @@ -4151,7 +4182,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 46) } - fn __reduce103< + fn __reduce104< 'input, >( input: &'input str, @@ -4168,7 +4199,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 46) } - fn __reduce104< + fn __reduce105< 'input, >( input: &'input str, @@ -4185,7 +4216,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 46) } - fn __reduce105< + fn __reduce106< 'input, >( input: &'input str, @@ -4202,7 +4233,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 46) } - fn __reduce106< + fn __reduce107< 'input, >( input: &'input str, @@ -4211,15 +4242,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UnaryOp = "-" => ActionFn(42); + // UnaryOp = "-" => ActionFn(43); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action42::<>(input, __sym0); + let __nt = super::__action43::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 47) } - fn __reduce107< + fn __reduce108< 'input, >( input: &'input str, @@ -4228,15 +4259,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UnaryOp = "!" => ActionFn(43); + // UnaryOp = "!" => ActionFn(44); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action43::<>(input, __sym0); + let __nt = super::__action44::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 47) } - fn __reduce108< + fn __reduce109< 'input, >( input: &'input str, @@ -4245,11 +4276,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // XorOp = "^" => ActionFn(36); + // XorOp = "^" => ActionFn(37); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action36::<>(input, __sym0); + let __nt = super::__action37::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 48) } @@ -4599,6 +4630,26 @@ fn __action16< #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] fn __action17< 'input, +>( + input: &'input str, + (_, _, _): (usize, &'input str, usize), + (_, cnd, _): (usize, Expr<&'input str>, usize), + (_, _, _): (usize, &'input str, usize), + (_, thn, _): (usize, Expr<&'input str>, usize), + (_, _, _): (usize, &'input str, usize), +) -> Expr<&'input str> +{ + Expr::If { + cnd: Box::new(cnd), + thn: Box::new(thn), + els: Box::new(Expr::Lit { val: Lit::Unit }), + } +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] +fn __action18< + 'input, >( input: &'input str, (_, _, _): (usize, &'input str, usize), @@ -4614,7 +4665,7 @@ fn __action17< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action18< +fn __action19< 'input, >( input: &'input str, @@ -4639,7 +4690,7 @@ fn __action18< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action19< +fn __action20< 'input, >( input: &'input str, @@ -4654,7 +4705,7 @@ fn __action19< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action20< +fn __action21< 'input, >( input: &'input str, @@ -4666,7 +4717,7 @@ fn __action20< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action21< +fn __action22< 'input, >( input: &'input str, @@ -4678,7 +4729,7 @@ fn __action21< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action22< +fn __action23< 'input, >( input: &'input str, @@ -4690,7 +4741,7 @@ fn __action22< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action23< +fn __action24< 'input, >( input: &'input str, @@ -4702,7 +4753,7 @@ fn __action23< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action24< +fn __action25< 'input, >( input: &'input str, @@ -4714,7 +4765,7 @@ fn __action24< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action25< +fn __action26< 'input, >( input: &'input str, @@ -4726,7 +4777,7 @@ fn __action25< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action26< +fn __action27< 'input, >( input: &'input str, @@ -4738,7 +4789,7 @@ fn __action26< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action27< +fn __action28< 'input, >( input: &'input str, @@ -4750,7 +4801,7 @@ fn __action27< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action28< +fn __action29< 'input, >( input: &'input str, @@ -4762,7 +4813,7 @@ fn __action28< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action29< +fn __action30< 'input, >( input: &'input str, @@ -4774,7 +4825,7 @@ fn __action29< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action30< +fn __action31< 'input, >( input: &'input str, @@ -4786,7 +4837,7 @@ fn __action30< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action31< +fn __action32< 'input, >( input: &'input str, @@ -4798,7 +4849,7 @@ fn __action31< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action32< +fn __action33< 'input, >( input: &'input str, @@ -4810,7 +4861,7 @@ fn __action32< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action33< +fn __action34< 'input, >( input: &'input str, @@ -4822,7 +4873,7 @@ fn __action33< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action34< +fn __action35< 'input, >( input: &'input str, @@ -4834,7 +4885,7 @@ fn __action34< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action35< +fn __action36< 'input, >( input: &'input str, @@ -4846,7 +4897,7 @@ fn __action35< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action36< +fn __action37< 'input, >( input: &'input str, @@ -4858,7 +4909,7 @@ fn __action36< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action37< +fn __action38< 'input, >( input: &'input str, @@ -4870,7 +4921,7 @@ fn __action37< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action38< +fn __action39< 'input, >( input: &'input str, @@ -4882,7 +4933,7 @@ fn __action38< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action39< +fn __action40< 'input, >( input: &'input str, @@ -4894,7 +4945,7 @@ fn __action39< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action40< +fn __action41< 'input, >( input: &'input str, @@ -4906,7 +4957,7 @@ fn __action40< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action41< +fn __action42< 'input, >( input: &'input str, @@ -4918,7 +4969,7 @@ fn __action41< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action42< +fn __action43< 'input, >( input: &'input str, @@ -4930,7 +4981,7 @@ fn __action42< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action43< +fn __action44< 'input, >( input: &'input str, @@ -4942,7 +4993,7 @@ fn __action43< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action44< +fn __action45< 'input, >( input: &'input str, @@ -4958,7 +5009,7 @@ fn __action44< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action45< +fn __action46< 'input, >( input: &'input str, @@ -4970,7 +5021,7 @@ fn __action45< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action46< +fn __action47< 'input, >( input: &'input str, @@ -4987,7 +5038,7 @@ fn __action46< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action47< +fn __action48< 'input, >( input: &'input str, @@ -5005,7 +5056,7 @@ fn __action47< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action48< +fn __action49< 'input, >( input: &'input str, @@ -5023,7 +5074,7 @@ fn __action48< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action49< +fn __action50< 'input, >( input: &'input str, @@ -5035,7 +5086,7 @@ fn __action49< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action50< +fn __action51< 'input, >( input: &'input str, @@ -5047,7 +5098,7 @@ fn __action50< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action51< +fn __action52< 'input, >( input: &'input str, @@ -5059,7 +5110,7 @@ fn __action51< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action52< +fn __action53< 'input, >( input: &'input str, @@ -5071,7 +5122,7 @@ fn __action52< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action53< +fn __action54< 'input, >( input: &'input str, @@ -5083,7 +5134,7 @@ fn __action53< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action54< +fn __action55< 'input, >( input: &'input str, @@ -5097,7 +5148,7 @@ fn __action54< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action55< +fn __action56< 'input, >( input: &'input str, @@ -5109,7 +5160,7 @@ fn __action55< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action56< +fn __action57< 'input, >( input: &'input str, @@ -5121,7 +5172,7 @@ fn __action56< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action57< +fn __action58< 'input, >( input: &'input str, @@ -5133,7 +5184,7 @@ fn __action57< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action58< +fn __action59< 'input, >( input: &'input str, @@ -5145,7 +5196,7 @@ fn __action58< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action59< +fn __action60< 'input, >( input: &'input str, @@ -5165,7 +5216,7 @@ fn __action59< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action60< +fn __action61< 'input, >( input: &'input str, @@ -5182,7 +5233,7 @@ fn __action60< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action61< +fn __action62< 'input, >( input: &'input str, @@ -5194,7 +5245,7 @@ fn __action61< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action62< +fn __action63< 'input, >( input: &'input str, @@ -5211,7 +5262,7 @@ fn __action62< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action63< +fn __action64< 'input, >( input: &'input str, @@ -5223,7 +5274,7 @@ fn __action63< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action64< +fn __action65< 'input, >( input: &'input str, @@ -5240,7 +5291,7 @@ fn __action64< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action65< +fn __action66< 'input, >( input: &'input str, @@ -5252,7 +5303,7 @@ fn __action65< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action66< +fn __action67< 'input, >( input: &'input str, @@ -5269,7 +5320,7 @@ fn __action66< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action67< +fn __action68< 'input, >( input: &'input str, @@ -5281,7 +5332,7 @@ fn __action67< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action68< +fn __action69< 'input, >( input: &'input str, @@ -5298,7 +5349,7 @@ fn __action68< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action69< +fn __action70< 'input, >( input: &'input str, @@ -5310,7 +5361,7 @@ fn __action69< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action70< +fn __action71< 'input, >( input: &'input str, @@ -5327,7 +5378,7 @@ fn __action70< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action71< +fn __action72< 'input, >( input: &'input str, @@ -5339,7 +5390,7 @@ fn __action71< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action72< +fn __action73< 'input, >( input: &'input str, @@ -5351,7 +5402,7 @@ fn __action72< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action73< +fn __action74< 'input, >( input: &'input str, @@ -5364,7 +5415,7 @@ fn __action73< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action74< +fn __action75< 'input, >( input: &'input str, @@ -5376,7 +5427,7 @@ fn __action74< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action75< +fn __action76< 'input, >( input: &'input str, @@ -5389,7 +5440,7 @@ fn __action75< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action76< +fn __action77< 'input, >( input: &'input str, @@ -5401,7 +5452,7 @@ fn __action76< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action77< +fn __action78< 'input, >( input: &'input str, @@ -5414,7 +5465,7 @@ fn __action77< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action78< +fn __action79< 'input, >( input: &'input str, @@ -5427,7 +5478,7 @@ fn __action78< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action79< +fn __action80< 'input, >( input: &'input str, @@ -5447,7 +5498,7 @@ fn __action79< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action80< +fn __action81< 'input, >( input: &'input str, @@ -5460,7 +5511,7 @@ fn __action80< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action81< +fn __action82< 'input, >( input: &'input str, @@ -5472,7 +5523,7 @@ fn __action81< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action82< +fn __action83< 'input, >( input: &'input str, @@ -5484,7 +5535,7 @@ fn __action82< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action83< +fn __action84< 'input, >( input: &'input str, @@ -5497,7 +5548,7 @@ fn __action83< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action84< +fn __action85< 'input, >( input: &'input str, @@ -5509,7 +5560,7 @@ fn __action84< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action85< +fn __action86< 'input, >( input: &'input str, @@ -5522,7 +5573,7 @@ fn __action85< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action86< +fn __action87< 'input, >( input: &'input str, @@ -5535,7 +5586,7 @@ fn __action86< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action87< +fn __action88< 'input, >( input: &'input str, @@ -5547,7 +5598,7 @@ fn __action87< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action88< +fn __action89< 'input, >( input: &'input str, @@ -5560,7 +5611,7 @@ fn __action88< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action89< +fn __action90< 'input, >( input: &'input str, @@ -5572,7 +5623,7 @@ fn __action89< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action90< +fn __action91< 'input, >( input: &'input str, @@ -5585,7 +5636,7 @@ fn __action90< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action91< +fn __action92< 'input, >( input: &'input str, @@ -5598,7 +5649,7 @@ fn __action91< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action92< +fn __action93< 'input, >( input: &'input str, @@ -5610,7 +5661,7 @@ fn __action92< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action93< +fn __action94< 'input, >( input: &'input str, @@ -5623,7 +5674,7 @@ fn __action93< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action94< +fn __action95< 'input, >( input: &'input str, @@ -5635,7 +5686,7 @@ fn __action94< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action95< +fn __action96< 'input, >( input: &'input str, @@ -5648,7 +5699,7 @@ fn __action95< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action96< +fn __action97< 'input, >( input: &'input str, @@ -5660,7 +5711,7 @@ fn __action96< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action97< +fn __action98< 'input, >( input: &'input str, @@ -5674,7 +5725,7 @@ fn __action97< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action98< +fn __action99< 'input, >( input: &'input str, @@ -5688,7 +5739,7 @@ fn __action98< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action74( + let __temp0 = __action75( input, __1, ); @@ -5707,7 +5758,7 @@ fn __action98< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action99< +fn __action100< 'input, >( input: &'input str, @@ -5720,7 +5771,7 @@ fn __action99< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action75( + let __temp0 = __action76( input, &__start0, &__end0, @@ -5740,7 +5791,7 @@ fn __action99< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action100< +fn __action101< 'input, >( input: &'input str, @@ -5755,7 +5806,7 @@ fn __action100< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action74( + let __temp0 = __action75( input, __1, ); @@ -5775,7 +5826,7 @@ fn __action100< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action101< +fn __action102< 'input, >( input: &'input str, @@ -5789,7 +5840,7 @@ fn __action101< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action75( + let __temp0 = __action76( input, &__start0, &__end0, @@ -5810,7 +5861,7 @@ fn __action101< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action102< +fn __action103< 'input, >( input: &'input str, @@ -5822,7 +5873,7 @@ fn __action102< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action74( + let __temp0 = __action75( input, __0, ); @@ -5839,7 +5890,7 @@ fn __action102< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action103< +fn __action104< 'input, >( input: &'input str, @@ -5850,7 +5901,7 @@ fn __action103< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action75( + let __temp0 = __action76( input, &__start0, &__end0, @@ -5868,7 +5919,7 @@ fn __action103< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action104< +fn __action105< 'input, >( input: &'input str, @@ -5878,13 +5929,13 @@ fn __action104< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action78( + let __temp0 = __action79( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action76( + __action77( input, __temp0, ) @@ -5893,7 +5944,7 @@ fn __action104< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action105< +fn __action106< 'input, >( input: &'input str, @@ -5911,7 +5962,7 @@ fn __action105< { let __start0 = __5.0; let __end0 = __6.2; - let __temp0 = __action104( + let __temp0 = __action105( input, __5, __6, @@ -5934,7 +5985,7 @@ fn __action105< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action106< +fn __action107< 'input, >( input: &'input str, @@ -5950,7 +6001,7 @@ fn __action106< { let __start0 = __4.2; let __end0 = __5.0; - let __temp0 = __action77( + let __temp0 = __action78( input, &__start0, &__end0, @@ -5973,7 +6024,7 @@ fn __action106< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action107< +fn __action108< 'input, >( input: &'input str, @@ -5983,13 +6034,13 @@ fn __action107< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action93( + let __temp0 = __action94( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action94( + __action95( input, __temp0, ) @@ -5998,7 +6049,7 @@ fn __action107< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action108< +fn __action109< 'input, >( input: &'input str, @@ -6009,13 +6060,13 @@ fn __action108< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action93( + let __temp0 = __action94( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action95( + __action96( input, __0, __temp0, @@ -6025,7 +6076,7 @@ fn __action108< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action109< +fn __action110< 'input, >( input: &'input str, @@ -6034,13 +6085,13 @@ fn __action109< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action91( + let __temp0 = __action92( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action59( + __action60( input, __temp0, __0, @@ -6050,7 +6101,7 @@ fn __action109< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action110< +fn __action111< 'input, >( input: &'input str, @@ -6060,12 +6111,12 @@ fn __action110< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action92( + let __temp0 = __action93( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action59( + __action60( input, __temp0, __1, @@ -6075,7 +6126,7 @@ fn __action110< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action111< +fn __action112< 'input, >( input: &'input str, @@ -6085,13 +6136,13 @@ fn __action111< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action88( + let __temp0 = __action89( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action96( + __action97( input, __temp0, ) @@ -6100,7 +6151,7 @@ fn __action111< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action112< +fn __action113< 'input, >( input: &'input str, @@ -6111,13 +6162,13 @@ fn __action112< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action88( + let __temp0 = __action89( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action97( + __action98( input, __0, __temp0, @@ -6127,7 +6178,7 @@ fn __action112< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action113< +fn __action114< 'input, >( input: &'input str, @@ -6136,13 +6187,13 @@ fn __action113< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action86( + let __temp0 = __action87( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action79( + __action80( input, __temp0, __0, @@ -6152,7 +6203,7 @@ fn __action113< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action114< +fn __action115< 'input, >( input: &'input str, @@ -6162,12 +6213,12 @@ fn __action114< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action87( + let __temp0 = __action88( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action79( + __action80( input, __temp0, __1, @@ -6177,7 +6228,7 @@ fn __action114< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action115< +fn __action116< 'input, >( input: &'input str, @@ -6187,7 +6238,7 @@ fn __action115< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action80( + let __temp0 = __action81( input, &__start0, &__end0, @@ -6202,7 +6253,7 @@ fn __action115< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action116< +fn __action117< 'input, >( input: &'input str, @@ -6211,7 +6262,7 @@ fn __action116< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action81( + let __temp0 = __action82( input, __0, ); @@ -6225,7 +6276,7 @@ fn __action116< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action117< +fn __action118< 'input, >( input: &'input str, @@ -6234,12 +6285,12 @@ fn __action117< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action89( + let __temp0 = __action90( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action109( + __action110( input, __temp0, ) @@ -6248,7 +6299,7 @@ fn __action117< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action118< +fn __action119< 'input, >( input: &'input str, @@ -6258,13 +6309,13 @@ fn __action118< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action90( + let __temp0 = __action91( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action109( + __action110( input, __temp0, ) @@ -6273,7 +6324,7 @@ fn __action118< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action119< +fn __action120< 'input, >( input: &'input str, @@ -6283,12 +6334,12 @@ fn __action119< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action89( + let __temp0 = __action90( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action110( + __action111( input, __0, __temp0, @@ -6298,7 +6349,7 @@ fn __action119< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action120< +fn __action121< 'input, >( input: &'input str, @@ -6307,13 +6358,13 @@ fn __action120< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action90( + let __temp0 = __action91( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action110( + __action111( input, __0, __temp0, @@ -6323,7 +6374,7 @@ fn __action120< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action121< +fn __action122< 'input, >( input: &'input str, @@ -6333,12 +6384,12 @@ fn __action121< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action72( + let __temp0 = __action73( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action19( + __action20( input, __0, __temp0, @@ -6348,7 +6399,7 @@ fn __action121< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action122< +fn __action123< 'input, >( input: &'input str, @@ -6357,13 +6408,13 @@ fn __action122< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action73( + let __temp0 = __action74( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action19( + __action20( input, __0, __temp0, @@ -6373,7 +6424,7 @@ fn __action122< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action123< +fn __action124< 'input, >( input: &'input str, @@ -6382,12 +6433,12 @@ fn __action123< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action84( + let __temp0 = __action85( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action113( + __action114( input, __temp0, ) @@ -6396,7 +6447,7 @@ fn __action123< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action124< +fn __action125< 'input, >( input: &'input str, @@ -6406,13 +6457,13 @@ fn __action124< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action85( + let __temp0 = __action86( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action113( + __action114( input, __temp0, ) @@ -6421,7 +6472,7 @@ fn __action124< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action125< +fn __action126< 'input, >( input: &'input str, @@ -6431,12 +6482,12 @@ fn __action125< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action84( + let __temp0 = __action85( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action114( + __action115( input, __0, __temp0, @@ -6446,7 +6497,7 @@ fn __action125< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action126< +fn __action127< 'input, >( input: &'input str, @@ -6455,13 +6506,13 @@ fn __action126< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action85( + let __temp0 = __action86( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action114( + __action115( input, __0, __temp0, diff --git a/programs/good/loops/while_continue.test b/programs/good/loops/while_continue.test index d5b1507..456748e 100644 --- a/programs/good/loops/while_continue.test +++ b/programs/good/loops/while_continue.test @@ -7,9 +7,7 @@ fn main() -> Int { let mut x = 0; let mut sum = 0; while (x = read(); x != 0) { - if x % 2 == 0 { - unit - } else { + if x % 2 == 1 { continue; }; sum = sum + x From 95394c605089abadd5a1c60b93003e45c04bf5a9 Mon Sep 17 00:00:00 2001 From: Vlamonster Date: Mon, 30 Oct 2023 02:33:30 +0100 Subject: [PATCH 08/16] Simplify `If` parsing. --- compiler/src/passes/parse/grammar.lalrpop | 9 +- compiler/src/passes/parse/grammar.rs | 2135 +++++++++++---------- 2 files changed, 1171 insertions(+), 973 deletions(-) diff --git a/compiler/src/passes/parse/grammar.lalrpop b/compiler/src/passes/parse/grammar.lalrpop index 4f45afa..c9eb384 100644 --- a/compiler/src/passes/parse/grammar.lalrpop +++ b/compiler/src/passes/parse/grammar.lalrpop @@ -152,15 +152,10 @@ ExprInStmt: Expr<&'input str> = { sym, bnd: Box::new(bnd), }, - "if" "{" "}" "else" "{" "}" => Expr::If { + "if" "{" "}" "}")?> => Expr::If { cnd: Box::new(cnd), thn: Box::new(thn), - els: Box::new(els), - }, - "if" "{" "}" => Expr::If { - cnd: Box::new(cnd), - thn: Box::new(thn), - els: Box::new(Expr::Lit { val: Lit::Unit }), + els: Box::new(els.unwrap_or(Expr::Lit { val: Lit::Unit })), }, "loop" "{" "}" => Expr::Loop { bdy: Box::new(bdy), diff --git a/compiler/src/passes/parse/grammar.rs b/compiler/src/passes/parse/grammar.rs index c5727d6..7c8bb90 100644 --- a/compiler/src/passes/parse/grammar.rs +++ b/compiler/src/passes/parse/grammar.rs @@ -1,5 +1,5 @@ // auto-generated: "lalrpop 0.20.1" -// sha3: d69707b1434726d2bb476e4c466ebf3b3d22100461d5638e682d23b8515ccd3a +// sha3: fb7f8e78a7b018d3055476f8911c68165d29c7bb39d2a1646dfe1bf6cd66a0ec use std::str::FromStr; use crate::passes::parse::{Def, Expr, Lit, Op, Param}; use crate::passes::parse::PrgParsed; @@ -34,16 +34,16 @@ mod __parse__Program { Variant2(Type), Variant3(core::option::Option), Variant4(Expr<&'input str>), - Variant5(alloc::vec::Vec>), - Variant6(Param<&'input str>), - Variant7(alloc::vec::Vec>), - Variant8(Op), - Variant9(bool), - Variant10(Vec>), - Variant11(Vec>), - Variant12(Def<&'input str, Expr<&'input str>>), - Variant13(alloc::vec::Vec>>), - Variant14(core::option::Option>), + Variant5(core::option::Option>), + Variant6(alloc::vec::Vec>), + Variant7(Param<&'input str>), + Variant8(alloc::vec::Vec>), + Variant9(Op), + Variant10(bool), + Variant11(Vec>), + Variant12(Vec>), + Variant13(Def<&'input str, Expr<&'input str>>), + Variant14(alloc::vec::Vec>>), Variant15(i64), Variant16(core::option::Option>), Variant17(PrgParsed<'input>), @@ -56,9 +56,9 @@ mod __parse__Program { // State 2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 3 - 0, 0, 0, 0, 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, + 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, // State 4 - 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, + 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, // State 6 @@ -70,23 +70,23 @@ mod __parse__Program { // State 9 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 10 - 0, -54, 0, -54, 0, -54, 0, 90, -54, 91, 0, 0, 0, -54, -54, -54, 0, -54, -54, -54, 0, 0, 0, 0, -54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -54, -54, -54, 0, 0, + 0, -57, 0, -57, 0, -57, 0, 90, -57, 91, 0, 0, 0, -57, -57, -57, 0, -57, -57, -57, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, -57, -57, 0, 0, // State 11 - 0, 92, 0, -64, 0, -64, 0, 0, -64, 0, 0, 0, 0, -64, 93, 94, 0, 95, 96, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, -64, -64, 0, 0, + 0, 92, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, -67, 93, 94, 0, 95, 96, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, -67, -67, 0, 0, // State 12 - 0, 0, 0, 98, 0, -74, 0, 0, -74, 0, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -74, -74, -74, 0, 0, + 0, 0, 0, 98, 0, -77, 0, 0, -77, 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, -77, -77, -77, 0, 0, // State 13 - 0, 0, 0, 0, 0, -75, 0, 0, -75, 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, -75, 99, -75, 0, 0, + 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 99, -78, 0, 0, // State 14 - 0, -78, 100, -78, 0, -78, 101, -78, -78, -78, 0, 102, 0, -78, -78, -78, 0, -78, -78, -78, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, -78, -78, 0, 0, + 0, -81, 100, -81, 0, -81, 101, -81, -81, -81, 0, 102, 0, -81, -81, -81, 0, -81, -81, -81, 0, 0, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -81, -81, -81, 0, 0, // State 15 - 0, -88, 0, -88, 0, -88, 0, 0, -88, 0, 0, 0, 0, -88, -88, -88, 0, -88, -88, -88, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -88, -88, -88, 0, 0, + 0, -91, 0, -91, 0, -91, 0, 0, -91, 0, 0, 0, 0, -91, -91, -91, 0, -91, -91, -91, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, -91, -91, 0, 0, // State 16 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 17 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 18 - 79, 0, 0, 0, 18, -71, 0, 0, -71, 80, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, -71, 88, 49, + 79, 0, 0, 0, 18, -74, 0, 0, -74, 80, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, -74, 88, 49, // State 19 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 20 @@ -108,9 +108,9 @@ mod __parse__Program { // State 28 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 29 - 79, 0, 0, 0, 18, -33, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, + 79, 0, 0, 0, 18, -36, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 30 - 79, 0, 0, 0, 18, -83, 0, 0, -83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -83, 88, 49, + 79, 0, 0, 0, 18, -86, 0, 0, -86, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -86, 88, 49, // State 31 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 32 @@ -120,7 +120,7 @@ mod __parse__Program { // State 34 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 35 - 79, 0, 0, 0, 18, -35, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, + 79, 0, 0, 0, 18, -38, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 36 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 37 @@ -130,89 +130,89 @@ mod __parse__Program { // State 39 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 40 - 79, 0, 0, 0, 18, -80, 0, 0, -80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -80, 88, 49, + 79, 0, 0, 0, 18, -83, 0, 0, -83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -83, 88, 49, // State 41 - 79, 0, 0, 0, 18, -79, 0, 0, -79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -79, 88, 49, + 79, 0, 0, 0, 18, -82, 0, 0, -82, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -82, 88, 49, // State 42 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 44 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 46 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 47 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 48 - 0, -91, -91, -91, -91, -91, -91, -91, -91, -91, 0, -91, -91, -91, -91, -91, -91, -91, -91, -91, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, -91, -91, 0, 0, + 0, -94, -94, -94, -94, -94, -94, -94, -94, -94, 0, -94, -94, -94, -94, -94, -94, -94, -94, -94, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, -94, -94, 0, 0, // State 49 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, // State 50 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 51 - 0, 0, 0, 0, 0, -36, 0, 0, 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, 0, 0, + 0, 0, 0, 0, 0, -39, 0, 0, 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, 0, 0, // State 52 - 0, 0, 0, 0, 0, -38, 0, 0, 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, 0, 0, + 0, 0, 0, 0, 0, -41, 0, 0, 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, 0, 0, // State 53 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, // State 54 - 0, 0, 0, 0, 0, -14, 0, 0, 0, 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, -14, + 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, // State 55 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 56 - 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, + 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, // State 57 - 0, 0, 0, 0, 0, -99, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -102, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 58 - 0, 0, 0, 0, 0, -105, 0, 0, -105, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, -108, 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, -108, 0, 0, 0, 0, // State 59 - 0, 0, 0, 0, 0, -104, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, 0, 0, 0, 0, - // State 60 0, 0, 0, 0, 0, -107, 0, 0, -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, 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, + // State 60 + 0, 0, 0, 0, 0, -110, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, 0, 0, 0, // State 61 - 0, 0, 0, 0, 0, -106, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -106, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -109, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, // State 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, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, // State 63 - 0, -56, -56, -56, -56, -56, -56, -56, -56, -56, 0, -56, 0, -56, -56, -56, 0, -56, -56, -56, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, -56, -56, 0, 0, + 0, -59, -59, -59, -59, -59, -59, -59, -59, -59, 0, -59, 0, -59, -59, -59, 0, -59, -59, -59, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, -59, -59, 0, 0, // State 64 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, // State 65 - 0, -29, 0, -29, 0, -29, 0, 0, -29, 0, 0, 0, 0, -29, -29, -29, 0, -29, -29, -29, 0, 0, 0, 0, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -29, -29, -29, 0, 0, + 0, -32, 0, -32, 0, -32, 0, 0, -32, 0, 0, 0, 0, -32, -32, -32, 0, -32, -32, -32, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, -32, -32, 0, 0, // State 66 - 0, -63, -63, -63, 30, -63, -63, -63, -63, -63, 0, -63, 0, -63, -63, -63, 0, -63, -63, -63, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, -63, -63, 0, 0, + 0, -66, -66, -66, 30, -66, -66, -66, -66, -66, 0, -66, 0, -66, -66, -66, 0, -66, -66, -66, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, -66, -66, 0, 0, // State 67 - 0, -87, -87, -87, 0, -87, -87, -87, -87, -87, 0, -87, 0, -87, -87, -87, 0, -87, -87, -87, 0, 0, 0, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, -87, -87, 0, 0, + 0, -90, -90, -90, 0, -90, -90, -90, -90, -90, 0, -90, 0, -90, -90, -90, 0, -90, -90, -90, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, -90, -90, 0, 0, // State 68 - 0, 0, 0, -23, 0, -23, 0, 0, -23, 0, 0, 0, 0, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, -23, -23, 0, 0, + 0, 0, 0, -26, 0, -26, 0, 0, -26, 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, -26, -26, -26, 0, 0, // State 69 - 0, 0, 0, 0, 0, -85, 0, 0, -85, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -85, 0, 0, + 0, 0, 0, 0, 0, -88, 0, 0, -88, 0, 0, 0, 0, 31, 0, 0, 0, 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, // State 70 - 0, 0, 0, 0, 0, -25, 0, 0, -25, 0, 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -25, -25, -25, 0, 0, + 0, 0, 0, 0, 0, -28, 0, 0, -28, 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, 0, 0, 0, 0, -28, -28, -28, 0, 0, // State 71 - 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, -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, -73, 0, 0, + 0, 0, 0, 0, 0, -76, 0, 0, -76, 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, -76, 0, 0, // State 72 - 0, -19, 0, -19, 0, -19, 0, -19, -19, -19, 0, 0, 0, -19, -19, -19, 0, -19, -19, -19, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19, -19, -19, 0, 0, + 0, -22, 0, -22, 0, -22, 0, -22, -22, -22, 0, 0, 0, -22, -22, -22, 0, -22, -22, -22, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, -22, -22, 0, 0, // State 73 - 0, 0, 0, 0, 0, -51, 0, 0, -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, -51, 0, 0, + 0, 0, 0, 0, 0, -54, 0, 0, -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, -54, 0, 0, // State 74 - 0, -27, -27, -27, 0, -27, -27, -27, -27, -27, 0, -27, 0, -27, -27, -27, 0, -27, -27, -27, 0, 0, 0, 0, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -27, -27, -27, 0, 0, + 0, -30, -30, -30, 0, -30, -30, -30, -30, -30, 0, -30, 0, -30, -30, -30, 0, -30, -30, -30, 0, 0, 0, 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -30, -30, -30, 0, 0, // State 75 - 0, -21, 0, -21, 0, -21, 0, 0, -21, 0, 0, 0, 0, -21, -21, -21, 0, -21, -21, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, -21, -21, 0, 0, + 0, -24, 0, -24, 0, -24, 0, 0, -24, 0, 0, 0, 0, -24, -24, -24, 0, -24, -24, -24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -24, -24, -24, 0, 0, // State 76 - 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, 0, -58, -58, -58, 32, -58, -58, -58, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -58, 0, 0, + 0, -61, -61, -61, -61, -61, -61, -61, -61, -61, 0, -61, 0, -61, -61, -61, 32, -61, -61, -61, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, -61, 0, 0, // State 77 - 0, -55, -55, -55, -55, -55, -55, -55, -55, -55, 0, -55, 0, -55, -55, -55, 0, -55, -55, -55, 0, 0, 0, 0, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55, -55, -55, 0, 0, + 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, 0, -58, -58, -58, 0, -58, -58, -58, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -58, -58, 0, 0, // State 78 - -109, 0, 0, 0, -109, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, 0, -109, -109, -109, -109, 0, 0, 0, 0, -109, -109, + -112, 0, 0, 0, -112, 0, 0, 0, 0, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 0, 0, 0, 0, 0, -112, -112, -112, -112, 0, 0, 0, 0, -112, -112, // State 79 - -108, 0, 0, 0, -108, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -108, 0, 0, 0, 0, 0, -108, -108, -108, -108, 0, 0, 0, 0, -108, -108, + -111, 0, 0, 0, -111, 0, 0, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, 0, 0, 0, 0, -111, -111, -111, -111, 0, 0, 0, 0, -111, -111, // State 80 - 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, -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, -72, 0, 0, + 0, 0, 0, 0, 0, -75, 0, 0, -75, 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, -75, 0, 0, // State 81 - 0, -31, -31, -31, -31, -31, -31, -31, -31, -31, 0, -31, 0, -31, -31, -31, 0, -31, -31, -31, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, -31, -31, 0, 0, + 0, -34, -34, -34, -34, -34, -34, -34, -34, -34, 0, -34, 0, -34, -34, -34, 0, -34, -34, -34, 0, 0, 0, 0, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -34, -34, -34, 0, 0, // State 82 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, // State 83 @@ -220,51 +220,51 @@ mod __parse__Program { // State 84 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 85 - 0, -30, -30, -30, -30, -30, -30, -30, -30, -30, 0, -30, 0, -30, -30, -30, 0, -30, -30, -30, 0, 0, 0, 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -30, -30, -30, 0, 0, + 0, -33, -33, -33, -33, -33, -33, -33, -33, -33, 0, -33, 0, -33, -33, -33, 0, -33, -33, -33, 0, 0, 0, 0, -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -33, -33, -33, 0, 0, // State 86 - 0, -57, -57, -57, -57, -57, -57, -57, -57, -57, 0, -57, 0, -57, -57, -57, 0, -57, -57, -57, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, -57, -57, 0, 0, + 0, -60, -60, -60, -60, -60, -60, -60, -60, -60, 0, -60, 0, -60, -60, -60, 0, -60, -60, -60, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, -60, -60, 0, 0, // State 87 - 0, -97, -97, -97, -97, -97, -97, -97, -97, -97, 0, -97, 0, -97, -97, -97, 0, -97, -97, -97, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, -97, -97, 0, 0, + 0, -100, -100, -100, -100, -100, -100, -100, -100, -100, 0, -100, 0, -100, -100, -100, 0, -100, -100, -100, 0, 0, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, -100, 0, 0, // State 88 - 0, 0, 0, 0, 0, -98, 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, + 0, 0, 0, 0, 0, -101, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 89 - -16, 0, 0, 0, -16, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, -16, -16, -16, -16, 0, 0, 0, 0, -16, -16, + -19, 0, 0, 0, -19, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, -19, -19, -19, -19, 0, 0, 0, 0, -19, -19, // State 90 - -17, 0, 0, 0, -17, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, -17, -17, -17, -17, 0, 0, 0, 0, -17, -17, + -20, 0, 0, 0, -20, 0, 0, 0, 0, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, 0, 0, 0, 0, 0, -20, -20, -20, -20, 0, 0, 0, 0, -20, -20, // State 91 - -41, 0, 0, 0, -41, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, -41, -41, -41, -41, 0, 0, 0, 0, -41, -41, - // State 92 -44, 0, 0, 0, -44, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, -44, -44, -44, -44, 0, 0, 0, 0, -44, -44, + // State 92 + -47, 0, 0, 0, -47, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, -47, -47, -47, -47, 0, 0, 0, 0, -47, -47, // State 93 - -45, 0, 0, 0, -45, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, -45, -45, -45, -45, 0, 0, 0, 0, -45, -45, + -48, 0, 0, 0, -48, 0, 0, 0, 0, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -48, 0, 0, 0, 0, 0, -48, -48, -48, -48, 0, 0, 0, 0, -48, -48, // State 94 - -40, 0, 0, 0, -40, 0, 0, 0, 0, -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -40, 0, 0, 0, 0, 0, -40, -40, -40, -40, 0, 0, 0, 0, -40, -40, + -43, 0, 0, 0, -43, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, -43, -43, -43, -43, 0, 0, 0, 0, -43, -43, // State 95 - -42, 0, 0, 0, -42, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, 0, 0, 0, 0, 0, -42, -42, -42, -42, 0, 0, 0, 0, -42, -42, + -45, 0, 0, 0, -45, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, -45, -45, -45, -45, 0, 0, 0, 0, -45, -45, // State 96 - -43, 0, 0, 0, -43, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, -43, -43, -43, -43, 0, 0, 0, 0, -43, -43, + -46, 0, 0, 0, -46, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, -46, -46, -46, -46, 0, 0, 0, 0, -46, -46, // State 97 - -92, 0, 0, 0, -92, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, -92, -92, -92, -92, 0, 0, 0, 0, -92, -92, + -95, 0, 0, 0, -95, 0, 0, 0, 0, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, 0, 0, 0, 0, 0, -95, -95, -95, -95, 0, 0, 0, 0, -95, -95, // State 98 - -93, 0, 0, 0, -93, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, -93, -93, -93, -93, 0, 0, 0, 0, -93, -93, - // State 99 -96, 0, 0, 0, -96, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, -96, -96, -96, -96, 0, 0, 0, 0, -96, -96, + // State 99 + -99, 0, 0, 0, -99, 0, 0, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0, 0, 0, -99, -99, -99, -99, 0, 0, 0, 0, -99, -99, // State 100 - -94, 0, 0, 0, -94, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, -94, -94, -94, -94, 0, 0, 0, 0, -94, -94, + -97, 0, 0, 0, -97, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, -97, -97, -97, -97, 0, 0, 0, 0, -97, -97, // State 101 - -95, 0, 0, 0, -95, 0, 0, 0, 0, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, 0, 0, 0, 0, 0, -95, -95, -95, -95, 0, 0, 0, 0, -95, -95, + -98, 0, 0, 0, -98, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, -98, -98, -98, -98, 0, 0, 0, 0, -98, -98, // State 102 - -110, 0, 0, 0, -110, 0, 0, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, 0, 0, 0, 0, -110, -110, -110, -110, 0, 0, 0, 0, -110, -110, + -113, 0, 0, 0, -113, 0, 0, 0, 0, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, 0, 0, 0, 0, 0, -113, -113, -113, -113, 0, 0, 0, 0, -113, -113, // State 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, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 104 - 0, -86, -86, -86, 0, -86, -86, -86, -86, -86, 0, -86, 0, -86, -86, -86, 0, -86, -86, -86, 0, 0, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, -86, -86, 0, 0, + 0, -89, -89, -89, 0, -89, -89, -89, -89, -89, 0, -89, 0, -89, -89, -89, 0, -89, -89, -89, 0, 0, 0, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, -89, -89, 0, 0, // State 105 - 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, 0, -58, -58, -58, 0, -58, -58, -58, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -58, -58, 0, 0, + 0, -61, -61, -61, -61, -61, -61, -61, -61, -61, 0, -61, 0, -61, -61, -61, 0, -61, -61, -61, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, -61, -61, 0, 0, // State 106 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 107 - 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, -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, -70, 0, 0, + 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, -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, -73, 0, 0, // State 108 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, // State 109 @@ -276,27 +276,27 @@ mod __parse__Program { // State 112 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, // State 113 - 0, -18, 0, -18, 0, -18, 0, -18, -18, -18, 0, 0, 0, -18, -18, -18, 0, -18, -18, -18, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, -18, -18, 0, 0, + 0, -21, 0, -21, 0, -21, 0, -21, -21, -21, 0, 0, 0, -21, -21, -21, 0, -21, -21, -21, 0, 0, 0, 0, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, -21, -21, 0, 0, // State 114 - 0, -20, 0, -20, 0, -20, 0, 0, -20, 0, 0, 0, 0, -20, -20, -20, 0, -20, -20, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, -20, -20, 0, 0, + 0, -23, 0, -23, 0, -23, 0, 0, -23, 0, 0, 0, 0, -23, -23, -23, 0, -23, -23, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, -23, -23, 0, 0, // State 115 - 0, 0, 0, -22, 0, -22, 0, 0, -22, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, -22, -22, 0, 0, + 0, 0, 0, -25, 0, -25, 0, 0, -25, 0, 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -25, -25, -25, 0, 0, // State 116 - 0, 0, 0, 0, 0, -24, 0, 0, -24, 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, -24, -24, -24, 0, 0, + 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 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, -27, -27, -27, 0, 0, // State 117 - 0, -26, -26, -26, 0, -26, -26, -26, -26, -26, 0, -26, 0, -26, -26, -26, 0, -26, -26, -26, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -26, -26, -26, 0, 0, + 0, -29, -29, -29, 0, -29, -29, -29, -29, -29, 0, -29, 0, -29, -29, -29, 0, -29, -29, -29, 0, 0, 0, 0, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -29, -29, -29, 0, 0, // State 118 - 0, -28, 0, -28, 0, -28, 0, 0, -28, 0, 0, 0, 0, -28, -28, -28, 0, -28, -28, -28, 0, 0, 0, 0, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -28, -28, -28, 0, 0, + 0, -31, 0, -31, 0, -31, 0, 0, -31, 0, 0, 0, 0, -31, -31, -31, 0, -31, -31, -31, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, -31, -31, 0, 0, // State 119 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 120 - 0, 0, 0, 0, 0, -32, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 121 - 0, 0, 0, 0, 0, -84, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, 0, 0, + 0, 0, 0, 0, 0, -87, 0, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, 0, 0, // State 122 - 0, 0, 0, 0, 0, -65, 0, 0, -65, 0, 0, 0, 0, -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, -65, 0, 0, + 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, // State 123 - 0, -59, -59, -59, -59, -59, -59, -59, -59, -59, 0, -59, 0, -59, -59, -59, 0, -59, -59, -59, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, -59, -59, 0, 0, + 0, -62, -62, -62, -62, -62, -62, -62, -62, -62, 0, -62, 0, -62, -62, -62, 0, -62, -62, -62, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, -62, -62, 0, 0, // State 124 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, // State 125 @@ -304,52 +304,52 @@ mod __parse__Program { // State 126 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, 0, 0, 0, 0, 0, // State 127 - 0, -60, -60, -60, 0, -60, -60, -60, -60, -60, 0, -60, 0, -60, -60, -60, 0, -60, -60, -60, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, -60, -60, 0, 0, + 0, -63, -63, -63, 0, -63, -63, -63, -63, -63, 0, -63, 0, -63, -63, -63, 0, -63, -63, -63, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, -63, -63, 0, 0, // State 128 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 129 - 0, 0, 0, 0, 0, -34, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -37, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 130 - 0, -62, -62, -62, 0, -62, -62, -62, -62, -62, 0, -62, 0, -62, -62, -62, 0, -62, -62, -62, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, -62, -62, 0, 0, + 0, -65, -65, -65, 0, -65, -65, -65, -65, -65, 0, -65, 0, -65, -65, -65, 0, -65, -65, -65, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, -65, -65, 0, 0, // State 131 - -9, 0, 0, 0, -9, -9, 0, 0, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9, -9, 0, -9, 0, -9, -9, -9, 0, -9, -9, -9, -9, -9, 0, 0, 0, -9, -9, + -12, 0, 0, 0, -12, -12, 0, 0, 0, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12, -12, 0, -12, 0, -12, -12, -12, 0, -12, -12, -12, -12, -12, 0, 0, 0, -12, -12, // State 132 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, // State 133 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 134 - 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, + 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, -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, -71, 0, 0, // State 135 - 0, -61, -61, -61, 0, -61, -61, -61, -61, -61, 0, -61, 0, -61, -61, -61, 0, -61, -61, -61, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, -61, -61, 0, 0, + 0, -64, -64, -64, 0, -64, -64, -64, -64, -64, 0, -64, 0, -64, -64, -64, 0, -64, -64, -64, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, -64, -64, 0, 0, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, // State 137 - -10, 0, 0, 0, -10, -10, 0, 0, 0, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10, -10, 0, -10, 0, -10, -10, -10, 0, -10, -10, -10, -10, -10, 0, 0, 0, -10, -10, + -13, 0, 0, 0, -13, -13, 0, 0, 0, -13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13, -13, 0, -13, 0, -13, -13, -13, 0, -13, -13, -13, -13, -13, 0, 0, 0, -13, -13, // State 138 - 0, 0, 0, 0, 0, -67, 0, 0, -67, 0, 0, 0, 0, -67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, 0, 0, + 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -70, 0, 0, // State 139 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, // State 140 - 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, + 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, -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, -72, 0, 0, // State 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, 43, 0, 0, 0, 0, // State 142 - 0, 0, 0, 0, 0, -82, 0, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, 0, 0, + 0, 0, 0, 0, 0, -85, 0, 0, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -85, 0, 0, // State 143 - 0, 0, 0, 0, 0, -81, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -81, 0, 0, + 0, 0, 0, 0, 0, -84, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, 0, 0, // State 144 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, // State 145 - 0, 0, 0, 0, 0, -66, 0, 0, -66, 0, 0, 0, 0, -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, -66, 0, 0, + 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, ]; fn __action(state: i16, integer: usize) -> i16 { __ACTION[(state as usize) * 44 + integer] } const __EOF_ACTION: &[i16] = &[ // State 0 - -102, + -105, // State 1 - -103, + -106, // State 2 0, // State 3 @@ -433,13 +433,13 @@ mod __parse__Program { // State 42 0, // State 43 - -49, + -52, // State 44 - -46, + -49, // State 45 - -111, + -114, // State 46 - -50, + -53, // State 47 0, // State 48 @@ -553,7 +553,7 @@ mod __parse__Program { // State 102 0, // State 103 - -90, + -93, // State 104 0, // State 105 @@ -603,7 +603,7 @@ mod __parse__Program { // State 127 0, // State 128 - -89, + -92, // State 129 0, // State 130 @@ -641,25 +641,25 @@ mod __parse__Program { ]; fn __goto(state: i16, nt: usize) -> i16 { match nt { - 5 => 35, - 8 => 4, - 9 => 23, - 10 => 10, - 11 => 11, - 12 => 12, - 13 => 13, - 14 => 14, - 15 => 15, - 16 => 63, - 17 => 119, - 18 => 49, - 19 => 24, - 20 => match state { + 7 => 35, + 10 => 4, + 11 => 23, + 12 => 10, + 13 => 11, + 14 => 12, + 15 => 13, + 16 => 14, + 17 => 15, + 18 => 63, + 19 => 119, + 20 => 49, + 21 => 24, + 22 => match state { 1 => 46, _ => 43, }, - 22 => 1, - 23 => match state { + 24 => 1, + 25 => match state { 17 => 106, 22 => 112, 29 => 120, @@ -671,22 +671,22 @@ mod __parse__Program { 42 => 144, _ => 64, }, - 25 => match state { + 27 => match state { 28 => 118, _ => 65, }, - 26 => 66, - 27 => 67, - 28 => match state { + 28 => 66, + 29 => 67, + 30 => match state { 25 => 115, _ => 68, }, - 29 => 69, - 30 => match state { + 31 => 69, + 32 => match state { 26 => 116, _ => 70, }, - 31 => match state { + 33 => match state { 18 => 107, 19 => 108, 21 => 111, @@ -695,27 +695,27 @@ mod __parse__Program { 39 => 139, _ => 71, }, - 33 => match state { + 35 => match state { 23 => 113, _ => 72, }, - 34 => match state { + 36 => match state { 30 => 121, 40 => 142, 41 => 143, _ => 73, }, - 35 => match state { + 37 => match state { 16 => 104, 27 => 117, _ => 74, }, - 36 => match state { + 38 => match state { 24 => 114, _ => 75, }, - 37 => 44, - 38 => match state { + 39 => 44, + 40 => match state { 2 => 47, 3..=4 => 50, 5 => 55, @@ -724,22 +724,22 @@ mod __parse__Program { 32 => 124, _ => 76, }, - 39 => 25, - 40 => 26, - 41 => 27, - 42 => 77, - 43 => match state { + 41 => 25, + 42 => 26, + 43 => 27, + 44 => 77, + 45 => match state { 4 => 52, _ => 51, }, - 45 => 45, - 46 => match state { + 47 => 45, + 48 => match state { 7 => 62, 9 => 88, _ => 57, }, - 47 => 16, - 48 => 28, + 49 => 16, + 50 => 28, _ => 0, } } @@ -1026,19 +1026,19 @@ mod __parse__Program { } 5 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 4, nonterminal_produced: 3, } } 6 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 4, nonterminal_produced: 4, } } 7 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 0, nonterminal_produced: 4, } } @@ -1050,25 +1050,25 @@ mod __parse__Program { } 9 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 5, + states_to_pop: 0, + nonterminal_produced: 6, } } 10 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 6, } } 11 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 2, nonterminal_produced: 7, } } 12 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 3, nonterminal_produced: 7, } } @@ -1080,8 +1080,8 @@ mod __parse__Program { } 14 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 8, + states_to_pop: 0, + nonterminal_produced: 9, } } 15 => { @@ -1092,8 +1092,8 @@ mod __parse__Program { } 16 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 9, + states_to_pop: 2, + nonterminal_produced: 10, } } 17 => { @@ -1105,69 +1105,69 @@ mod __parse__Program { 18 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 10, - } - } - 19 => { - __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, nonterminal_produced: 11, } } - 20 => { + 19 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 11, } } - 21 => { + 20 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, nonterminal_produced: 12, } } - 22 => { + 21 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 12, } } - 23 => { + 22 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, nonterminal_produced: 13, } } - 24 => { + 23 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 13, } } - 25 => { + 24 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, nonterminal_produced: 14, } } - 26 => { + 25 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 14, } } - 27 => { + 26 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, nonterminal_produced: 15, } } - 28 => { + 27 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 15, } } + 28 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 3, + nonterminal_produced: 16, + } + } 29 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, @@ -1176,8 +1176,8 @@ mod __parse__Program { } 30 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 16, + states_to_pop: 3, + nonterminal_produced: 17, } } 31 => { @@ -1188,91 +1188,91 @@ mod __parse__Program { } 32 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 17, + states_to_pop: 1, + nonterminal_produced: 18, } } 33 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 17, + states_to_pop: 1, + nonterminal_produced: 18, } } 34 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 17, + nonterminal_produced: 19, } } 35 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 18, + states_to_pop: 0, + nonterminal_produced: 19, } } 36 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 18, + states_to_pop: 2, + nonterminal_produced: 19, } } 37 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 18, + states_to_pop: 1, + nonterminal_produced: 19, } } 38 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 18, + nonterminal_produced: 20, } } 39 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 19, + states_to_pop: 0, + nonterminal_produced: 20, } } 40 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 19, + states_to_pop: 2, + nonterminal_produced: 20, } } 41 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 19, + nonterminal_produced: 20, } } 42 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 19, + nonterminal_produced: 21, } } 43 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 19, + nonterminal_produced: 21, } } 44 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 19, + nonterminal_produced: 21, } } 45 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 20, + nonterminal_produced: 21, } } 46 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 1, nonterminal_produced: 21, } } @@ -1290,8 +1290,8 @@ mod __parse__Program { } 49 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 22, + states_to_pop: 0, + nonterminal_produced: 23, } } 50 => { @@ -1308,7 +1308,7 @@ mod __parse__Program { } 52 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 2, nonterminal_produced: 24, } } @@ -1326,116 +1326,116 @@ mod __parse__Program { } 55 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 0, nonterminal_produced: 26, } } 56 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 26, + nonterminal_produced: 27, } } 57 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 26, + nonterminal_produced: 28, } } 58 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 26, + states_to_pop: 1, + nonterminal_produced: 28, } } 59 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 27, + states_to_pop: 1, + nonterminal_produced: 28, } } 60 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 27, + states_to_pop: 1, + nonterminal_produced: 28, } } 61 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 27, + states_to_pop: 3, + nonterminal_produced: 28, } } 62 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 27, + states_to_pop: 3, + nonterminal_produced: 29, } } 63 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 28, + states_to_pop: 4, + nonterminal_produced: 29, } } 64 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 4, nonterminal_produced: 29, } } 65 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 9, + states_to_pop: 1, nonterminal_produced: 29, } } 66 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 29, + states_to_pop: 1, + nonterminal_produced: 30, } } 67 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 29, + states_to_pop: 3, + nonterminal_produced: 31, } } 68 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, - nonterminal_produced: 29, + states_to_pop: 9, + nonterminal_produced: 31, } } 69 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 29, + states_to_pop: 5, + nonterminal_produced: 31, } } 70 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 29, + states_to_pop: 4, + nonterminal_produced: 31, } } 71 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 29, + states_to_pop: 5, + nonterminal_produced: 31, } } 72 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 29, + states_to_pop: 2, + nonterminal_produced: 31, } } 73 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 30, + nonterminal_produced: 31, } } 74 => { @@ -1447,12 +1447,12 @@ mod __parse__Program { 75 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 32, + nonterminal_produced: 31, } } 76 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 1, nonterminal_produced: 32, } } @@ -1464,56 +1464,56 @@ mod __parse__Program { } 78 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, + states_to_pop: 1, nonterminal_produced: 34, } } 79 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, + states_to_pop: 0, nonterminal_produced: 34, } } 80 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, - nonterminal_produced: 34, + states_to_pop: 1, + nonterminal_produced: 35, } } 81 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 6, - nonterminal_produced: 34, + nonterminal_produced: 36, } } 82 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, - nonterminal_produced: 34, + states_to_pop: 5, + nonterminal_produced: 36, } } 83 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, - nonterminal_produced: 34, + states_to_pop: 7, + nonterminal_produced: 36, } } 84 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 34, + states_to_pop: 6, + nonterminal_produced: 36, } } 85 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, - nonterminal_produced: 35, + nonterminal_produced: 36, } } 86 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 35, + states_to_pop: 3, + nonterminal_produced: 36, } } 87 => { @@ -1524,13 +1524,13 @@ mod __parse__Program { } 88 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 10, + states_to_pop: 2, nonterminal_produced: 37, } } 89 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, + states_to_pop: 1, nonterminal_produced: 37, } } @@ -1542,20 +1542,20 @@ mod __parse__Program { } 91 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 10, nonterminal_produced: 39, } } 92 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 40, + states_to_pop: 8, + nonterminal_produced: 39, } } 93 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 41, + nonterminal_produced: 40, } } 94 => { @@ -1567,24 +1567,24 @@ mod __parse__Program { 95 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 41, + nonterminal_produced: 42, } } 96 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 42, + nonterminal_produced: 43, } } 97 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, + states_to_pop: 1, nonterminal_produced: 43, } } 98 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 1, nonterminal_produced: 43, } } @@ -1596,56 +1596,56 @@ mod __parse__Program { } 100 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, - nonterminal_produced: 44, + states_to_pop: 4, + nonterminal_produced: 45, } } 101 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 3, nonterminal_produced: 45, } } 102 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 45, + nonterminal_produced: 46, } } 103 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 0, nonterminal_produced: 46, } } 104 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 46, + states_to_pop: 0, + nonterminal_produced: 47, } } 105 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 46, + nonterminal_produced: 47, } } 106 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 46, + nonterminal_produced: 48, } } 107 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 47, + nonterminal_produced: 48, } } 108 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 47, + nonterminal_produced: 48, } } 109 => { @@ -1654,7 +1654,25 @@ mod __parse__Program { nonterminal_produced: 48, } } - 110 => __state_machine::SimulatedReduce::Accept, + 110 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 49, + } + } + 111 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 49, + } + } + 112 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 50, + } + } + 113 => __state_machine::SimulatedReduce::Accept, _ => panic!("invalid reduction index {}", __reduce_index) } } @@ -2067,6 +2085,15 @@ mod __parse__Program { __reduce109(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 110 => { + __reduce110(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 111 => { + __reduce111(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 112 => { + __reduce112(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 113 => { // __Program = Program => ActionFn(0); let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0; @@ -2087,14 +2114,14 @@ mod __parse__Program { fn __symbol_type_mismatch() -> ! { panic!("symbol type mismatch") } - fn __pop_Variant12< + fn __pop_Variant13< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Def<&'input str, Expr<&'input str>>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant12(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant13(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -2109,25 +2136,25 @@ mod __parse__Program { _ => __symbol_type_mismatch() } } - fn __pop_Variant8< + fn __pop_Variant9< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Op, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } - fn __pop_Variant6< + fn __pop_Variant7< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Param<&'input str>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant6(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant7(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -2153,80 +2180,80 @@ mod __parse__Program { _ => __symbol_type_mismatch() } } - fn __pop_Variant10< + fn __pop_Variant11< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Vec>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant10(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant11(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } - fn __pop_Variant11< + fn __pop_Variant12< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Vec>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant11(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant12(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } - fn __pop_Variant13< + fn __pop_Variant14< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, alloc::vec::Vec>>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant13(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant14(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } - fn __pop_Variant5< + fn __pop_Variant6< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, alloc::vec::Vec>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant5(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant6(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } - fn __pop_Variant7< + fn __pop_Variant8< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, alloc::vec::Vec>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant7(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant8(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } - fn __pop_Variant9< + fn __pop_Variant10< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, bool, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant9(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant10(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } - fn __pop_Variant14< + fn __pop_Variant5< 'input, >( __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, core::option::Option>, usize) { match __symbols.pop() { - Some((__l, __Symbol::Variant14(__v), __r)) => (__l, __v, __r), + Some((__l, __Symbol::Variant5(__v), __r)) => (__l, __v, __r), _ => __symbol_type_mismatch() } } @@ -2294,11 +2321,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // "mut"? = "mut" => ActionFn(75); + // "mut"? = "mut" => ActionFn(77); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action75::<>(input, __sym0); + let __nt = super::__action77::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (1, 0) } @@ -2311,10 +2338,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // "mut"? = => ActionFn(76); + // "mut"? = => ActionFn(78); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action76::<>(input, &__start, &__end); + let __nt = super::__action78::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (0, 0) } @@ -2327,13 +2354,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" ) = "->", Type => ActionFn(79); + // ("->" ) = "->", Type => ActionFn(81); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant2(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action79::<>(input, __sym0, __sym1); + let __nt = super::__action81::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 1) } @@ -2346,13 +2373,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" )? = "->", Type => ActionFn(105); + // ("->" )? = "->", Type => ActionFn(107); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant2(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action105::<>(input, __sym0, __sym1); + let __nt = super::__action107::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 2) } @@ -2365,10 +2392,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" )? = => ActionFn(78); + // ("->" )? = => ActionFn(80); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action78::<>(input, &__start, &__end); + let __nt = super::__action80::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (0, 2) } @@ -2381,15 +2408,17 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Expr, "," => ActionFn(94); - assert!(__symbols.len() >= 2); + // ("else" "{" "}") = "else", "{", Expr, "}" => ActionFn(76); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant4(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action94::<>(input, __sym0, __sym1); + let __end = __sym3.2; + let __nt = super::__action76::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (2, 3) + (4, 3) } fn __reduce6< 'input, @@ -2400,12 +2429,17 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(92); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); - let __end = __start; - let __nt = super::__action92::<>(input, &__start, &__end); + // ("else" "{" "}")? = "else", "{", Expr, "}" => ActionFn(110); + assert!(__symbols.len() >= 4); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant4(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym3.2; + let __nt = super::__action110::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (0, 4) + (4, 4) } fn __reduce7< 'input, @@ -2416,13 +2450,12 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(93); - let __sym0 = __pop_Variant5(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action93::<>(input, __sym0); + // ("else" "{" "}")? = => ActionFn(75); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); + let __end = __start; + let __nt = super::__action75::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (1, 4) + (0, 4) } fn __reduce8< 'input, @@ -2433,14 +2466,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(108); + // ( ",") = Expr, "," => ActionFn(96); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action108::<>(input, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant5(__nt), __end)); + let __nt = super::__action96::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 5) } fn __reduce9< @@ -2452,16 +2485,12 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(109); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant4(__symbols); - let __sym0 = __pop_Variant5(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action109::<>(input, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant5(__nt), __end)); - (3, 5) + // ( ",")* = => ActionFn(94); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); + let __end = __start; + let __nt = super::__action94::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant6(__nt), __end)); + (0, 6) } fn __reduce10< 'input, @@ -2472,15 +2501,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Param, "," => ActionFn(89); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant0(__symbols); + // ( ",")* = ( ",")+ => ActionFn(95); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action89::<>(input, __sym0, __sym1); + let __end = __sym0.2; + let __nt = super::__action95::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); - (2, 6) + (1, 6) } fn __reduce11< 'input, @@ -2491,12 +2518,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(87); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); - let __end = __start; - let __nt = super::__action87::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (0, 7) + // ( ",")+ = Expr, "," => ActionFn(113); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant4(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action113::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant6(__nt), __end)); + (2, 7) } fn __reduce12< 'input, @@ -2507,13 +2537,16 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(88); - let __sym0 = __pop_Variant7(__symbols); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(114); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant4(__symbols); + let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action88::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (1, 7) + let __end = __sym2.2; + let __nt = super::__action114::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant6(__nt), __end)); + (3, 7) } fn __reduce13< 'input, @@ -2524,13 +2557,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Param, "," => ActionFn(112); + // ( ",") = Param, "," => ActionFn(91); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); - let __sym0 = __pop_Variant6(__symbols); + let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action112::<>(input, __sym0, __sym1); + let __nt = super::__action91::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (2, 8) } @@ -2543,16 +2576,12 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Param, "," => ActionFn(113); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant0(__symbols); - let __sym1 = __pop_Variant6(__symbols); - let __sym0 = __pop_Variant7(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action113::<>(input, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (3, 8) + // ( ",")* = => ActionFn(89); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); + let __end = __start; + let __nt = super::__action89::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); + (0, 9) } fn __reduce15< 'input, @@ -2563,11 +2592,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // AdditiveOp = "+" => ActionFn(38); - let __sym0 = __pop_Variant0(__symbols); + // ( ",")* = ( ",")+ => ActionFn(90); + let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action38::<>(input, __sym0); + let __nt = super::__action90::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 9) } @@ -2580,13 +2609,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // AdditiveOp = "-" => ActionFn(39); - let __sym0 = __pop_Variant0(__symbols); + // ( ",")+ = Param, "," => ActionFn(117); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action39::<>(input, __sym0); + let __end = __sym1.2; + let __nt = super::__action117::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 9) + (2, 10) } fn __reduce17< 'input, @@ -2597,15 +2628,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, AdditiveOp, ExprMultiplicative => ActionFn(63); + // ( ",")+ = ( ",")+, Param, "," => ActionFn(118); assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant4(__symbols); - let __sym1 = __pop_Variant8(__symbols); - let __sym0 = __pop_Variant4(__symbols); + let __sym2 = __pop_Variant0(__symbols); + let __sym1 = __pop_Variant7(__symbols); + let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + let __nt = super::__action118::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (3, 10) } fn __reduce18< @@ -2617,13 +2648,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprMultiplicative => ActionFn(64); - let __sym0 = __pop_Variant4(__symbols); + // AdditiveOp = "+" => ActionFn(37); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action64::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 10) + let __nt = super::__action37::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 11) } fn __reduce19< 'input, @@ -2634,35 +2665,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, ComparativeOp, ExprXor => ActionFn(67); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant4(__symbols); - let __sym1 = __pop_Variant8(__symbols); - let __sym0 = __pop_Variant4(__symbols); - let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (3, 11) - } - fn __reduce20< - 'input, - >( - input: &'input str, - __lookahead_start: Option<&usize>, - __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, - _: core::marker::PhantomData<(&'input ())>, - ) -> (usize, usize) - { - // BinaryOps = ExprXor => ActionFn(68); - let __sym0 = __pop_Variant4(__symbols); + // AdditiveOp = "-" => ActionFn(38); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action68::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + let __nt = super::__action38::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 11) } - fn __reduce21< + fn __reduce20< 'input, >( input: &'input str, @@ -2671,18 +2682,18 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, LogicalAndOp, ExprComparative => ActionFn(69); + // BinaryOps = BinaryOps, AdditiveOp, ExprMultiplicative => ActionFn(62); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); - let __sym1 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 12) } - fn __reduce22< + fn __reduce21< 'input, >( input: &'input str, @@ -2691,15 +2702,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprComparative => ActionFn(70); + // BinaryOps = ExprMultiplicative => ActionFn(63); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action70::<>(input, __sym0); + let __nt = super::__action63::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 12) } - fn __reduce23< + fn __reduce22< 'input, >( input: &'input str, @@ -2708,18 +2719,18 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, LogicalOrOp, ExprLogicalAnd => ActionFn(71); + // BinaryOps = BinaryOps, ComparativeOp, ExprXor => ActionFn(66); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); - let __sym1 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action71::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 13) } - fn __reduce24< + fn __reduce23< 'input, >( input: &'input str, @@ -2728,15 +2739,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprLogicalAnd => ActionFn(72); + // BinaryOps = ExprXor => ActionFn(67); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action72::<>(input, __sym0); + let __nt = super::__action67::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 13) } - fn __reduce25< + fn __reduce24< 'input, >( input: &'input str, @@ -2745,18 +2756,18 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, MultiplicativeOp, ExprUnary => ActionFn(61); + // BinaryOps = BinaryOps, LogicalAndOp, ExprComparative => ActionFn(68); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); - let __sym1 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 14) } - fn __reduce26< + fn __reduce25< 'input, >( input: &'input str, @@ -2765,15 +2776,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprUnary => ActionFn(62); + // BinaryOps = ExprComparative => ActionFn(69); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action62::<>(input, __sym0); + let __nt = super::__action69::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 14) } - fn __reduce27< + fn __reduce26< 'input, >( input: &'input str, @@ -2782,18 +2793,18 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, XorOp, ExprAdditive => ActionFn(65); + // BinaryOps = BinaryOps, LogicalOrOp, ExprLogicalAnd => ActionFn(70); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); - let __sym1 = __pop_Variant8(__symbols); + let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 15) } - fn __reduce28< + fn __reduce27< 'input, >( input: &'input str, @@ -2802,14 +2813,34 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprAdditive => ActionFn(66); + // BinaryOps = ExprLogicalAnd => ActionFn(71); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action66::<>(input, __sym0); + let __nt = super::__action71::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 15) } + fn __reduce28< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // BinaryOps = BinaryOps, MultiplicativeOp, ExprUnary => ActionFn(60); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant4(__symbols); + let __sym1 = __pop_Variant9(__symbols); + let __sym0 = __pop_Variant4(__symbols); + let __start = __sym0.0; + let __end = __sym2.2; + let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + (3, 16) + } fn __reduce29< 'input, >( @@ -2819,12 +2850,12 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Bool = "true" => ActionFn(58); - let __sym0 = __pop_Variant0(__symbols); + // BinaryOps = ExprUnary => ActionFn(61); + let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action58::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + let __nt = super::__action61::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 16) } fn __reduce30< @@ -2836,13 +2867,16 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Bool = "false" => ActionFn(59); - let __sym0 = __pop_Variant0(__symbols); + // BinaryOps = BinaryOps, XorOp, ExprAdditive => ActionFn(64); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant4(__symbols); + let __sym1 = __pop_Variant9(__symbols); + let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action59::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 16) + let __end = __sym2.2; + let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + (3, 17) } fn __reduce31< 'input, @@ -2853,12 +2887,12 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(118); + // BinaryOps = ExprAdditive => ActionFn(65); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action118::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant10(__nt), __end)); + let __nt = super::__action65::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 17) } fn __reduce32< @@ -2870,12 +2904,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(119); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); - let __end = __start; - let __nt = super::__action119::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (0, 17) + // Bool = "true" => ActionFn(57); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action57::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant10(__nt), __end)); + (1, 18) } fn __reduce33< 'input, @@ -2886,15 +2921,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(120); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant4(__symbols); - let __sym0 = __pop_Variant5(__symbols); + // Bool = "false" => ActionFn(58); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action120::<>(input, __sym0, __sym1); + let __end = __sym0.2; + let __nt = super::__action58::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (2, 17) + (1, 18) } fn __reduce34< 'input, @@ -2905,13 +2938,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(121); - let __sym0 = __pop_Variant5(__symbols); + // Comma = Expr => ActionFn(123); + let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action121::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 17) + let __nt = super::__action123::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant11(__nt), __end)); + (1, 19) } fn __reduce35< 'input, @@ -2922,13 +2955,12 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Param => ActionFn(124); - let __sym0 = __pop_Variant6(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action124::<>(input, __sym0); + // Comma = => ActionFn(124); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); + let __end = __start; + let __nt = super::__action124::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (1, 18) + (0, 19) } fn __reduce36< 'input, @@ -2939,12 +2971,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(125); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); - let __end = __start; - let __nt = super::__action125::<>(input, &__start, &__end); + // Comma = ( ",")+, Expr => ActionFn(125); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant4(__symbols); + let __sym0 = __pop_Variant6(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action125::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (0, 18) + (2, 19) } fn __reduce37< 'input, @@ -2955,15 +2990,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Param => ActionFn(126); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant6(__symbols); - let __sym0 = __pop_Variant7(__symbols); + // Comma = ( ",")+ => ActionFn(126); + let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action126::<>(input, __sym0, __sym1); + let __end = __sym0.2; + let __nt = super::__action126::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (2, 18) + (1, 19) } fn __reduce38< 'input, @@ -2974,13 +3007,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(127); + // Comma = Param => ActionFn(129); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action127::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant11(__nt), __end)); - (1, 18) + let __nt = super::__action129::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (1, 20) } fn __reduce39< 'input, @@ -2991,13 +3024,12 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "==" => ActionFn(31); - let __sym0 = __pop_Variant0(__symbols); - let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action31::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 19) + // Comma = => ActionFn(130); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); + let __end = __start; + let __nt = super::__action130::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (0, 20) } fn __reduce40< 'input, @@ -3008,13 +3040,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "!=" => ActionFn(32); - let __sym0 = __pop_Variant0(__symbols); + // Comma = ( ",")+, Param => ActionFn(131); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant7(__symbols); + let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; - let __end = __sym0.2; - let __nt = super::__action32::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 19) + let __end = __sym1.2; + let __nt = super::__action131::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (2, 20) } fn __reduce41< 'input, @@ -3025,13 +3059,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = ">" => ActionFn(33); - let __sym0 = __pop_Variant0(__symbols); + // Comma = ( ",")+ => ActionFn(132); + let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action33::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 19) + let __nt = super::__action132::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant12(__nt), __end)); + (1, 20) } fn __reduce42< 'input, @@ -3042,13 +3076,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = ">=" => ActionFn(34); + // ComparativeOp = "==" => ActionFn(30); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action34::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 19) + let __nt = super::__action30::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 21) } fn __reduce43< 'input, @@ -3059,13 +3093,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "<" => ActionFn(35); + // ComparativeOp = "!=" => ActionFn(31); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action35::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 19) + let __nt = super::__action31::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 21) } fn __reduce44< 'input, @@ -3076,13 +3110,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "<=" => ActionFn(36); + // ComparativeOp = ">" => ActionFn(32); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action36::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 19) + let __nt = super::__action32::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 21) } fn __reduce45< 'input, @@ -3093,13 +3127,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def = Fn => ActionFn(2); - let __sym0 = __pop_Variant12(__symbols); + // ComparativeOp = ">=" => ActionFn(33); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action2::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (1, 20) + let __nt = super::__action33::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 21) } fn __reduce46< 'input, @@ -3110,12 +3144,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def* = => ActionFn(81); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); - let __end = __start; - let __nt = super::__action81::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (0, 21) + // ComparativeOp = "<" => ActionFn(34); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action34::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 21) } fn __reduce47< 'input, @@ -3126,12 +3161,12 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def* = Def+ => ActionFn(82); - let __sym0 = __pop_Variant13(__symbols); + // ComparativeOp = "<=" => ActionFn(35); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action82::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant13(__nt), __end)); + let __nt = super::__action35::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 21) } fn __reduce48< @@ -3143,11 +3178,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def+ = Def => ActionFn(83); - let __sym0 = __pop_Variant12(__symbols); + // Def = Fn => ActionFn(2); + let __sym0 = __pop_Variant13(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action83::<>(input, __sym0); + let __nt = super::__action2::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (1, 22) } @@ -3160,15 +3195,12 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def+ = Def+, Def => ActionFn(84); - assert!(__symbols.len() >= 2); - let __sym1 = __pop_Variant12(__symbols); - let __sym0 = __pop_Variant13(__symbols); - let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action84::<>(input, __sym0, __sym1); - __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (2, 22) + // Def* = => ActionFn(83); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); + let __end = __start; + let __nt = super::__action83::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); + (0, 23) } fn __reduce50< 'input, @@ -3179,12 +3211,12 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr = ExprStmt => ActionFn(9); - let __sym0 = __pop_Variant4(__symbols); + // Def* = Def+ => ActionFn(84); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action9::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + let __nt = super::__action84::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 23) } fn __reduce51< @@ -3196,11 +3228,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = Expr => ActionFn(90); - let __sym0 = __pop_Variant4(__symbols); + // Def+ = Def => ActionFn(85); + let __sym0 = __pop_Variant13(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action90::<>(input, __sym0); + let __nt = super::__action85::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 24) } @@ -3213,12 +3245,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = => ActionFn(91); - let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); - let __end = __start; - let __nt = super::__action91::<>(input, &__start, &__end); + // Def+ = Def+, Def => ActionFn(86); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant13(__symbols); + let __sym0 = __pop_Variant14(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action86::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (0, 24) + (2, 24) } fn __reduce53< 'input, @@ -3229,11 +3264,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAdditive = BinaryOps => ActionFn(27); + // Expr = ExprStmt => ActionFn(9); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action27::<>(input, __sym0); + let __nt = super::__action9::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 25) } @@ -3246,12 +3281,12 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Num => ActionFn(51); - let __sym0 = __pop_Variant15(__symbols); + // Expr? = Expr => ActionFn(92); + let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action51::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + let __nt = super::__action92::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (1, 26) } fn __reduce55< @@ -3263,15 +3298,31 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Bool => ActionFn(52); - let __sym0 = __pop_Variant9(__symbols); + // Expr? = => ActionFn(93); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); + let __end = __start; + let __nt = super::__action93::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant5(__nt), __end)); + (0, 26) + } + fn __reduce56< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ExprAdditive = BinaryOps => ActionFn(26); + let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action52::<>(input, __sym0); + let __nt = super::__action26::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 26) + (1, 27) } - fn __reduce56< + fn __reduce57< 'input, >( input: &'input str, @@ -3280,15 +3331,49 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = "unit" => ActionFn(53); + // ExprAtom = Num => ActionFn(50); + let __sym0 = __pop_Variant15(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action50::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + (1, 28) + } + fn __reduce58< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ExprAtom = Bool => ActionFn(51); + let __sym0 = __pop_Variant10(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action51::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + (1, 28) + } + fn __reduce59< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ExprAtom = "unit" => ActionFn(52); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action53::<>(input, __sym0); + let __nt = super::__action52::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 26) + (1, 28) } - fn __reduce57< + fn __reduce60< 'input, >( input: &'input str, @@ -3297,15 +3382,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Ident => ActionFn(54); + // ExprAtom = Ident => ActionFn(53); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action54::<>(input, __sym0); + let __nt = super::__action53::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 26) + (1, 28) } - fn __reduce58< + fn __reduce61< 'input, >( input: &'input str, @@ -3314,18 +3399,18 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = "(", Expr, ")" => ActionFn(55); + // ExprAtom = "(", Expr, ")" => ActionFn(54); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action55::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (3, 26) + (3, 28) } - fn __reduce59< + fn __reduce62< 'input, >( input: &'input str, @@ -3334,18 +3419,18 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = "read", "(", ")" => ActionFn(47); + // ExprCall = "read", "(", ")" => ActionFn(46); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (3, 27) + (3, 29) } - fn __reduce60< + fn __reduce63< 'input, >( input: &'input str, @@ -3354,7 +3439,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = "print", "(", Expr, ")" => ActionFn(48); + // ExprCall = "print", "(", Expr, ")" => ActionFn(47); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant4(__symbols); @@ -3362,11 +3447,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (4, 27) + (4, 29) } - fn __reduce61< + fn __reduce64< 'input, >( input: &'input str, @@ -3375,19 +3460,19 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = ExprAtom, "(", Comma, ")" => ActionFn(49); + // ExprCall = ExprAtom, "(", Comma, ")" => ActionFn(48); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant10(__symbols); + let __sym2 = __pop_Variant11(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action49::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (4, 27) + (4, 29) } - fn __reduce62< + fn __reduce65< 'input, >( input: &'input str, @@ -3396,15 +3481,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = ExprAtom => ActionFn(50); + // ExprCall = ExprAtom => ActionFn(49); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action50::<>(input, __sym0); + let __nt = super::__action49::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 27) + (1, 29) } - fn __reduce63< + fn __reduce66< 'input, >( input: &'input str, @@ -3413,15 +3498,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprComparative = BinaryOps => ActionFn(25); + // ExprComparative = BinaryOps => ActionFn(24); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action25::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 28) + (1, 30) } - fn __reduce64< + fn __reduce67< 'input, >( input: &'input str, @@ -3439,9 +3524,9 @@ mod __parse__Program { let __end = __sym2.2; let __nt = super::__action15::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (3, 29) + (3, 31) } - fn __reduce65< + fn __reduce68< 'input, >( input: &'input str, @@ -3450,7 +3535,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "if", ExprLogicalOr, "{", Expr, "}", "else", "{", Expr, "}" => ActionFn(16); + // ExprInStmt = "if", ExprLogicalOr, "{", Expr, "}", "else", "{", Expr, "}" => ActionFn(111); assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant4(__symbols); @@ -3463,11 +3548,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym8.2; - let __nt = super::__action16::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); + let __nt = super::__action111::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (9, 29) + (9, 31) } - fn __reduce66< + fn __reduce69< 'input, >( input: &'input str, @@ -3476,7 +3561,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "if", ExprLogicalOr, "{", Expr, "}" => ActionFn(17); + // ExprInStmt = "if", ExprLogicalOr, "{", Expr, "}" => ActionFn(112); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant4(__symbols); @@ -3485,11 +3570,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action17::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action112::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (5, 29) + (5, 31) } - fn __reduce67< + fn __reduce70< 'input, >( input: &'input str, @@ -3498,7 +3583,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "loop", "{", Expr, "}" => ActionFn(18); + // ExprInStmt = "loop", "{", Expr, "}" => ActionFn(17); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant4(__symbols); @@ -3506,11 +3591,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action18::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action17::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (4, 29) + (4, 31) } - fn __reduce68< + fn __reduce71< 'input, >( input: &'input str, @@ -3519,7 +3604,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "while", ExprLogicalOr, "{", Expr, "}" => ActionFn(19); + // ExprInStmt = "while", ExprLogicalOr, "{", Expr, "}" => ActionFn(18); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant4(__symbols); @@ -3528,11 +3613,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action19::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action18::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (5, 29) + (5, 31) } - fn __reduce69< + fn __reduce72< 'input, >( input: &'input str, @@ -3541,17 +3626,17 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "break", ExprLogicalOr => ActionFn(122); + // ExprInStmt = "break", ExprLogicalOr => ActionFn(127); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action122::<>(input, __sym0, __sym1); + let __nt = super::__action127::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (2, 29) + (2, 31) } - fn __reduce70< + fn __reduce73< 'input, >( input: &'input str, @@ -3560,15 +3645,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "break" => ActionFn(123); + // ExprInStmt = "break" => ActionFn(128); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action123::<>(input, __sym0); + let __nt = super::__action128::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 29) + (1, 31) } - fn __reduce71< + fn __reduce74< 'input, >( input: &'input str, @@ -3577,15 +3662,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "continue" => ActionFn(21); + // ExprInStmt = "continue" => ActionFn(20); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action20::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 29) + (1, 31) } - fn __reduce72< + fn __reduce75< 'input, >( input: &'input str, @@ -3594,15 +3679,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = ExprLogicalOr => ActionFn(22); + // ExprInStmt = ExprLogicalOr => ActionFn(21); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action22::<>(input, __sym0); + let __nt = super::__action21::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 29) + (1, 31) } - fn __reduce73< + fn __reduce76< 'input, >( input: &'input str, @@ -3611,15 +3696,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalAnd = BinaryOps => ActionFn(24); + // ExprLogicalAnd = BinaryOps => ActionFn(23); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action24::<>(input, __sym0); + let __nt = super::__action23::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 30) + (1, 32) } - fn __reduce74< + fn __reduce77< 'input, >( input: &'input str, @@ -3628,15 +3713,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr = BinaryOps => ActionFn(23); + // ExprLogicalOr = BinaryOps => ActionFn(22); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 31) + (1, 33) } - fn __reduce75< + fn __reduce78< 'input, >( input: &'input str, @@ -3645,15 +3730,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr? = ExprLogicalOr => ActionFn(73); + // ExprLogicalOr? = ExprLogicalOr => ActionFn(72); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action73::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (1, 32) + let __nt = super::__action72::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant5(__nt), __end)); + (1, 34) } - fn __reduce76< + fn __reduce79< 'input, >( input: &'input str, @@ -3662,14 +3747,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr? = => ActionFn(74); + // ExprLogicalOr? = => ActionFn(73); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action74::<>(input, &__start, &__end); - __symbols.push((__start, __Symbol::Variant14(__nt), __end)); - (0, 32) + let __nt = super::__action73::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant5(__nt), __end)); + (0, 34) } - fn __reduce77< + fn __reduce80< 'input, >( input: &'input str, @@ -3678,15 +3763,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprMultiplicative = BinaryOps => ActionFn(28); + // ExprMultiplicative = BinaryOps => ActionFn(27); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action28::<>(input, __sym0); + let __nt = super::__action27::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 33) + (1, 35) } - fn __reduce78< + fn __reduce81< 'input, >( input: &'input str, @@ -3695,7 +3780,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";" => ActionFn(99); + // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";" => ActionFn(101); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant4(__symbols); @@ -3705,11 +3790,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action99::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action101::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (6, 34) + (6, 36) } - fn __reduce79< + fn __reduce82< 'input, >( input: &'input str, @@ -3718,7 +3803,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";" => ActionFn(100); + // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";" => ActionFn(102); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant4(__symbols); @@ -3727,11 +3812,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action100::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action102::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (5, 34) + (5, 36) } - fn __reduce80< + fn __reduce83< 'input, >( input: &'input str, @@ -3740,7 +3825,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(101); + // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(103); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant4(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -3751,11 +3836,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action101::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action103::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (7, 34) + (7, 36) } - fn __reduce81< + fn __reduce84< 'input, >( input: &'input str, @@ -3764,7 +3849,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(102); + // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(104); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant4(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -3774,11 +3859,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action102::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action104::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (6, 34) + (6, 36) } - fn __reduce82< + fn __reduce85< 'input, >( input: &'input str, @@ -3795,9 +3880,9 @@ mod __parse__Program { let __end = __sym1.2; let __nt = super::__action12::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (2, 34) + (2, 36) } - fn __reduce83< + fn __reduce86< 'input, >( input: &'input str, @@ -3815,9 +3900,9 @@ mod __parse__Program { let __end = __sym2.2; let __nt = super::__action13::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (3, 34) + (3, 36) } - fn __reduce84< + fn __reduce87< 'input, >( input: &'input str, @@ -3832,9 +3917,9 @@ mod __parse__Program { let __end = __sym0.2; let __nt = super::__action14::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 34) + (1, 36) } - fn __reduce85< + fn __reduce88< 'input, >( input: &'input str, @@ -3843,17 +3928,17 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprUnary = UnaryOp, ExprUnary => ActionFn(45); + // ExprUnary = UnaryOp, ExprUnary => ActionFn(44); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); - let __sym0 = __pop_Variant8(__symbols); + let __sym0 = __pop_Variant9(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action45::<>(input, __sym0, __sym1); + let __nt = super::__action44::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (2, 35) + (2, 37) } - fn __reduce86< + fn __reduce89< 'input, >( input: &'input str, @@ -3862,15 +3947,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprUnary = ExprCall => ActionFn(46); + // ExprUnary = ExprCall => ActionFn(45); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action46::<>(input, __sym0); + let __nt = super::__action45::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 35) + (1, 37) } - fn __reduce87< + fn __reduce90< 'input, >( input: &'input str, @@ -3879,15 +3964,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprXor = BinaryOps => ActionFn(26); + // ExprXor = BinaryOps => ActionFn(25); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action26::<>(input, __sym0); + let __nt = super::__action25::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 36) + (1, 38) } - fn __reduce88< + fn __reduce91< 'input, >( input: &'input str, @@ -3896,7 +3981,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Fn = "fn", Ident, "(", Comma, ")", "->", Type, "{", Expr, "}" => ActionFn(106); + // Fn = "fn", Ident, "(", Comma, ")", "->", Type, "{", Expr, "}" => ActionFn(108); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant4(__symbols); @@ -3904,17 +3989,17 @@ mod __parse__Program { let __sym6 = __pop_Variant2(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); + let __sym3 = __pop_Variant12(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym9.2; - let __nt = super::__action106::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (10, 37) + let __nt = super::__action108::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + __symbols.push((__start, __Symbol::Variant13(__nt), __end)); + (10, 39) } - fn __reduce89< + fn __reduce92< 'input, >( input: &'input str, @@ -3923,23 +4008,23 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Fn = "fn", Ident, "(", Comma, ")", "{", Expr, "}" => ActionFn(107); + // Fn = "fn", Ident, "(", Comma, ")", "{", Expr, "}" => ActionFn(109); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant4(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant11(__symbols); + let __sym3 = __pop_Variant12(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action107::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); - __symbols.push((__start, __Symbol::Variant12(__nt), __end)); - (8, 37) + let __nt = super::__action109::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + __symbols.push((__start, __Symbol::Variant13(__nt), __end)); + (8, 39) } - fn __reduce90< + fn __reduce93< 'input, >( input: &'input str, @@ -3948,15 +4033,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[_a-zA-Z][_a-zA-Z0-9]*"# => ActionFn(56); + // Ident = r#"[_a-zA-Z][_a-zA-Z0-9]*"# => ActionFn(55); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action56::<>(input, __sym0); + let __nt = super::__action55::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant0(__nt), __end)); - (1, 38) + (1, 40) } - fn __reduce91< + fn __reduce94< 'input, >( input: &'input str, @@ -3965,15 +4050,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // LogicalAndOp = "&&" => ActionFn(30); + // LogicalAndOp = "&&" => ActionFn(29); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action30::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 39) + let __nt = super::__action29::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 41) } - fn __reduce92< + fn __reduce95< 'input, >( input: &'input str, @@ -3982,15 +4067,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // LogicalOrOp = "||" => ActionFn(29); + // LogicalOrOp = "||" => ActionFn(28); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action29::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 40) + let __nt = super::__action28::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 42) } - fn __reduce93< + fn __reduce96< 'input, >( input: &'input str, @@ -3999,15 +4084,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "*" => ActionFn(40); + // MultiplicativeOp = "*" => ActionFn(39); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action40::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 41) + let __nt = super::__action39::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 43) } - fn __reduce94< + fn __reduce97< 'input, >( input: &'input str, @@ -4016,15 +4101,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "/" => ActionFn(41); + // MultiplicativeOp = "/" => ActionFn(40); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action41::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 41) + let __nt = super::__action40::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 43) } - fn __reduce95< + fn __reduce98< 'input, >( input: &'input str, @@ -4033,15 +4118,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "%" => ActionFn(42); + // MultiplicativeOp = "%" => ActionFn(41); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action42::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 41) + let __nt = super::__action41::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 43) } - fn __reduce96< + fn __reduce99< 'input, >( input: &'input str, @@ -4050,15 +4135,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"[0-9]+"# => ActionFn(57); + // Num = r#"[0-9]+"# => ActionFn(56); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action57::<>(input, __sym0); + let __nt = super::__action56::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 42) + (1, 44) } - fn __reduce97< + fn __reduce100< 'input, >( input: &'input str, @@ -4067,7 +4152,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param = "mut", Ident, ":", Type => ActionFn(103); + // Param = "mut", Ident, ":", Type => ActionFn(105); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant2(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -4075,11 +4160,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action103::<>(input, __sym0, __sym1, __sym2, __sym3); - __symbols.push((__start, __Symbol::Variant6(__nt), __end)); - (4, 43) + let __nt = super::__action105::<>(input, __sym0, __sym1, __sym2, __sym3); + __symbols.push((__start, __Symbol::Variant7(__nt), __end)); + (4, 45) } - fn __reduce98< + fn __reduce101< 'input, >( input: &'input str, @@ -4088,18 +4173,18 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param = Ident, ":", Type => ActionFn(104); + // Param = Ident, ":", Type => ActionFn(106); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant2(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action104::<>(input, __sym0, __sym1, __sym2); - __symbols.push((__start, __Symbol::Variant6(__nt), __end)); - (3, 43) + let __nt = super::__action106::<>(input, __sym0, __sym1, __sym2); + __symbols.push((__start, __Symbol::Variant7(__nt), __end)); + (3, 45) } - fn __reduce99< + fn __reduce102< 'input, >( input: &'input str, @@ -4108,15 +4193,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param? = Param => ActionFn(85); - let __sym0 = __pop_Variant6(__symbols); + // Param? = Param => ActionFn(87); + let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action85::<>(input, __sym0); + let __nt = super::__action87::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 44) + (1, 46) } - fn __reduce100< + fn __reduce103< 'input, >( input: &'input str, @@ -4125,14 +4210,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param? = => ActionFn(86); + // Param? = => ActionFn(88); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action86::<>(input, &__start, &__end); + let __nt = super::__action88::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (0, 44) + (0, 46) } - fn __reduce101< + fn __reduce104< 'input, >( input: &'input str, @@ -4141,14 +4226,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Program = => ActionFn(116); + // Program = => ActionFn(121); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action116::<>(input, &__start, &__end); + let __nt = super::__action121::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (0, 45) + (0, 47) } - fn __reduce102< + fn __reduce105< 'input, >( input: &'input str, @@ -4157,15 +4242,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Program = Def+ => ActionFn(117); - let __sym0 = __pop_Variant13(__symbols); + // Program = Def+ => ActionFn(122); + let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action117::<>(input, __sym0); + let __nt = super::__action122::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (1, 45) + (1, 47) } - fn __reduce103< + fn __reduce106< 'input, >( input: &'input str, @@ -4180,9 +4265,9 @@ mod __parse__Program { let __end = __sym0.2; let __nt = super::__action5::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); - (1, 46) + (1, 48) } - fn __reduce104< + fn __reduce107< 'input, >( input: &'input str, @@ -4197,9 +4282,9 @@ mod __parse__Program { let __end = __sym0.2; let __nt = super::__action6::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); - (1, 46) + (1, 48) } - fn __reduce105< + fn __reduce108< 'input, >( input: &'input str, @@ -4214,9 +4299,9 @@ mod __parse__Program { let __end = __sym0.2; let __nt = super::__action7::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); - (1, 46) + (1, 48) } - fn __reduce106< + fn __reduce109< 'input, >( input: &'input str, @@ -4231,9 +4316,9 @@ mod __parse__Program { let __end = __sym0.2; let __nt = super::__action8::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); - (1, 46) + (1, 48) } - fn __reduce107< + fn __reduce110< 'input, >( input: &'input str, @@ -4242,15 +4327,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UnaryOp = "-" => ActionFn(43); + // UnaryOp = "-" => ActionFn(42); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action43::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 47) + let __nt = super::__action42::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 49) } - fn __reduce108< + fn __reduce111< 'input, >( input: &'input str, @@ -4259,15 +4344,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UnaryOp = "!" => ActionFn(44); + // UnaryOp = "!" => ActionFn(43); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action44::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 47) + let __nt = super::__action43::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 49) } - fn __reduce109< + fn __reduce112< 'input, >( input: &'input str, @@ -4276,13 +4361,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // XorOp = "^" => ActionFn(37); + // XorOp = "^" => ActionFn(36); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action37::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant8(__nt), __end)); - (1, 48) + let __nt = super::__action36::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 50) } } pub use self::__parse__Program::ProgramParser; @@ -4613,16 +4698,13 @@ fn __action16< (_, _, _): (usize, &'input str, usize), (_, thn, _): (usize, Expr<&'input str>, usize), (_, _, _): (usize, &'input str, usize), - (_, _, _): (usize, &'input str, usize), - (_, _, _): (usize, &'input str, usize), - (_, els, _): (usize, Expr<&'input str>, usize), - (_, _, _): (usize, &'input str, usize), + (_, els, _): (usize, core::option::Option>, usize), ) -> Expr<&'input str> { Expr::If { cnd: Box::new(cnd), thn: Box::new(thn), - els: Box::new(els), + els: Box::new(els.unwrap_or(Expr::Lit { val: Lit::Unit })), } } @@ -4630,26 +4712,6 @@ fn __action16< #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] fn __action17< 'input, ->( - input: &'input str, - (_, _, _): (usize, &'input str, usize), - (_, cnd, _): (usize, Expr<&'input str>, usize), - (_, _, _): (usize, &'input str, usize), - (_, thn, _): (usize, Expr<&'input str>, usize), - (_, _, _): (usize, &'input str, usize), -) -> Expr<&'input str> -{ - Expr::If { - cnd: Box::new(cnd), - thn: Box::new(thn), - els: Box::new(Expr::Lit { val: Lit::Unit }), - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action18< - 'input, >( input: &'input str, (_, _, _): (usize, &'input str, usize), @@ -4665,7 +4727,7 @@ fn __action18< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action19< +fn __action18< 'input, >( input: &'input str, @@ -4690,7 +4752,7 @@ fn __action19< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action20< +fn __action19< 'input, >( input: &'input str, @@ -4705,7 +4767,7 @@ fn __action20< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action21< +fn __action20< 'input, >( input: &'input str, @@ -4717,7 +4779,7 @@ fn __action21< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action22< +fn __action21< 'input, >( input: &'input str, @@ -4729,7 +4791,7 @@ fn __action22< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action23< +fn __action22< 'input, >( input: &'input str, @@ -4741,7 +4803,7 @@ fn __action23< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action24< +fn __action23< 'input, >( input: &'input str, @@ -4753,7 +4815,7 @@ fn __action24< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action25< +fn __action24< 'input, >( input: &'input str, @@ -4765,7 +4827,7 @@ fn __action25< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action26< +fn __action25< 'input, >( input: &'input str, @@ -4777,7 +4839,7 @@ fn __action26< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action27< +fn __action26< 'input, >( input: &'input str, @@ -4789,7 +4851,7 @@ fn __action27< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action28< +fn __action27< 'input, >( input: &'input str, @@ -4801,7 +4863,7 @@ fn __action28< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action29< +fn __action28< 'input, >( input: &'input str, @@ -4813,7 +4875,7 @@ fn __action29< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action30< +fn __action29< 'input, >( input: &'input str, @@ -4825,7 +4887,7 @@ fn __action30< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action31< +fn __action30< 'input, >( input: &'input str, @@ -4837,7 +4899,7 @@ fn __action31< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action32< +fn __action31< 'input, >( input: &'input str, @@ -4849,7 +4911,7 @@ fn __action32< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action33< +fn __action32< 'input, >( input: &'input str, @@ -4861,7 +4923,7 @@ fn __action33< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action34< +fn __action33< 'input, >( input: &'input str, @@ -4873,7 +4935,7 @@ fn __action34< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action35< +fn __action34< 'input, >( input: &'input str, @@ -4885,7 +4947,7 @@ fn __action35< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action36< +fn __action35< 'input, >( input: &'input str, @@ -4897,7 +4959,7 @@ fn __action36< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action37< +fn __action36< 'input, >( input: &'input str, @@ -4909,7 +4971,7 @@ fn __action37< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action38< +fn __action37< 'input, >( input: &'input str, @@ -4921,7 +4983,7 @@ fn __action38< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action39< +fn __action38< 'input, >( input: &'input str, @@ -4933,7 +4995,7 @@ fn __action39< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action40< +fn __action39< 'input, >( input: &'input str, @@ -4945,7 +5007,7 @@ fn __action40< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action41< +fn __action40< 'input, >( input: &'input str, @@ -4957,7 +5019,7 @@ fn __action41< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action42< +fn __action41< 'input, >( input: &'input str, @@ -4969,7 +5031,7 @@ fn __action42< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action43< +fn __action42< 'input, >( input: &'input str, @@ -4981,7 +5043,7 @@ fn __action43< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action44< +fn __action43< 'input, >( input: &'input str, @@ -4993,7 +5055,7 @@ fn __action44< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action45< +fn __action44< 'input, >( input: &'input str, @@ -5009,7 +5071,7 @@ fn __action45< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action46< +fn __action45< 'input, >( input: &'input str, @@ -5021,7 +5083,7 @@ fn __action46< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action47< +fn __action46< 'input, >( input: &'input str, @@ -5038,7 +5100,7 @@ fn __action47< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action48< +fn __action47< 'input, >( input: &'input str, @@ -5056,7 +5118,7 @@ fn __action48< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action49< +fn __action48< 'input, >( input: &'input str, @@ -5074,7 +5136,7 @@ fn __action49< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action50< +fn __action49< 'input, >( input: &'input str, @@ -5086,7 +5148,7 @@ fn __action50< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action51< +fn __action50< 'input, >( input: &'input str, @@ -5098,7 +5160,7 @@ fn __action51< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action52< +fn __action51< 'input, >( input: &'input str, @@ -5110,7 +5172,7 @@ fn __action52< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action53< +fn __action52< 'input, >( input: &'input str, @@ -5122,7 +5184,7 @@ fn __action53< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action54< +fn __action53< 'input, >( input: &'input str, @@ -5134,7 +5196,7 @@ fn __action54< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action55< +fn __action54< 'input, >( input: &'input str, @@ -5148,7 +5210,7 @@ fn __action55< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action56< +fn __action55< 'input, >( input: &'input str, @@ -5160,7 +5222,7 @@ fn __action56< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action57< +fn __action56< 'input, >( input: &'input str, @@ -5172,7 +5234,7 @@ fn __action57< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action58< +fn __action57< 'input, >( input: &'input str, @@ -5184,7 +5246,7 @@ fn __action58< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action59< +fn __action58< 'input, >( input: &'input str, @@ -5196,7 +5258,7 @@ fn __action59< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action60< +fn __action59< 'input, >( input: &'input str, @@ -5216,7 +5278,7 @@ fn __action60< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action61< +fn __action60< 'input, >( input: &'input str, @@ -5233,7 +5295,7 @@ fn __action61< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action62< +fn __action61< 'input, >( input: &'input str, @@ -5245,7 +5307,7 @@ fn __action62< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action63< +fn __action62< 'input, >( input: &'input str, @@ -5262,7 +5324,7 @@ fn __action63< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action64< +fn __action63< 'input, >( input: &'input str, @@ -5274,7 +5336,7 @@ fn __action64< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action65< +fn __action64< 'input, >( input: &'input str, @@ -5291,7 +5353,7 @@ fn __action65< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action66< +fn __action65< 'input, >( input: &'input str, @@ -5303,7 +5365,7 @@ fn __action66< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action67< +fn __action66< 'input, >( input: &'input str, @@ -5320,7 +5382,7 @@ fn __action67< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action68< +fn __action67< 'input, >( input: &'input str, @@ -5332,7 +5394,7 @@ fn __action68< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action69< +fn __action68< 'input, >( input: &'input str, @@ -5349,7 +5411,7 @@ fn __action69< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action70< +fn __action69< 'input, >( input: &'input str, @@ -5361,7 +5423,7 @@ fn __action70< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action71< +fn __action70< 'input, >( input: &'input str, @@ -5378,7 +5440,7 @@ fn __action71< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action72< +fn __action71< 'input, >( input: &'input str, @@ -5388,10 +5450,35 @@ fn __action72< __0 } +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] +fn __action72< + 'input, +>( + input: &'input str, + (_, __0, _): (usize, Expr<&'input str>, usize), +) -> core::option::Option> +{ + Some(__0) +} + #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] fn __action73< 'input, +>( + input: &'input str, + __lookbehind: &usize, + __lookahead: &usize, +) -> core::option::Option> +{ + None +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] +fn __action74< + 'input, >( input: &'input str, (_, __0, _): (usize, Expr<&'input str>, usize), @@ -5402,7 +5489,7 @@ fn __action73< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action74< +fn __action75< 'input, >( input: &'input str, @@ -5415,7 +5502,22 @@ fn __action74< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action75< +fn __action76< + 'input, +>( + input: &'input str, + (_, _, _): (usize, &'input str, usize), + (_, _, _): (usize, &'input str, usize), + (_, __0, _): (usize, Expr<&'input str>, usize), + (_, _, _): (usize, &'input str, usize), +) -> Expr<&'input str> +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] +fn __action77< 'input, >( input: &'input str, @@ -5427,7 +5529,7 @@ fn __action75< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action76< +fn __action78< 'input, >( input: &'input str, @@ -5440,7 +5542,7 @@ fn __action76< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action77< +fn __action79< 'input, >( input: &'input str, @@ -5452,7 +5554,7 @@ fn __action77< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action78< +fn __action80< 'input, >( input: &'input str, @@ -5465,7 +5567,7 @@ fn __action78< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action79< +fn __action81< 'input, >( input: &'input str, @@ -5478,7 +5580,7 @@ fn __action79< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action80< +fn __action82< 'input, >( input: &'input str, @@ -5498,7 +5600,7 @@ fn __action80< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action81< +fn __action83< 'input, >( input: &'input str, @@ -5511,7 +5613,7 @@ fn __action81< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action82< +fn __action84< 'input, >( input: &'input str, @@ -5523,7 +5625,7 @@ fn __action82< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action83< +fn __action85< 'input, >( input: &'input str, @@ -5535,7 +5637,7 @@ fn __action83< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action84< +fn __action86< 'input, >( input: &'input str, @@ -5548,7 +5650,7 @@ fn __action84< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action85< +fn __action87< 'input, >( input: &'input str, @@ -5560,7 +5662,7 @@ fn __action85< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action86< +fn __action88< 'input, >( input: &'input str, @@ -5573,7 +5675,7 @@ fn __action86< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action87< +fn __action89< 'input, >( input: &'input str, @@ -5586,7 +5688,7 @@ fn __action87< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action88< +fn __action90< 'input, >( input: &'input str, @@ -5598,7 +5700,7 @@ fn __action88< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action89< +fn __action91< 'input, >( input: &'input str, @@ -5611,7 +5713,7 @@ fn __action89< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action90< +fn __action92< 'input, >( input: &'input str, @@ -5623,7 +5725,7 @@ fn __action90< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action91< +fn __action93< 'input, >( input: &'input str, @@ -5636,7 +5738,7 @@ fn __action91< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action92< +fn __action94< 'input, >( input: &'input str, @@ -5649,7 +5751,7 @@ fn __action92< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action93< +fn __action95< 'input, >( input: &'input str, @@ -5661,7 +5763,7 @@ fn __action93< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action94< +fn __action96< 'input, >( input: &'input str, @@ -5674,7 +5776,7 @@ fn __action94< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action95< +fn __action97< 'input, >( input: &'input str, @@ -5686,7 +5788,7 @@ fn __action95< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action96< +fn __action98< 'input, >( input: &'input str, @@ -5699,7 +5801,7 @@ fn __action96< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action97< +fn __action99< 'input, >( input: &'input str, @@ -5711,7 +5813,7 @@ fn __action97< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action98< +fn __action100< 'input, >( input: &'input str, @@ -5725,7 +5827,7 @@ fn __action98< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action99< +fn __action101< 'input, >( input: &'input str, @@ -5739,7 +5841,7 @@ fn __action99< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action75( + let __temp0 = __action77( input, __1, ); @@ -5758,7 +5860,7 @@ fn __action99< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action100< +fn __action102< 'input, >( input: &'input str, @@ -5771,7 +5873,7 @@ fn __action100< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action76( + let __temp0 = __action78( input, &__start0, &__end0, @@ -5791,7 +5893,7 @@ fn __action100< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action101< +fn __action103< 'input, >( input: &'input str, @@ -5806,7 +5908,7 @@ fn __action101< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action75( + let __temp0 = __action77( input, __1, ); @@ -5826,7 +5928,7 @@ fn __action101< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action102< +fn __action104< 'input, >( input: &'input str, @@ -5840,7 +5942,7 @@ fn __action102< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action76( + let __temp0 = __action78( input, &__start0, &__end0, @@ -5861,7 +5963,7 @@ fn __action102< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action103< +fn __action105< 'input, >( input: &'input str, @@ -5873,7 +5975,7 @@ fn __action103< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action75( + let __temp0 = __action77( input, __0, ); @@ -5890,7 +5992,7 @@ fn __action103< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action104< +fn __action106< 'input, >( input: &'input str, @@ -5901,7 +6003,7 @@ fn __action104< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action76( + let __temp0 = __action78( input, &__start0, &__end0, @@ -5919,7 +6021,7 @@ fn __action104< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action105< +fn __action107< 'input, >( input: &'input str, @@ -5929,13 +6031,13 @@ fn __action105< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action79( + let __temp0 = __action81( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action77( + __action79( input, __temp0, ) @@ -5944,7 +6046,7 @@ fn __action105< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action106< +fn __action108< 'input, >( input: &'input str, @@ -5962,7 +6064,7 @@ fn __action106< { let __start0 = __5.0; let __end0 = __6.2; - let __temp0 = __action105( + let __temp0 = __action107( input, __5, __6, @@ -5985,7 +6087,7 @@ fn __action106< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action107< +fn __action109< 'input, >( input: &'input str, @@ -6001,7 +6103,7 @@ fn __action107< { let __start0 = __4.2; let __end0 = __5.0; - let __temp0 = __action78( + let __temp0 = __action80( input, &__start0, &__end0, @@ -6024,7 +6126,108 @@ fn __action107< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action108< +fn __action110< + 'input, +>( + input: &'input str, + __0: (usize, &'input str, usize), + __1: (usize, &'input str, usize), + __2: (usize, Expr<&'input str>, usize), + __3: (usize, &'input str, usize), +) -> core::option::Option> +{ + let __start0 = __0.0; + let __end0 = __3.2; + let __temp0 = __action76( + input, + __0, + __1, + __2, + __3, + ); + let __temp0 = (__start0, __temp0, __end0); + __action74( + input, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, + clippy::just_underscores_and_digits)] +fn __action111< + 'input, +>( + input: &'input str, + __0: (usize, &'input str, usize), + __1: (usize, Expr<&'input str>, usize), + __2: (usize, &'input str, usize), + __3: (usize, Expr<&'input str>, usize), + __4: (usize, &'input str, usize), + __5: (usize, &'input str, usize), + __6: (usize, &'input str, usize), + __7: (usize, Expr<&'input str>, usize), + __8: (usize, &'input str, usize), +) -> Expr<&'input str> +{ + let __start0 = __5.0; + let __end0 = __8.2; + let __temp0 = __action110( + input, + __5, + __6, + __7, + __8, + ); + let __temp0 = (__start0, __temp0, __end0); + __action16( + input, + __0, + __1, + __2, + __3, + __4, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, + clippy::just_underscores_and_digits)] +fn __action112< + 'input, +>( + input: &'input str, + __0: (usize, &'input str, usize), + __1: (usize, Expr<&'input str>, usize), + __2: (usize, &'input str, usize), + __3: (usize, Expr<&'input str>, usize), + __4: (usize, &'input str, usize), +) -> Expr<&'input str> +{ + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action75( + input, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action16( + input, + __0, + __1, + __2, + __3, + __4, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, + clippy::just_underscores_and_digits)] +fn __action113< 'input, >( input: &'input str, @@ -6034,13 +6237,13 @@ fn __action108< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action94( + let __temp0 = __action96( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action95( + __action97( input, __temp0, ) @@ -6049,7 +6252,7 @@ fn __action108< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action109< +fn __action114< 'input, >( input: &'input str, @@ -6060,13 +6263,13 @@ fn __action109< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action94( + let __temp0 = __action96( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action96( + __action98( input, __0, __temp0, @@ -6076,7 +6279,7 @@ fn __action109< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action110< +fn __action115< 'input, >( input: &'input str, @@ -6085,13 +6288,13 @@ fn __action110< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action92( + let __temp0 = __action94( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action60( + __action59( input, __temp0, __0, @@ -6101,7 +6304,7 @@ fn __action110< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action111< +fn __action116< 'input, >( input: &'input str, @@ -6111,12 +6314,12 @@ fn __action111< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action93( + let __temp0 = __action95( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action60( + __action59( input, __temp0, __1, @@ -6126,7 +6329,7 @@ fn __action111< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action112< +fn __action117< 'input, >( input: &'input str, @@ -6136,13 +6339,13 @@ fn __action112< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action89( + let __temp0 = __action91( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action97( + __action99( input, __temp0, ) @@ -6151,7 +6354,7 @@ fn __action112< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action113< +fn __action118< 'input, >( input: &'input str, @@ -6162,13 +6365,13 @@ fn __action113< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action89( + let __temp0 = __action91( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action98( + __action100( input, __0, __temp0, @@ -6178,7 +6381,7 @@ fn __action113< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action114< +fn __action119< 'input, >( input: &'input str, @@ -6187,13 +6390,13 @@ fn __action114< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action87( + let __temp0 = __action89( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action80( + __action82( input, __temp0, __0, @@ -6203,7 +6406,7 @@ fn __action114< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action115< +fn __action120< 'input, >( input: &'input str, @@ -6213,12 +6416,12 @@ fn __action115< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action88( + let __temp0 = __action90( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action80( + __action82( input, __temp0, __1, @@ -6228,7 +6431,7 @@ fn __action115< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action116< +fn __action121< 'input, >( input: &'input str, @@ -6238,7 +6441,7 @@ fn __action116< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action81( + let __temp0 = __action83( input, &__start0, &__end0, @@ -6253,7 +6456,7 @@ fn __action116< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action117< +fn __action122< 'input, >( input: &'input str, @@ -6262,7 +6465,7 @@ fn __action117< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action82( + let __temp0 = __action84( input, __0, ); @@ -6276,7 +6479,7 @@ fn __action117< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action118< +fn __action123< 'input, >( input: &'input str, @@ -6285,12 +6488,12 @@ fn __action118< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action90( + let __temp0 = __action92( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action110( + __action115( input, __temp0, ) @@ -6299,7 +6502,7 @@ fn __action118< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action119< +fn __action124< 'input, >( input: &'input str, @@ -6309,13 +6512,13 @@ fn __action119< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action91( + let __temp0 = __action93( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action110( + __action115( input, __temp0, ) @@ -6324,7 +6527,7 @@ fn __action119< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action120< +fn __action125< 'input, >( input: &'input str, @@ -6334,12 +6537,12 @@ fn __action120< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action90( + let __temp0 = __action92( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action111( + __action116( input, __0, __temp0, @@ -6349,7 +6552,7 @@ fn __action120< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action121< +fn __action126< 'input, >( input: &'input str, @@ -6358,13 +6561,13 @@ fn __action121< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action91( + let __temp0 = __action93( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action111( + __action116( input, __0, __temp0, @@ -6374,7 +6577,7 @@ fn __action121< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action122< +fn __action127< 'input, >( input: &'input str, @@ -6384,12 +6587,12 @@ fn __action122< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action73( + let __temp0 = __action72( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action20( + __action19( input, __0, __temp0, @@ -6399,7 +6602,7 @@ fn __action122< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action123< +fn __action128< 'input, >( input: &'input str, @@ -6408,13 +6611,13 @@ fn __action123< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action74( + let __temp0 = __action73( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action20( + __action19( input, __0, __temp0, @@ -6424,7 +6627,7 @@ fn __action123< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action124< +fn __action129< 'input, >( input: &'input str, @@ -6433,12 +6636,12 @@ fn __action124< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action85( + let __temp0 = __action87( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action114( + __action119( input, __temp0, ) @@ -6447,7 +6650,7 @@ fn __action124< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action125< +fn __action130< 'input, >( input: &'input str, @@ -6457,13 +6660,13 @@ fn __action125< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action86( + let __temp0 = __action88( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action114( + __action119( input, __temp0, ) @@ -6472,7 +6675,7 @@ fn __action125< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action126< +fn __action131< 'input, >( input: &'input str, @@ -6482,12 +6685,12 @@ fn __action126< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action85( + let __temp0 = __action87( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action115( + __action120( input, __0, __temp0, @@ -6497,7 +6700,7 @@ fn __action126< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action127< +fn __action132< 'input, >( input: &'input str, @@ -6506,13 +6709,13 @@ fn __action127< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action86( + let __temp0 = __action88( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action115( + __action120( input, __0, __temp0, From 158793b5c719f9c13fb4d95c8d2f3c63ad981575 Mon Sep 17 00:00:00 2001 From: Vlamonster Date: Mon, 30 Oct 2023 02:38:11 +0100 Subject: [PATCH 09/16] Simplify `ExprStmt` parsing. --- compiler/src/passes/parse/grammar.lalrpop | 19 +- compiler/src/passes/parse/grammar.rs | 1280 ++++++++++++--------- 2 files changed, 725 insertions(+), 574 deletions(-) diff --git a/compiler/src/passes/parse/grammar.lalrpop b/compiler/src/passes/parse/grammar.lalrpop index c9eb384..081df9c 100644 --- a/compiler/src/passes/parse/grammar.lalrpop +++ b/compiler/src/passes/parse/grammar.lalrpop @@ -123,26 +123,15 @@ Type: Type = { Expr = ExprStmt; ExprStmt: Expr<&'input str> = { - // TODO yeet this? - "let" "=" ";" => Expr::Let { + "let" "=" ";" => Expr::Let { sym, mutable: mutable.is_some(), bnd: Box::new(bnd), - bdy: Box::new(Expr::Lit { val: Lit::Unit }), - }, - "let" "=" ";" => Expr::Let { - sym, - mutable: mutable.is_some(), - bnd: Box::new(bnd), - bdy: Box::new(bdy), - }, - ";" => Expr::Seq { - stmt: Box::new(stmt), - cnt: Box::new(Expr::Lit { val: Lit::Unit }), + bdy: Box::new(bdy.unwrap_or(Expr::Lit { val: Lit::Unit })), }, - ";" => Expr::Seq { + ";" => Expr::Seq { stmt: Box::new(stmt), - cnt: Box::new(cnt), + cnt: Box::new(cnt.unwrap_or(Expr::Lit { val: Lit::Unit })), }, ExprInStmt, } diff --git a/compiler/src/passes/parse/grammar.rs b/compiler/src/passes/parse/grammar.rs index 7c8bb90..d49e11e 100644 --- a/compiler/src/passes/parse/grammar.rs +++ b/compiler/src/passes/parse/grammar.rs @@ -1,5 +1,5 @@ // auto-generated: "lalrpop 0.20.1" -// sha3: fb7f8e78a7b018d3055476f8911c68165d29c7bb39d2a1646dfe1bf6cd66a0ec +// sha3: 338558213abf2f82f348432a5869eed7ab265d878d809803caa0c1870e956df4 use std::str::FromStr; use crate::passes::parse::{Def, Expr, Lit, Op, Param}; use crate::passes::parse::PrgParsed; @@ -80,7 +80,7 @@ mod __parse__Program { // State 14 0, -81, 100, -81, 0, -81, 101, -81, -81, -81, 0, 102, 0, -81, -81, -81, 0, -81, -81, -81, 0, 0, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -81, -81, -81, 0, 0, // State 15 - 0, -91, 0, -91, 0, -91, 0, 0, -91, 0, 0, 0, 0, -91, -91, -91, 0, -91, -91, -91, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, -91, -91, 0, 0, + 0, -93, 0, -93, 0, -93, 0, 0, -93, 0, 0, 0, 0, -93, -93, -93, 0, -93, -93, -93, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, -93, -93, 0, 0, // State 16 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 17 @@ -110,7 +110,7 @@ mod __parse__Program { // State 29 79, 0, 0, 0, 18, -36, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 30 - 79, 0, 0, 0, 18, -86, 0, 0, -86, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -86, 88, 49, + 79, 0, 0, 0, 18, -87, 0, 0, -87, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -87, 88, 49, // State 31 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 32 @@ -130,9 +130,9 @@ mod __parse__Program { // State 39 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, // State 40 - 79, 0, 0, 0, 18, -83, 0, 0, -83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -83, 88, 49, + 79, 0, 0, 0, 18, -85, 0, 0, -85, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -85, 88, 49, // State 41 - 79, 0, 0, 0, 18, -82, 0, 0, -82, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -82, 88, 49, + 79, 0, 0, 0, 18, -83, 0, 0, -83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -83, 88, 49, // State 42 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, // State 43 @@ -146,7 +146,7 @@ mod __parse__Program { // State 47 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 48 - 0, -94, -94, -94, -94, -94, -94, -94, -94, -94, 0, -94, -94, -94, -94, -94, -94, -94, -94, -94, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, -94, -94, 0, 0, + 0, -96, -96, -96, -96, -96, -96, -96, -96, -96, 0, -96, -96, -96, -96, -96, -96, -96, -96, -96, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, -96, -96, 0, 0, // State 49 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, // State 50 @@ -164,15 +164,15 @@ mod __parse__Program { // State 56 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, // State 57 - 0, 0, 0, 0, 0, -102, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -104, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 58 - 0, 0, 0, 0, 0, -108, 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, -108, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -110, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, 0, 0, 0, // State 59 - 0, 0, 0, 0, 0, -107, 0, 0, -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, 0, 0, 0, 0, 0, -107, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -109, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, // State 60 - 0, 0, 0, 0, 0, -110, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -112, 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, -112, 0, 0, 0, 0, // State 61 - 0, 0, 0, 0, 0, -109, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -111, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, 0, 0, 0, // State 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, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, // State 63 @@ -184,7 +184,7 @@ mod __parse__Program { // State 66 0, -66, -66, -66, 30, -66, -66, -66, -66, -66, 0, -66, 0, -66, -66, -66, 0, -66, -66, -66, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, -66, -66, 0, 0, // State 67 - 0, -90, -90, -90, 0, -90, -90, -90, -90, -90, 0, -90, 0, -90, -90, -90, 0, -90, -90, -90, 0, 0, 0, 0, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -90, -90, -90, 0, 0, + 0, -92, -92, -92, 0, -92, -92, -92, -92, -92, 0, -92, 0, -92, -92, -92, 0, -92, -92, -92, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, -92, -92, 0, 0, // State 68 0, 0, 0, -26, 0, -26, 0, 0, -26, 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, -26, -26, -26, 0, 0, // State 69 @@ -206,9 +206,9 @@ mod __parse__Program { // State 77 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, 0, -58, -58, -58, 0, -58, -58, -58, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -58, -58, 0, 0, // State 78 - -112, 0, 0, 0, -112, 0, 0, 0, 0, -112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -112, 0, 0, 0, 0, 0, -112, -112, -112, -112, 0, 0, 0, 0, -112, -112, + -114, 0, 0, 0, -114, 0, 0, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, 0, 0, 0, 0, 0, -114, -114, -114, -114, 0, 0, 0, 0, -114, -114, // State 79 - -111, 0, 0, 0, -111, 0, 0, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, 0, 0, 0, 0, -111, -111, -111, -111, 0, 0, 0, 0, -111, -111, + -113, 0, 0, 0, -113, 0, 0, 0, 0, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, 0, 0, 0, 0, 0, -113, -113, -113, -113, 0, 0, 0, 0, -113, -113, // State 80 0, 0, 0, 0, 0, -75, 0, 0, -75, 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, -75, 0, 0, // State 81 @@ -224,9 +224,9 @@ mod __parse__Program { // State 86 0, -60, -60, -60, -60, -60, -60, -60, -60, -60, 0, -60, 0, -60, -60, -60, 0, -60, -60, -60, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, -60, -60, 0, 0, // State 87 - 0, -100, -100, -100, -100, -100, -100, -100, -100, -100, 0, -100, 0, -100, -100, -100, 0, -100, -100, -100, 0, 0, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, -100, -100, 0, 0, + 0, -102, -102, -102, -102, -102, -102, -102, -102, -102, 0, -102, 0, -102, -102, -102, 0, -102, -102, -102, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, -102, 0, 0, // State 88 - 0, 0, 0, 0, 0, -101, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -103, 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, 0, // State 89 -19, 0, 0, 0, -19, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, -19, -19, -19, -19, 0, 0, 0, 0, -19, -19, // State 90 @@ -244,21 +244,21 @@ mod __parse__Program { // State 96 -46, 0, 0, 0, -46, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, -46, -46, -46, -46, 0, 0, 0, 0, -46, -46, // State 97 - -95, 0, 0, 0, -95, 0, 0, 0, 0, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, 0, 0, 0, 0, 0, -95, -95, -95, -95, 0, 0, 0, 0, -95, -95, + -97, 0, 0, 0, -97, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, -97, -97, -97, -97, 0, 0, 0, 0, -97, -97, // State 98 - -96, 0, 0, 0, -96, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, -96, -96, -96, -96, 0, 0, 0, 0, -96, -96, + -98, 0, 0, 0, -98, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, -98, -98, -98, -98, 0, 0, 0, 0, -98, -98, // State 99 - -99, 0, 0, 0, -99, 0, 0, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0, 0, 0, -99, -99, -99, -99, 0, 0, 0, 0, -99, -99, + -101, 0, 0, 0, -101, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, -101, -101, -101, -101, 0, 0, 0, 0, -101, -101, // State 100 - -97, 0, 0, 0, -97, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, -97, -97, -97, -97, 0, 0, 0, 0, -97, -97, + -99, 0, 0, 0, -99, 0, 0, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0, 0, 0, -99, -99, -99, -99, 0, 0, 0, 0, -99, -99, // State 101 - -98, 0, 0, 0, -98, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, -98, -98, -98, -98, 0, 0, 0, 0, -98, -98, + -100, 0, 0, 0, -100, 0, 0, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0, 0, 0, -100, -100, -100, -100, 0, 0, 0, 0, -100, -100, // State 102 - -113, 0, 0, 0, -113, 0, 0, 0, 0, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, 0, 0, 0, 0, 0, -113, -113, -113, -113, 0, 0, 0, 0, -113, -113, + -115, 0, 0, 0, -115, 0, 0, 0, 0, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, 0, 0, 0, 0, 0, -115, -115, -115, -115, 0, 0, 0, 0, -115, -115, // State 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 104 - 0, -89, -89, -89, 0, -89, -89, -89, -89, -89, 0, -89, 0, -89, -89, -89, 0, -89, -89, -89, 0, 0, 0, 0, -89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -89, -89, -89, 0, 0, + 0, -91, -91, -91, 0, -91, -91, -91, -91, -91, 0, -91, 0, -91, -91, -91, 0, -91, -91, -91, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, -91, -91, 0, 0, // State 105 0, -61, -61, -61, -61, -61, -61, -61, -61, -61, 0, -61, 0, -61, -61, -61, 0, -61, -61, -61, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, -61, -61, 0, 0, // State 106 @@ -292,7 +292,7 @@ mod __parse__Program { // State 120 0, 0, 0, 0, 0, -35, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 121 - 0, 0, 0, 0, 0, -87, 0, 0, -87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -87, 0, 0, + 0, 0, 0, 0, 0, -86, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, 0, 0, // State 122 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, // State 123 @@ -306,7 +306,7 @@ mod __parse__Program { // State 127 0, -63, -63, -63, 0, -63, -63, -63, -63, -63, 0, -63, 0, -63, -63, -63, 0, -63, -63, -63, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, -63, -63, 0, 0, // State 128 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 129 0, 0, 0, 0, 0, -37, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 130 @@ -334,9 +334,9 @@ mod __parse__Program { // State 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, 43, 0, 0, 0, 0, // State 142 - 0, 0, 0, 0, 0, -85, 0, 0, -85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -85, 0, 0, - // State 143 0, 0, 0, 0, 0, -84, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, 0, 0, + // State 143 + 0, 0, 0, 0, 0, -82, 0, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, 0, 0, // State 144 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, // State 145 @@ -347,9 +347,9 @@ mod __parse__Program { } const __EOF_ACTION: &[i16] = &[ // State 0 - -105, + -107, // State 1 - -106, + -108, // State 2 0, // State 3 @@ -437,7 +437,7 @@ mod __parse__Program { // State 44 -49, // State 45 - -114, + -116, // State 46 -53, // State 47 @@ -553,7 +553,7 @@ mod __parse__Program { // State 102 0, // State 103 - -93, + -95, // State 104 0, // State 105 @@ -603,7 +603,7 @@ mod __parse__Program { // State 127 0, // State 128 - -92, + -94, // State 129 0, // State 130 @@ -705,17 +705,17 @@ mod __parse__Program { 41 => 143, _ => 73, }, - 37 => match state { + 38 => match state { 16 => 104, 27 => 117, _ => 74, }, - 38 => match state { + 39 => match state { 24 => 114, _ => 75, }, - 39 => 44, - 40 => match state { + 40 => 44, + 41 => match state { 2 => 47, 3..=4 => 50, 5 => 55, @@ -724,22 +724,22 @@ mod __parse__Program { 32 => 124, _ => 76, }, - 41 => 25, - 42 => 26, - 43 => 27, - 44 => 77, - 45 => match state { + 42 => 25, + 43 => 26, + 44 => 27, + 45 => 77, + 46 => match state { 4 => 52, _ => 51, }, - 47 => 45, - 48 => match state { + 48 => 45, + 49 => match state { 7 => 62, 9 => 88, _ => 57, }, - 49 => 16, - 50 => 28, + 50 => 16, + 51 => 28, _ => 0, } } @@ -1482,37 +1482,37 @@ mod __parse__Program { } 81 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, + states_to_pop: 7, nonterminal_produced: 36, } } 82 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 5, + states_to_pop: 6, nonterminal_produced: 36, } } 83 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 7, + states_to_pop: 6, nonterminal_produced: 36, } } 84 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 6, + states_to_pop: 5, nonterminal_produced: 36, } } 85 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 3, nonterminal_produced: 36, } } 86 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 2, nonterminal_produced: 36, } } @@ -1524,56 +1524,56 @@ mod __parse__Program { } 88 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 2, + states_to_pop: 1, nonterminal_produced: 37, } } 89 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 0, nonterminal_produced: 37, } } 90 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 38, } } 91 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 10, - nonterminal_produced: 39, + states_to_pop: 1, + nonterminal_produced: 38, } } 92 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 8, + states_to_pop: 1, nonterminal_produced: 39, } } 93 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 10, nonterminal_produced: 40, } } 94 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, - nonterminal_produced: 41, + states_to_pop: 8, + nonterminal_produced: 40, } } 95 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 42, + nonterminal_produced: 41, } } 96 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 43, + nonterminal_produced: 42, } } 97 => { @@ -1585,7 +1585,7 @@ mod __parse__Program { 98 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 43, + nonterminal_produced: 44, } } 99 => { @@ -1596,43 +1596,43 @@ mod __parse__Program { } 100 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 4, - nonterminal_produced: 45, + states_to_pop: 1, + nonterminal_produced: 44, } } 101 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 3, + states_to_pop: 1, nonterminal_produced: 45, } } 102 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 4, nonterminal_produced: 46, } } 103 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 3, nonterminal_produced: 46, } } 104 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 0, + states_to_pop: 1, nonterminal_produced: 47, } } 105 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 0, nonterminal_produced: 47, } } 106 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 0, nonterminal_produced: 48, } } @@ -1645,13 +1645,13 @@ mod __parse__Program { 108 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 48, + nonterminal_produced: 49, } } 109 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 48, + nonterminal_produced: 49, } } 110 => { @@ -1672,7 +1672,19 @@ mod __parse__Program { nonterminal_produced: 50, } } - 113 => __state_machine::SimulatedReduce::Accept, + 113 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 50, + } + } + 114 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 51, + } + } + 115 => __state_machine::SimulatedReduce::Accept, _ => panic!("invalid reduction index {}", __reduce_index) } } @@ -2094,6 +2106,12 @@ mod __parse__Program { __reduce112(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 113 => { + __reduce113(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 114 => { + __reduce114(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 115 => { // __Program = Program => ActionFn(0); let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0; @@ -2373,13 +2391,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" )? = "->", Type => ActionFn(107); + // ("->" )? = "->", Type => ActionFn(105); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant2(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action107::<>(input, __sym0, __sym1); + let __nt = super::__action105::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 2) } @@ -2408,7 +2426,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("else" "{" "}") = "else", "{", Expr, "}" => ActionFn(76); + // ("else" "{" "}") = "else", "{", Expr, "}" => ActionFn(74); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant4(__symbols); @@ -2416,7 +2434,7 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action76::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action74::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (4, 3) } @@ -2429,7 +2447,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("else" "{" "}")? = "else", "{", Expr, "}" => ActionFn(110); + // ("else" "{" "}")? = "else", "{", Expr, "}" => ActionFn(108); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant4(__symbols); @@ -2437,7 +2455,7 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action110::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action108::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (4, 4) } @@ -2450,10 +2468,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("else" "{" "}")? = => ActionFn(75); + // ("else" "{" "}")? = => ActionFn(73); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action75::<>(input, &__start, &__end); + let __nt = super::__action73::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (0, 4) } @@ -2518,13 +2536,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(113); + // ( ",")+ = Expr, "," => ActionFn(111); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action113::<>(input, __sym0, __sym1); + let __nt = super::__action111::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (2, 7) } @@ -2537,14 +2555,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(114); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(112); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action114::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action112::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (3, 7) } @@ -2609,13 +2627,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Param, "," => ActionFn(117); + // ( ",")+ = Param, "," => ActionFn(115); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action117::<>(input, __sym0, __sym1); + let __nt = super::__action115::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (2, 10) } @@ -2628,14 +2646,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Param, "," => ActionFn(118); + // ( ",")+ = ( ",")+, Param, "," => ActionFn(116); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action118::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action116::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (3, 10) } @@ -2648,11 +2666,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // AdditiveOp = "+" => ActionFn(37); + // AdditiveOp = "+" => ActionFn(35); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action37::<>(input, __sym0); + let __nt = super::__action35::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 11) } @@ -2665,11 +2683,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // AdditiveOp = "-" => ActionFn(38); + // AdditiveOp = "-" => ActionFn(36); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action38::<>(input, __sym0); + let __nt = super::__action36::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 11) } @@ -2682,14 +2700,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, AdditiveOp, ExprMultiplicative => ActionFn(62); + // BinaryOps = BinaryOps, AdditiveOp, ExprMultiplicative => ActionFn(60); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 12) } @@ -2702,11 +2720,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprMultiplicative => ActionFn(63); + // BinaryOps = ExprMultiplicative => ActionFn(61); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action63::<>(input, __sym0); + let __nt = super::__action61::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 12) } @@ -2719,14 +2737,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, ComparativeOp, ExprXor => ActionFn(66); + // BinaryOps = BinaryOps, ComparativeOp, ExprXor => ActionFn(64); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 13) } @@ -2739,11 +2757,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprXor => ActionFn(67); + // BinaryOps = ExprXor => ActionFn(65); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action67::<>(input, __sym0); + let __nt = super::__action65::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 13) } @@ -2756,14 +2774,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, LogicalAndOp, ExprComparative => ActionFn(68); + // BinaryOps = BinaryOps, LogicalAndOp, ExprComparative => ActionFn(66); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 14) } @@ -2776,11 +2794,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprComparative => ActionFn(69); + // BinaryOps = ExprComparative => ActionFn(67); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action69::<>(input, __sym0); + let __nt = super::__action67::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 14) } @@ -2793,14 +2811,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, LogicalOrOp, ExprLogicalAnd => ActionFn(70); + // BinaryOps = BinaryOps, LogicalOrOp, ExprLogicalAnd => ActionFn(68); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action70::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 15) } @@ -2813,11 +2831,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprLogicalAnd => ActionFn(71); + // BinaryOps = ExprLogicalAnd => ActionFn(69); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action71::<>(input, __sym0); + let __nt = super::__action69::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 15) } @@ -2830,14 +2848,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, MultiplicativeOp, ExprUnary => ActionFn(60); + // BinaryOps = BinaryOps, MultiplicativeOp, ExprUnary => ActionFn(58); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 16) } @@ -2850,11 +2868,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprUnary => ActionFn(61); + // BinaryOps = ExprUnary => ActionFn(59); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action61::<>(input, __sym0); + let __nt = super::__action59::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 16) } @@ -2867,14 +2885,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, XorOp, ExprAdditive => ActionFn(64); + // BinaryOps = BinaryOps, XorOp, ExprAdditive => ActionFn(62); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 17) } @@ -2887,11 +2905,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprAdditive => ActionFn(65); + // BinaryOps = ExprAdditive => ActionFn(63); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action65::<>(input, __sym0); + let __nt = super::__action63::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 17) } @@ -2904,11 +2922,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Bool = "true" => ActionFn(57); + // Bool = "true" => ActionFn(55); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action57::<>(input, __sym0); + let __nt = super::__action55::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (1, 18) } @@ -2921,11 +2939,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Bool = "false" => ActionFn(58); + // Bool = "false" => ActionFn(56); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action58::<>(input, __sym0); + let __nt = super::__action56::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (1, 18) } @@ -2938,11 +2956,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(123); + // Comma = Expr => ActionFn(121); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action123::<>(input, __sym0); + let __nt = super::__action121::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (1, 19) } @@ -2955,10 +2973,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(124); + // Comma = => ActionFn(122); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action124::<>(input, &__start, &__end); + let __nt = super::__action122::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (0, 19) } @@ -2971,13 +2989,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(125); + // Comma = ( ",")+, Expr => ActionFn(123); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action125::<>(input, __sym0, __sym1); + let __nt = super::__action123::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (2, 19) } @@ -2990,11 +3008,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(126); + // Comma = ( ",")+ => ActionFn(124); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action126::<>(input, __sym0); + let __nt = super::__action124::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (1, 19) } @@ -3007,11 +3025,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Param => ActionFn(129); + // Comma = Param => ActionFn(133); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action129::<>(input, __sym0); + let __nt = super::__action133::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (1, 20) } @@ -3024,10 +3042,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(130); + // Comma = => ActionFn(134); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action130::<>(input, &__start, &__end); + let __nt = super::__action134::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (0, 20) } @@ -3040,13 +3058,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Param => ActionFn(131); + // Comma = ( ",")+, Param => ActionFn(135); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action131::<>(input, __sym0, __sym1); + let __nt = super::__action135::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (2, 20) } @@ -3059,11 +3077,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(132); + // Comma = ( ",")+ => ActionFn(136); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action132::<>(input, __sym0); + let __nt = super::__action136::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (1, 20) } @@ -3076,11 +3094,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "==" => ActionFn(30); + // ComparativeOp = "==" => ActionFn(28); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action30::<>(input, __sym0); + let __nt = super::__action28::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 21) } @@ -3093,11 +3111,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "!=" => ActionFn(31); + // ComparativeOp = "!=" => ActionFn(29); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action31::<>(input, __sym0); + let __nt = super::__action29::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 21) } @@ -3110,11 +3128,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = ">" => ActionFn(32); + // ComparativeOp = ">" => ActionFn(30); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action32::<>(input, __sym0); + let __nt = super::__action30::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 21) } @@ -3127,11 +3145,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = ">=" => ActionFn(33); + // ComparativeOp = ">=" => ActionFn(31); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action33::<>(input, __sym0); + let __nt = super::__action31::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 21) } @@ -3144,11 +3162,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "<" => ActionFn(34); + // ComparativeOp = "<" => ActionFn(32); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action34::<>(input, __sym0); + let __nt = super::__action32::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 21) } @@ -3161,11 +3179,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "<=" => ActionFn(35); + // ComparativeOp = "<=" => ActionFn(33); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action35::<>(input, __sym0); + let __nt = super::__action33::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 21) } @@ -3314,11 +3332,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAdditive = BinaryOps => ActionFn(26); + // ExprAdditive = BinaryOps => ActionFn(24); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action26::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 27) } @@ -3331,11 +3349,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Num => ActionFn(50); + // ExprAtom = Num => ActionFn(48); let __sym0 = __pop_Variant15(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action50::<>(input, __sym0); + let __nt = super::__action48::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 28) } @@ -3348,11 +3366,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Bool => ActionFn(51); + // ExprAtom = Bool => ActionFn(49); let __sym0 = __pop_Variant10(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action51::<>(input, __sym0); + let __nt = super::__action49::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 28) } @@ -3365,11 +3383,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = "unit" => ActionFn(52); + // ExprAtom = "unit" => ActionFn(50); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action52::<>(input, __sym0); + let __nt = super::__action50::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 28) } @@ -3382,11 +3400,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Ident => ActionFn(53); + // ExprAtom = Ident => ActionFn(51); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action53::<>(input, __sym0); + let __nt = super::__action51::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 28) } @@ -3399,14 +3417,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = "(", Expr, ")" => ActionFn(54); + // ExprAtom = "(", Expr, ")" => ActionFn(52); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action54::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 28) } @@ -3419,14 +3437,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = "read", "(", ")" => ActionFn(46); + // ExprCall = "read", "(", ")" => ActionFn(44); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 29) } @@ -3439,7 +3457,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = "print", "(", Expr, ")" => ActionFn(47); + // ExprCall = "print", "(", Expr, ")" => ActionFn(45); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant4(__symbols); @@ -3447,7 +3465,7 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (4, 29) } @@ -3460,7 +3478,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = ExprAtom, "(", Comma, ")" => ActionFn(48); + // ExprCall = ExprAtom, "(", Comma, ")" => ActionFn(46); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant11(__symbols); @@ -3468,7 +3486,7 @@ mod __parse__Program { let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (4, 29) } @@ -3481,11 +3499,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = ExprAtom => ActionFn(49); + // ExprCall = ExprAtom => ActionFn(47); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action49::<>(input, __sym0); + let __nt = super::__action47::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 29) } @@ -3498,11 +3516,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprComparative = BinaryOps => ActionFn(24); + // ExprComparative = BinaryOps => ActionFn(22); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action24::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 30) } @@ -3515,14 +3533,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = Ident, "=", ExprLogicalOr => ActionFn(15); + // ExprInStmt = Ident, "=", ExprLogicalOr => ActionFn(13); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action15::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action13::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 31) } @@ -3535,7 +3553,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "if", ExprLogicalOr, "{", Expr, "}", "else", "{", Expr, "}" => ActionFn(111); + // ExprInStmt = "if", ExprLogicalOr, "{", Expr, "}", "else", "{", Expr, "}" => ActionFn(109); assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant4(__symbols); @@ -3548,7 +3566,7 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym8.2; - let __nt = super::__action111::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); + let __nt = super::__action109::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (9, 31) } @@ -3561,7 +3579,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "if", ExprLogicalOr, "{", Expr, "}" => ActionFn(112); + // ExprInStmt = "if", ExprLogicalOr, "{", Expr, "}" => ActionFn(110); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant4(__symbols); @@ -3570,7 +3588,7 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action112::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action110::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (5, 31) } @@ -3583,7 +3601,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "loop", "{", Expr, "}" => ActionFn(17); + // ExprInStmt = "loop", "{", Expr, "}" => ActionFn(15); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant4(__symbols); @@ -3591,7 +3609,7 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action17::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action15::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (4, 31) } @@ -3604,7 +3622,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "while", ExprLogicalOr, "{", Expr, "}" => ActionFn(18); + // ExprInStmt = "while", ExprLogicalOr, "{", Expr, "}" => ActionFn(16); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant4(__symbols); @@ -3613,7 +3631,7 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action18::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action16::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (5, 31) } @@ -3626,13 +3644,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "break", ExprLogicalOr => ActionFn(127); + // ExprInStmt = "break", ExprLogicalOr => ActionFn(125); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action127::<>(input, __sym0, __sym1); + let __nt = super::__action125::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 31) } @@ -3645,11 +3663,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "break" => ActionFn(128); + // ExprInStmt = "break" => ActionFn(126); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action128::<>(input, __sym0); + let __nt = super::__action126::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 31) } @@ -3662,11 +3680,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "continue" => ActionFn(20); + // ExprInStmt = "continue" => ActionFn(18); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action20::<>(input, __sym0); + let __nt = super::__action18::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 31) } @@ -3679,11 +3697,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = ExprLogicalOr => ActionFn(21); + // ExprInStmt = ExprLogicalOr => ActionFn(19); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action19::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 31) } @@ -3696,11 +3714,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalAnd = BinaryOps => ActionFn(23); + // ExprLogicalAnd = BinaryOps => ActionFn(21); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action21::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 32) } @@ -3713,11 +3731,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr = BinaryOps => ActionFn(22); + // ExprLogicalOr = BinaryOps => ActionFn(20); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action22::<>(input, __sym0); + let __nt = super::__action20::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 33) } @@ -3730,11 +3748,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr? = ExprLogicalOr => ActionFn(72); + // ExprLogicalOr? = ExprLogicalOr => ActionFn(70); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action72::<>(input, __sym0); + let __nt = super::__action70::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (1, 34) } @@ -3747,10 +3765,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr? = => ActionFn(73); + // ExprLogicalOr? = => ActionFn(71); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action73::<>(input, &__start, &__end); + let __nt = super::__action71::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (0, 34) } @@ -3763,11 +3781,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprMultiplicative = BinaryOps => ActionFn(27); + // ExprMultiplicative = BinaryOps => ActionFn(25); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action27::<>(input, __sym0); + let __nt = super::__action25::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 35) } @@ -3780,8 +3798,9 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";" => ActionFn(101); - assert!(__symbols.len() >= 6); + // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(127); + assert!(__symbols.len() >= 7); + let __sym6 = __pop_Variant4(__symbols); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant4(__symbols); let __sym3 = __pop_Variant0(__symbols); @@ -3789,10 +3808,10 @@ mod __parse__Program { let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym5.2; - let __nt = super::__action101::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __end = __sym6.2; + let __nt = super::__action127::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (6, 36) + (7, 36) } fn __reduce82< 'input, @@ -3803,18 +3822,19 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";" => ActionFn(102); - assert!(__symbols.len() >= 5); - let __sym4 = __pop_Variant0(__symbols); - let __sym3 = __pop_Variant4(__symbols); + // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";" => ActionFn(128); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant4(__symbols); + let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym4.2; - let __nt = super::__action102::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __end = __sym5.2; + let __nt = super::__action128::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (5, 36) + (6, 36) } fn __reduce83< 'input, @@ -3825,20 +3845,19 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(103); - assert!(__symbols.len() >= 7); - let __sym6 = __pop_Variant4(__symbols); - let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant4(__symbols); - let __sym3 = __pop_Variant0(__symbols); + // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(129); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant4(__symbols); + let __sym4 = __pop_Variant0(__symbols); + let __sym3 = __pop_Variant4(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym6.2; - let __nt = super::__action103::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __end = __sym5.2; + let __nt = super::__action129::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (7, 36) + (6, 36) } fn __reduce84< 'input, @@ -3849,19 +3868,18 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(104); - assert!(__symbols.len() >= 6); - let __sym5 = __pop_Variant4(__symbols); + // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";" => ActionFn(130); + assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant4(__symbols); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; - let __end = __sym5.2; - let __nt = super::__action104::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __end = __sym4.2; + let __nt = super::__action130::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (6, 36) + (5, 36) } fn __reduce85< 'input, @@ -3872,15 +3890,16 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = ExprInStmt, ";" => ActionFn(12); - assert!(__symbols.len() >= 2); + // ExprStmt = ExprInStmt, ";", ExprStmt => ActionFn(131); + assert!(__symbols.len() >= 3); + let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; - let __end = __sym1.2; - let __nt = super::__action12::<>(input, __sym0, __sym1); + let __end = __sym2.2; + let __nt = super::__action131::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (2, 36) + (3, 36) } fn __reduce86< 'input, @@ -3891,16 +3910,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = ExprInStmt, ";", ExprStmt => ActionFn(13); - assert!(__symbols.len() >= 3); - let __sym2 = __pop_Variant4(__symbols); + // ExprStmt = ExprInStmt, ";" => ActionFn(132); + assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; - let __end = __sym2.2; - let __nt = super::__action13::<>(input, __sym0, __sym1, __sym2); + let __end = __sym1.2; + let __nt = super::__action132::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (3, 36) + (2, 36) } fn __reduce87< 'input, @@ -3911,11 +3929,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = ExprInStmt => ActionFn(14); + // ExprStmt = ExprInStmt => ActionFn(12); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action14::<>(input, __sym0); + let __nt = super::__action12::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 36) } @@ -3928,17 +3946,50 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprUnary = UnaryOp, ExprUnary => ActionFn(44); + // ExprStmt? = ExprStmt => ActionFn(75); + let __sym0 = __pop_Variant4(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action75::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant5(__nt), __end)); + (1, 37) + } + fn __reduce89< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ExprStmt? = => ActionFn(76); + let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); + let __end = __start; + let __nt = super::__action76::<>(input, &__start, &__end); + __symbols.push((__start, __Symbol::Variant5(__nt), __end)); + (0, 37) + } + fn __reduce90< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ExprUnary = UnaryOp, ExprUnary => ActionFn(42); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant9(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action44::<>(input, __sym0, __sym1); + let __nt = super::__action42::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (2, 37) + (2, 38) } - fn __reduce89< + fn __reduce91< 'input, >( input: &'input str, @@ -3947,15 +3998,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprUnary = ExprCall => ActionFn(45); + // ExprUnary = ExprCall => ActionFn(43); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action45::<>(input, __sym0); + let __nt = super::__action43::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 37) + (1, 38) } - fn __reduce90< + fn __reduce92< 'input, >( input: &'input str, @@ -3964,15 +4015,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprXor = BinaryOps => ActionFn(25); + // ExprXor = BinaryOps => ActionFn(23); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action25::<>(input, __sym0); + let __nt = super::__action23::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); - (1, 38) + (1, 39) } - fn __reduce91< + fn __reduce93< 'input, >( input: &'input str, @@ -3981,7 +4032,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Fn = "fn", Ident, "(", Comma, ")", "->", Type, "{", Expr, "}" => ActionFn(108); + // Fn = "fn", Ident, "(", Comma, ")", "->", Type, "{", Expr, "}" => ActionFn(106); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant4(__symbols); @@ -3995,11 +4046,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym9.2; - let __nt = super::__action108::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action106::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (10, 39) + (10, 40) } - fn __reduce92< + fn __reduce94< 'input, >( input: &'input str, @@ -4008,7 +4059,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Fn = "fn", Ident, "(", Comma, ")", "{", Expr, "}" => ActionFn(109); + // Fn = "fn", Ident, "(", Comma, ")", "{", Expr, "}" => ActionFn(107); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant4(__symbols); @@ -4020,11 +4071,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action109::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action107::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); - (8, 39) + (8, 40) } - fn __reduce93< + fn __reduce95< 'input, >( input: &'input str, @@ -4033,15 +4084,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[_a-zA-Z][_a-zA-Z0-9]*"# => ActionFn(55); + // Ident = r#"[_a-zA-Z][_a-zA-Z0-9]*"# => ActionFn(53); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action55::<>(input, __sym0); + let __nt = super::__action53::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant0(__nt), __end)); - (1, 40) + (1, 41) } - fn __reduce94< + fn __reduce96< 'input, >( input: &'input str, @@ -4050,15 +4101,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // LogicalAndOp = "&&" => ActionFn(29); + // LogicalAndOp = "&&" => ActionFn(27); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action29::<>(input, __sym0); + let __nt = super::__action27::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 41) + (1, 42) } - fn __reduce95< + fn __reduce97< 'input, >( input: &'input str, @@ -4067,15 +4118,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // LogicalOrOp = "||" => ActionFn(28); + // LogicalOrOp = "||" => ActionFn(26); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action28::<>(input, __sym0); + let __nt = super::__action26::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 42) + (1, 43) } - fn __reduce96< + fn __reduce98< 'input, >( input: &'input str, @@ -4084,15 +4135,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "*" => ActionFn(39); + // MultiplicativeOp = "*" => ActionFn(37); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action39::<>(input, __sym0); + let __nt = super::__action37::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 43) + (1, 44) } - fn __reduce97< + fn __reduce99< 'input, >( input: &'input str, @@ -4101,15 +4152,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "/" => ActionFn(40); + // MultiplicativeOp = "/" => ActionFn(38); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action40::<>(input, __sym0); + let __nt = super::__action38::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 43) + (1, 44) } - fn __reduce98< + fn __reduce100< 'input, >( input: &'input str, @@ -4118,15 +4169,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "%" => ActionFn(41); + // MultiplicativeOp = "%" => ActionFn(39); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action41::<>(input, __sym0); + let __nt = super::__action39::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 43) + (1, 44) } - fn __reduce99< + fn __reduce101< 'input, >( input: &'input str, @@ -4135,15 +4186,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"[0-9]+"# => ActionFn(56); + // Num = r#"[0-9]+"# => ActionFn(54); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action56::<>(input, __sym0); + let __nt = super::__action54::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); - (1, 44) + (1, 45) } - fn __reduce100< + fn __reduce102< 'input, >( input: &'input str, @@ -4152,7 +4203,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param = "mut", Ident, ":", Type => ActionFn(105); + // Param = "mut", Ident, ":", Type => ActionFn(103); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant2(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -4160,11 +4211,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action105::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action103::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (4, 45) + (4, 46) } - fn __reduce101< + fn __reduce103< 'input, >( input: &'input str, @@ -4173,18 +4224,18 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param = Ident, ":", Type => ActionFn(106); + // Param = Ident, ":", Type => ActionFn(104); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant2(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action106::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action104::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); - (3, 45) + (3, 46) } - fn __reduce102< + fn __reduce104< 'input, >( input: &'input str, @@ -4199,9 +4250,9 @@ mod __parse__Program { let __end = __sym0.2; let __nt = super::__action87::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (1, 46) + (1, 47) } - fn __reduce103< + fn __reduce105< 'input, >( input: &'input str, @@ -4215,9 +4266,9 @@ mod __parse__Program { let __end = __start; let __nt = super::__action88::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); - (0, 46) + (0, 47) } - fn __reduce104< + fn __reduce106< 'input, >( input: &'input str, @@ -4226,14 +4277,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Program = => ActionFn(121); + // Program = => ActionFn(119); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action121::<>(input, &__start, &__end); + let __nt = super::__action119::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (0, 47) + (0, 48) } - fn __reduce105< + fn __reduce107< 'input, >( input: &'input str, @@ -4242,15 +4293,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Program = Def+ => ActionFn(122); + // Program = Def+ => ActionFn(120); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action122::<>(input, __sym0); + let __nt = super::__action120::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); - (1, 47) + (1, 48) } - fn __reduce106< + fn __reduce108< 'input, >( input: &'input str, @@ -4265,9 +4316,9 @@ mod __parse__Program { let __end = __sym0.2; let __nt = super::__action5::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); - (1, 48) + (1, 49) } - fn __reduce107< + fn __reduce109< 'input, >( input: &'input str, @@ -4282,9 +4333,9 @@ mod __parse__Program { let __end = __sym0.2; let __nt = super::__action6::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); - (1, 48) + (1, 49) } - fn __reduce108< + fn __reduce110< 'input, >( input: &'input str, @@ -4299,9 +4350,9 @@ mod __parse__Program { let __end = __sym0.2; let __nt = super::__action7::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); - (1, 48) + (1, 49) } - fn __reduce109< + fn __reduce111< 'input, >( input: &'input str, @@ -4316,9 +4367,9 @@ mod __parse__Program { let __end = __sym0.2; let __nt = super::__action8::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); - (1, 48) + (1, 49) } - fn __reduce110< + fn __reduce112< 'input, >( input: &'input str, @@ -4327,15 +4378,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UnaryOp = "-" => ActionFn(42); + // UnaryOp = "-" => ActionFn(40); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action42::<>(input, __sym0); + let __nt = super::__action40::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 49) + (1, 50) } - fn __reduce111< + fn __reduce113< 'input, >( input: &'input str, @@ -4344,15 +4395,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UnaryOp = "!" => ActionFn(43); + // UnaryOp = "!" => ActionFn(41); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action43::<>(input, __sym0); + let __nt = super::__action41::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 49) + (1, 50) } - fn __reduce112< + fn __reduce114< 'input, >( input: &'input str, @@ -4361,13 +4412,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // XorOp = "^" => ActionFn(36); + // XorOp = "^" => ActionFn(34); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action36::<>(input, __sym0); + let __nt = super::__action34::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 50) + (1, 51) } } pub use self::__parse__Program::ProgramParser; @@ -4592,13 +4643,14 @@ fn __action10< (_, _, _): (usize, &'input str, usize), (_, bnd, _): (usize, Expr<&'input str>, usize), (_, _, _): (usize, &'input str, usize), + (_, bdy, _): (usize, core::option::Option>, usize), ) -> Expr<&'input str> { Expr::Let { sym, mutable: mutable.is_some(), bnd: Box::new(bnd), - bdy: Box::new(Expr::Lit { val: Lit::Unit }), + bdy: Box::new(bdy.unwrap_or(Expr::Lit { val: Lit::Unit })), } } @@ -4606,61 +4658,22 @@ fn __action10< #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] fn __action11< 'input, ->( - input: &'input str, - (_, _, _): (usize, &'input str, usize), - (_, mutable, _): (usize, core::option::Option<&'input str>, usize), - (_, sym, _): (usize, &'input str, usize), - (_, _, _): (usize, &'input str, usize), - (_, bnd, _): (usize, Expr<&'input str>, usize), - (_, _, _): (usize, &'input str, usize), - (_, bdy, _): (usize, Expr<&'input str>, usize), -) -> Expr<&'input str> -{ - Expr::Let { - sym, - mutable: mutable.is_some(), - bnd: Box::new(bnd), - bdy: Box::new(bdy), - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action12< - 'input, ->( - input: &'input str, - (_, stmt, _): (usize, Expr<&'input str>, usize), - (_, _, _): (usize, &'input str, usize), -) -> Expr<&'input str> -{ - Expr::Seq { - stmt: Box::new(stmt), - cnt: Box::new(Expr::Lit { val: Lit::Unit }), - } -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action13< - 'input, >( input: &'input str, (_, stmt, _): (usize, Expr<&'input str>, usize), (_, _, _): (usize, &'input str, usize), - (_, cnt, _): (usize, Expr<&'input str>, usize), + (_, cnt, _): (usize, core::option::Option>, usize), ) -> Expr<&'input str> { Expr::Seq { stmt: Box::new(stmt), - cnt: Box::new(cnt), + cnt: Box::new(cnt.unwrap_or(Expr::Lit { val: Lit::Unit })), } } #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action14< +fn __action12< 'input, >( input: &'input str, @@ -4672,7 +4685,7 @@ fn __action14< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action15< +fn __action13< 'input, >( input: &'input str, @@ -4689,7 +4702,7 @@ fn __action15< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action16< +fn __action14< 'input, >( input: &'input str, @@ -4710,7 +4723,7 @@ fn __action16< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action17< +fn __action15< 'input, >( input: &'input str, @@ -4727,7 +4740,7 @@ fn __action17< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action18< +fn __action16< 'input, >( input: &'input str, @@ -4752,7 +4765,7 @@ fn __action18< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action19< +fn __action17< 'input, >( input: &'input str, @@ -4767,7 +4780,7 @@ fn __action19< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action20< +fn __action18< 'input, >( input: &'input str, @@ -4779,7 +4792,7 @@ fn __action20< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action21< +fn __action19< 'input, >( input: &'input str, @@ -4791,7 +4804,7 @@ fn __action21< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action22< +fn __action20< 'input, >( input: &'input str, @@ -4803,7 +4816,7 @@ fn __action22< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action23< +fn __action21< 'input, >( input: &'input str, @@ -4815,7 +4828,7 @@ fn __action23< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action24< +fn __action22< 'input, >( input: &'input str, @@ -4827,7 +4840,7 @@ fn __action24< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action25< +fn __action23< 'input, >( input: &'input str, @@ -4839,7 +4852,7 @@ fn __action25< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action26< +fn __action24< 'input, >( input: &'input str, @@ -4851,7 +4864,7 @@ fn __action26< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action27< +fn __action25< 'input, >( input: &'input str, @@ -4863,7 +4876,7 @@ fn __action27< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action28< +fn __action26< 'input, >( input: &'input str, @@ -4875,7 +4888,7 @@ fn __action28< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action29< +fn __action27< 'input, >( input: &'input str, @@ -4887,7 +4900,7 @@ fn __action29< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action30< +fn __action28< 'input, >( input: &'input str, @@ -4899,7 +4912,7 @@ fn __action30< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action31< +fn __action29< 'input, >( input: &'input str, @@ -4911,7 +4924,7 @@ fn __action31< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action32< +fn __action30< 'input, >( input: &'input str, @@ -4923,7 +4936,7 @@ fn __action32< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action33< +fn __action31< 'input, >( input: &'input str, @@ -4935,7 +4948,7 @@ fn __action33< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action34< +fn __action32< 'input, >( input: &'input str, @@ -4947,7 +4960,7 @@ fn __action34< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action35< +fn __action33< 'input, >( input: &'input str, @@ -4959,7 +4972,7 @@ fn __action35< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action36< +fn __action34< 'input, >( input: &'input str, @@ -4971,7 +4984,7 @@ fn __action36< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action37< +fn __action35< 'input, >( input: &'input str, @@ -4983,7 +4996,7 @@ fn __action37< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action38< +fn __action36< 'input, >( input: &'input str, @@ -4995,7 +5008,7 @@ fn __action38< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action39< +fn __action37< 'input, >( input: &'input str, @@ -5007,7 +5020,7 @@ fn __action39< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action40< +fn __action38< 'input, >( input: &'input str, @@ -5019,7 +5032,7 @@ fn __action40< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action41< +fn __action39< 'input, >( input: &'input str, @@ -5031,7 +5044,7 @@ fn __action41< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action42< +fn __action40< 'input, >( input: &'input str, @@ -5043,7 +5056,7 @@ fn __action42< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action43< +fn __action41< 'input, >( input: &'input str, @@ -5055,7 +5068,7 @@ fn __action43< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action44< +fn __action42< 'input, >( input: &'input str, @@ -5071,7 +5084,7 @@ fn __action44< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action45< +fn __action43< 'input, >( input: &'input str, @@ -5083,7 +5096,7 @@ fn __action45< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action46< +fn __action44< 'input, >( input: &'input str, @@ -5100,7 +5113,7 @@ fn __action46< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action47< +fn __action45< 'input, >( input: &'input str, @@ -5118,7 +5131,7 @@ fn __action47< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action48< +fn __action46< 'input, >( input: &'input str, @@ -5136,7 +5149,7 @@ fn __action48< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action49< +fn __action47< 'input, >( input: &'input str, @@ -5148,7 +5161,7 @@ fn __action49< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action50< +fn __action48< 'input, >( input: &'input str, @@ -5160,7 +5173,7 @@ fn __action50< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action51< +fn __action49< 'input, >( input: &'input str, @@ -5172,7 +5185,7 @@ fn __action51< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action52< +fn __action50< 'input, >( input: &'input str, @@ -5184,7 +5197,7 @@ fn __action52< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action53< +fn __action51< 'input, >( input: &'input str, @@ -5196,7 +5209,7 @@ fn __action53< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action54< +fn __action52< 'input, >( input: &'input str, @@ -5210,7 +5223,7 @@ fn __action54< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action55< +fn __action53< 'input, >( input: &'input str, @@ -5222,7 +5235,7 @@ fn __action55< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action56< +fn __action54< 'input, >( input: &'input str, @@ -5234,7 +5247,7 @@ fn __action56< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action57< +fn __action55< 'input, >( input: &'input str, @@ -5246,7 +5259,7 @@ fn __action57< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action58< +fn __action56< 'input, >( input: &'input str, @@ -5258,7 +5271,7 @@ fn __action58< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action59< +fn __action57< 'input, >( input: &'input str, @@ -5278,7 +5291,7 @@ fn __action59< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action60< +fn __action58< 'input, >( input: &'input str, @@ -5295,7 +5308,7 @@ fn __action60< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action61< +fn __action59< 'input, >( input: &'input str, @@ -5307,7 +5320,7 @@ fn __action61< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action62< +fn __action60< 'input, >( input: &'input str, @@ -5324,7 +5337,7 @@ fn __action62< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action63< +fn __action61< 'input, >( input: &'input str, @@ -5336,7 +5349,7 @@ fn __action63< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action64< +fn __action62< 'input, >( input: &'input str, @@ -5353,7 +5366,7 @@ fn __action64< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action65< +fn __action63< 'input, >( input: &'input str, @@ -5365,7 +5378,7 @@ fn __action65< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action66< +fn __action64< 'input, >( input: &'input str, @@ -5382,7 +5395,7 @@ fn __action66< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action67< +fn __action65< 'input, >( input: &'input str, @@ -5394,7 +5407,7 @@ fn __action67< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action68< +fn __action66< 'input, >( input: &'input str, @@ -5411,7 +5424,7 @@ fn __action68< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action69< +fn __action67< 'input, >( input: &'input str, @@ -5423,7 +5436,7 @@ fn __action69< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action70< +fn __action68< 'input, >( input: &'input str, @@ -5440,7 +5453,7 @@ fn __action70< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action71< +fn __action69< 'input, >( input: &'input str, @@ -5452,7 +5465,7 @@ fn __action71< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action72< +fn __action70< 'input, >( input: &'input str, @@ -5464,7 +5477,7 @@ fn __action72< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action73< +fn __action71< 'input, >( input: &'input str, @@ -5477,7 +5490,7 @@ fn __action73< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action74< +fn __action72< 'input, >( input: &'input str, @@ -5489,7 +5502,7 @@ fn __action74< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action75< +fn __action73< 'input, >( input: &'input str, @@ -5502,7 +5515,7 @@ fn __action75< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action76< +fn __action74< 'input, >( input: &'input str, @@ -5517,38 +5530,63 @@ fn __action76< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action77< +fn __action75< 'input, >( input: &'input str, - (_, __0, _): (usize, &'input str, usize), -) -> core::option::Option<&'input str> + (_, __0, _): (usize, Expr<&'input str>, usize), +) -> core::option::Option> { Some(__0) } #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action78< +fn __action76< 'input, >( input: &'input str, __lookbehind: &usize, __lookahead: &usize, -) -> core::option::Option<&'input str> +) -> core::option::Option> { None } #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action79< +fn __action77< 'input, >( input: &'input str, - (_, __0, _): (usize, Type, usize), -) -> core::option::Option -{ + (_, __0, _): (usize, &'input str, usize), +) -> core::option::Option<&'input str> +{ + Some(__0) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] +fn __action78< + 'input, +>( + input: &'input str, + __lookbehind: &usize, + __lookahead: &usize, +) -> core::option::Option<&'input str> +{ + None +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] +fn __action79< + 'input, +>( + input: &'input str, + (_, __0, _): (usize, Type, usize), +) -> core::option::Option +{ Some(__0) } @@ -5837,6 +5875,7 @@ fn __action101< __3: (usize, &'input str, usize), __4: (usize, Expr<&'input str>, usize), __5: (usize, &'input str, usize), + __6: (usize, core::option::Option>, usize), ) -> Expr<&'input str> { let __start0 = __1.0; @@ -5854,6 +5893,7 @@ fn __action101< __3, __4, __5, + __6, ) } @@ -5869,6 +5909,7 @@ fn __action102< __2: (usize, &'input str, usize), __3: (usize, Expr<&'input str>, usize), __4: (usize, &'input str, usize), + __5: (usize, core::option::Option>, usize), ) -> Expr<&'input str> { let __start0 = __0.2; @@ -5887,75 +5928,6 @@ fn __action102< __2, __3, __4, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, - clippy::just_underscores_and_digits)] -fn __action103< - 'input, ->( - input: &'input str, - __0: (usize, &'input str, usize), - __1: (usize, &'input str, usize), - __2: (usize, &'input str, usize), - __3: (usize, &'input str, usize), - __4: (usize, Expr<&'input str>, usize), - __5: (usize, &'input str, usize), - __6: (usize, Expr<&'input str>, usize), -) -> Expr<&'input str> -{ - let __start0 = __1.0; - let __end0 = __1.2; - let __temp0 = __action77( - input, - __1, - ); - let __temp0 = (__start0, __temp0, __end0); - __action11( - input, - __0, - __temp0, - __2, - __3, - __4, - __5, - __6, - ) -} - -#[allow(unused_variables)] -#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, - clippy::just_underscores_and_digits)] -fn __action104< - 'input, ->( - input: &'input str, - __0: (usize, &'input str, usize), - __1: (usize, &'input str, usize), - __2: (usize, &'input str, usize), - __3: (usize, Expr<&'input str>, usize), - __4: (usize, &'input str, usize), - __5: (usize, Expr<&'input str>, usize), -) -> Expr<&'input str> -{ - let __start0 = __0.2; - let __end0 = __1.0; - let __temp0 = __action78( - input, - &__start0, - &__end0, - ); - let __temp0 = (__start0, __temp0, __end0); - __action11( - input, - __0, - __temp0, - __1, - __2, - __3, - __4, __5, ) } @@ -5963,7 +5935,7 @@ fn __action104< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action105< +fn __action103< 'input, >( input: &'input str, @@ -5992,7 +5964,7 @@ fn __action105< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action106< +fn __action104< 'input, >( input: &'input str, @@ -6021,7 +5993,7 @@ fn __action106< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action107< +fn __action105< 'input, >( input: &'input str, @@ -6046,7 +6018,7 @@ fn __action107< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action108< +fn __action106< 'input, >( input: &'input str, @@ -6064,7 +6036,7 @@ fn __action108< { let __start0 = __5.0; let __end0 = __6.2; - let __temp0 = __action107( + let __temp0 = __action105( input, __5, __6, @@ -6087,7 +6059,7 @@ fn __action108< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action109< +fn __action107< 'input, >( input: &'input str, @@ -6126,7 +6098,7 @@ fn __action109< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action110< +fn __action108< 'input, >( input: &'input str, @@ -6138,7 +6110,7 @@ fn __action110< { let __start0 = __0.0; let __end0 = __3.2; - let __temp0 = __action76( + let __temp0 = __action74( input, __0, __1, @@ -6146,7 +6118,7 @@ fn __action110< __3, ); let __temp0 = (__start0, __temp0, __end0); - __action74( + __action72( input, __temp0, ) @@ -6155,7 +6127,7 @@ fn __action110< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action111< +fn __action109< 'input, >( input: &'input str, @@ -6172,7 +6144,7 @@ fn __action111< { let __start0 = __5.0; let __end0 = __8.2; - let __temp0 = __action110( + let __temp0 = __action108( input, __5, __6, @@ -6180,7 +6152,7 @@ fn __action111< __8, ); let __temp0 = (__start0, __temp0, __end0); - __action16( + __action14( input, __0, __1, @@ -6194,7 +6166,7 @@ fn __action111< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action112< +fn __action110< 'input, >( input: &'input str, @@ -6207,13 +6179,13 @@ fn __action112< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action75( + let __temp0 = __action73( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action16( + __action14( input, __0, __1, @@ -6227,7 +6199,7 @@ fn __action112< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action113< +fn __action111< 'input, >( input: &'input str, @@ -6252,7 +6224,7 @@ fn __action113< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action114< +fn __action112< 'input, >( input: &'input str, @@ -6279,7 +6251,7 @@ fn __action114< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action115< +fn __action113< 'input, >( input: &'input str, @@ -6294,7 +6266,7 @@ fn __action115< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action59( + __action57( input, __temp0, __0, @@ -6304,7 +6276,7 @@ fn __action115< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action116< +fn __action114< 'input, >( input: &'input str, @@ -6319,7 +6291,7 @@ fn __action116< __0, ); let __temp0 = (__start0, __temp0, __end0); - __action59( + __action57( input, __temp0, __1, @@ -6329,7 +6301,7 @@ fn __action116< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action117< +fn __action115< 'input, >( input: &'input str, @@ -6354,7 +6326,7 @@ fn __action117< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action118< +fn __action116< 'input, >( input: &'input str, @@ -6381,7 +6353,7 @@ fn __action118< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action119< +fn __action117< 'input, >( input: &'input str, @@ -6406,7 +6378,7 @@ fn __action119< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action120< +fn __action118< 'input, >( input: &'input str, @@ -6431,7 +6403,7 @@ fn __action120< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action121< +fn __action119< 'input, >( input: &'input str, @@ -6456,7 +6428,7 @@ fn __action121< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action122< +fn __action120< 'input, >( input: &'input str, @@ -6479,7 +6451,7 @@ fn __action122< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action123< +fn __action121< 'input, >( input: &'input str, @@ -6493,7 +6465,7 @@ fn __action123< __0, ); let __temp0 = (__start0, __temp0, __end0); - __action115( + __action113( input, __temp0, ) @@ -6502,7 +6474,7 @@ fn __action123< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action124< +fn __action122< 'input, >( input: &'input str, @@ -6518,7 +6490,7 @@ fn __action124< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action115( + __action113( input, __temp0, ) @@ -6527,7 +6499,7 @@ fn __action124< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action125< +fn __action123< 'input, >( input: &'input str, @@ -6542,7 +6514,7 @@ fn __action125< __1, ); let __temp0 = (__start0, __temp0, __end0); - __action116( + __action114( input, __0, __temp0, @@ -6552,7 +6524,7 @@ fn __action125< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action126< +fn __action124< 'input, >( input: &'input str, @@ -6567,7 +6539,7 @@ fn __action126< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action116( + __action114( input, __0, __temp0, @@ -6577,7 +6549,7 @@ fn __action126< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action127< +fn __action125< 'input, >( input: &'input str, @@ -6587,12 +6559,12 @@ fn __action127< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action72( + let __temp0 = __action70( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action19( + __action17( input, __0, __temp0, @@ -6602,7 +6574,7 @@ fn __action127< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action128< +fn __action126< 'input, >( input: &'input str, @@ -6611,15 +6583,85 @@ fn __action128< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action73( + let __temp0 = __action71( + input, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action17( + input, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, + clippy::just_underscores_and_digits)] +fn __action127< + 'input, +>( + input: &'input str, + __0: (usize, &'input str, usize), + __1: (usize, &'input str, usize), + __2: (usize, &'input str, usize), + __3: (usize, &'input str, usize), + __4: (usize, Expr<&'input str>, usize), + __5: (usize, &'input str, usize), + __6: (usize, Expr<&'input str>, usize), +) -> Expr<&'input str> +{ + let __start0 = __6.0; + let __end0 = __6.2; + let __temp0 = __action75( + input, + __6, + ); + let __temp0 = (__start0, __temp0, __end0); + __action101( + input, + __0, + __1, + __2, + __3, + __4, + __5, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, + clippy::just_underscores_and_digits)] +fn __action128< + 'input, +>( + input: &'input str, + __0: (usize, &'input str, usize), + __1: (usize, &'input str, usize), + __2: (usize, &'input str, usize), + __3: (usize, &'input str, usize), + __4: (usize, Expr<&'input str>, usize), + __5: (usize, &'input str, usize), +) -> Expr<&'input str> +{ + let __start0 = __5.2; + let __end0 = __5.2; + let __temp0 = __action76( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action19( + __action101( input, __0, + __1, + __2, + __3, + __4, + __5, __temp0, ) } @@ -6629,6 +6671,126 @@ fn __action128< clippy::just_underscores_and_digits)] fn __action129< 'input, +>( + input: &'input str, + __0: (usize, &'input str, usize), + __1: (usize, &'input str, usize), + __2: (usize, &'input str, usize), + __3: (usize, Expr<&'input str>, usize), + __4: (usize, &'input str, usize), + __5: (usize, Expr<&'input str>, usize), +) -> Expr<&'input str> +{ + let __start0 = __5.0; + let __end0 = __5.2; + let __temp0 = __action75( + input, + __5, + ); + let __temp0 = (__start0, __temp0, __end0); + __action102( + input, + __0, + __1, + __2, + __3, + __4, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, + clippy::just_underscores_and_digits)] +fn __action130< + 'input, +>( + input: &'input str, + __0: (usize, &'input str, usize), + __1: (usize, &'input str, usize), + __2: (usize, &'input str, usize), + __3: (usize, Expr<&'input str>, usize), + __4: (usize, &'input str, usize), +) -> Expr<&'input str> +{ + let __start0 = __4.2; + let __end0 = __4.2; + let __temp0 = __action76( + input, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action102( + input, + __0, + __1, + __2, + __3, + __4, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, + clippy::just_underscores_and_digits)] +fn __action131< + 'input, +>( + input: &'input str, + __0: (usize, Expr<&'input str>, usize), + __1: (usize, &'input str, usize), + __2: (usize, Expr<&'input str>, usize), +) -> Expr<&'input str> +{ + let __start0 = __2.0; + let __end0 = __2.2; + let __temp0 = __action75( + input, + __2, + ); + let __temp0 = (__start0, __temp0, __end0); + __action11( + input, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, + clippy::just_underscores_and_digits)] +fn __action132< + 'input, +>( + input: &'input str, + __0: (usize, Expr<&'input str>, usize), + __1: (usize, &'input str, usize), +) -> Expr<&'input str> +{ + let __start0 = __1.2; + let __end0 = __1.2; + let __temp0 = __action76( + input, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action11( + input, + __0, + __1, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, + clippy::just_underscores_and_digits)] +fn __action133< + 'input, >( input: &'input str, __0: (usize, Param<&'input str>, usize), @@ -6641,7 +6803,7 @@ fn __action129< __0, ); let __temp0 = (__start0, __temp0, __end0); - __action119( + __action117( input, __temp0, ) @@ -6650,7 +6812,7 @@ fn __action129< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action130< +fn __action134< 'input, >( input: &'input str, @@ -6666,7 +6828,7 @@ fn __action130< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action119( + __action117( input, __temp0, ) @@ -6675,7 +6837,7 @@ fn __action130< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action131< +fn __action135< 'input, >( input: &'input str, @@ -6690,7 +6852,7 @@ fn __action131< __1, ); let __temp0 = (__start0, __temp0, __end0); - __action120( + __action118( input, __0, __temp0, @@ -6700,7 +6862,7 @@ fn __action131< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action132< +fn __action136< 'input, >( input: &'input str, @@ -6715,7 +6877,7 @@ fn __action132< &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action120( + __action118( input, __0, __temp0, From a7a1ecfa0ab98ea3e3446db291107af3a612c329 Mon Sep 17 00:00:00 2001 From: jonathan Date: Mon, 30 Oct 2023 19:32:53 +0100 Subject: [PATCH 10/16] Refactor pt 1 --- compiler/src/interpreter/x86var.rs | 5 +- compiler/src/language/x86var.rs | 376 +----------------- compiler/src/passes/conclude/conclude.rs | 4 +- compiler/src/passes/emit/binary.rs | 3 +- compiler/src/passes/emit/mod.rs | 3 +- compiler/src/passes/emit/push_pop.rs | 1 - compiler/src/passes/emit/special.rs | 2 +- compiler/src/passes/emit/unary.rs | 3 +- .../src/passes/interference/assign_homes.rs | 5 +- .../interference/coloring_interference.rs | 3 +- .../interference/compute_interference.rs | 3 +- .../passes/interference/liveness_analysis.rs | 6 +- .../patch_instructions/patch_instructions.rs | 5 +- compiler/src/passes/select/io.rs | 4 +- compiler/src/passes/select/macros.rs | 222 +++++++++++ compiler/src/passes/select/mod.rs | 330 +++++++-------- compiler/src/passes/select/select.rs | 189 +++++++++ 17 files changed, 585 insertions(+), 579 deletions(-) create mode 100644 compiler/src/passes/select/macros.rs create mode 100644 compiler/src/passes/select/select.rs diff --git a/compiler/src/interpreter/x86var.rs b/compiler/src/interpreter/x86var.rs index 98c719e..6949432 100644 --- a/compiler/src/interpreter/x86var.rs +++ b/compiler/src/interpreter/x86var.rs @@ -1,7 +1,4 @@ use crate::interpreter::IO; -use crate::language::x86var::{ - Block, Cnd, Instr, Reg, VarArg, X86Concluded, X86Selected, CALLEE_SAVED, CALLER_SAVED, -}; use crate::passes::parse::Lit; use crate::utils::gen_sym::UniqueSym; use serde::{Deserialize, Serialize}; @@ -9,6 +6,8 @@ use std::collections::HashMap; use std::fmt::Debug; use std::mem; use zerocopy::AsBytes; +use crate::language::x86var::X86Concluded; +use crate::passes::select::{Block, CALLEE_SAVED, CALLER_SAVED, Cnd, Instr, Reg, VarArg, X86Selected}; #[derive(Default)] pub struct Status { diff --git a/compiler/src/language/x86var.rs b/compiler/src/language/x86var.rs index 6c493db..d6b81e1 100644 --- a/compiler/src/language/x86var.rs +++ b/compiler/src/language/x86var.rs @@ -2,11 +2,10 @@ use crate::passes::select::io::Std; use crate::utils::gen_sym::UniqueSym; use derive_more::Display; use functor_derive::Functor; -use itertools::Itertools; use petgraph::graphmap::GraphMap; use petgraph::Undirected; use std::collections::{HashMap, HashSet}; -use std::fmt::Display; +use crate::passes::select::{Block, Instr, Reg, VarArg, X86Selected}; #[derive(Debug, PartialEq)] pub struct X86Concluded<'p> { @@ -31,16 +30,6 @@ pub struct X86Assigned<'p> { pub std: Std<'p>, } -#[derive(Debug, PartialEq, Display)] -#[display( - fmt = "{}", - r#"blocks.iter().map(|(sym, block)| format!("{sym}:\n{block}")).format("\n")"# -)] -pub struct X86Selected<'p> { - pub blocks: HashMap, Block<'p, VarArg<'p>>>, - pub entry: UniqueSym<'p>, - pub std: Std<'p>, -} #[derive(Debug, PartialEq)] pub struct LX86VarProgram<'p> { @@ -68,96 +57,11 @@ pub struct X86Colored<'p> { pub type InterferenceGraph<'p> = GraphMap, (), Undirected>; -#[derive(Debug, PartialEq, Clone, Display, Functor)] -#[display(fmt = "\t{}", r#"instrs.iter().format("\n\t")"#)] -pub struct Block<'p, A: Display> { - pub instrs: Vec>, -} - #[derive(Debug, PartialEq)] pub struct LBlock<'p> { pub instrs: Vec<(Instr<'p, VarArg<'p>>, HashSet>)>, } -#[derive(Copy, Clone, Debug, PartialEq, Display)] -pub enum Cnd { - Above, - AboveOrEqual, - Below, - BelowOrEqual, - Carry, - EQ, - GT, - GE, - LT, - LE, - NotCarry, - NE, - NotOverflow, - NotSign, - Overflow, - ParityEven, - ParityOdd, - Sign, -} - -#[derive(Clone, Debug, PartialEq, Display, Functor)] -pub enum Instr<'p, A: Display> { - #[display(fmt = "addq\t{src}\t{dst}")] - Addq { src: A, dst: A }, - #[display(fmt = "subq\t{src}\t{dst}")] - Subq { src: A, dst: A }, - #[display(fmt = "divq\t{divisor}")] - Divq { divisor: A }, - #[display(fmt = "mulq\t{src}")] - Mulq { src: A }, - #[display(fmt = "negq\t{dst}")] - Negq { dst: A }, - #[display(fmt = "movq\t{src}\t{dst}")] - Movq { src: A, dst: A }, - #[display(fmt = "pushq\t{src}")] - Pushq { src: A }, - #[display(fmt = "popq\t{dst}")] - Popq { dst: A }, - #[display(fmt = "retq")] - Retq, - #[display(fmt = "syscall\t// arity: {arity}")] - Syscall { arity: usize }, - #[display(fmt = "cmpq\t{src}\t{dst}")] - Cmpq { src: A, dst: A }, - #[display(fmt = "jmp\t{lbl}")] - Jmp { lbl: UniqueSym<'p> }, - #[display(fmt = "jcc\t{cnd}\t{lbl}")] - Jcc { lbl: UniqueSym<'p>, cnd: Cnd }, - #[display(fmt = "andq {src}\t{dst}")] - Andq { src: A, dst: A }, - #[display(fmt = "orq {src}\t{dst}")] - Orq { src: A, dst: A }, - #[display(fmt = "xorq\t{src}\t{dst}")] - Xorq { src: A, dst: A }, - #[display(fmt = "notq\t{dst}")] - Notq { dst: A }, - #[display(fmt = "setcc\t{cnd}")] - Setcc { cnd: Cnd }, //TODO allow setting other byteregs - #[display(fmt = "loadlbl\t{sym}\t{dst}")] - LoadLbl { sym: UniqueSym<'p>, dst: A }, - #[display(fmt = "call_direct\t{lbl}\t// arity: {arity}")] - CallqDirect { lbl: UniqueSym<'p>, arity: usize }, - #[display(fmt = "call_indirect\t{src}\t// arity: {arity}")] - CallqIndirect { src: A, arity: usize }, -} - -#[derive(Debug, PartialEq, Clone, Copy, Hash, Eq, Display)] -pub enum VarArg<'p> { - #[display(fmt = "${val}")] - Imm { val: i64 }, - #[display(fmt = "%{reg}")] - Reg { reg: Reg }, - #[display(fmt = "[%{reg} + ${off}]")] - Deref { reg: Reg, off: i64 }, - #[display(fmt = "{sym}")] - XVar { sym: UniqueSym<'p> }, -} #[derive(Debug, PartialEq, Copy, Clone, Hash, Eq, Display)] pub enum Arg { @@ -184,62 +88,6 @@ impl<'p> From> for VarArg<'p> { } } -pub const CALLER_SAVED: [Reg; 9] = [ - Reg::RAX, - Reg::RCX, - Reg::RDX, - Reg::RSI, - Reg::RDI, - Reg::R8, - Reg::R9, - Reg::R10, - Reg::R11, -]; -pub const CALLEE_SAVED: [Reg; 7] = [ - Reg::RSP, - Reg::RBP, - Reg::RBX, - Reg::R12, - Reg::R13, - Reg::R14, - Reg::R15, -]; -pub const CALLEE_SAVED_NO_STACK: [Reg; 5] = [Reg::RBX, Reg::R12, Reg::R13, Reg::R14, Reg::R15]; - -pub const ARG_PASSING_REGS: [Reg; 6] = [Reg::RDI, Reg::RSI, Reg::RDX, Reg::RCX, Reg::R8, Reg::R9]; -pub const SYSCALL_REGS: [Reg; 7] = [ - Reg::RAX, - Reg::RDI, - Reg::RSI, - Reg::RDX, - Reg::RCX, - Reg::R8, - Reg::R9, -]; - -/// caller-saved: rax rcx rdx rsi rdi r8 r9 r10 r11 -/// callee-saved: rsp rbp rbx r12 r13 r14 r15 -/// arg-passing: rdi rsi rdx rcx r8 r9 -#[derive(Debug, PartialEq, Clone, Copy, Eq, Hash, Ord, PartialOrd, Display)] -#[allow(clippy::upper_case_acronyms)] -pub enum Reg { - RSP, - RBP, - RAX, - RBX, - RCX, - RDX, - RSI, - RDI, - R8, - R9, - R10, - R11, - R12, - R13, - R14, - R15, -} impl<'p> From> for X86Selected<'p> { fn from(value: X86Concluded<'p>) -> Self { @@ -289,225 +137,3 @@ impl<'p> From for VarArg<'p> { } } -mod macros { - #[macro_export] - macro_rules! block { - ($($instr:expr),*) => { - $crate::language::x86var::Block { instrs: vec![$($instr),*] } - }; - } - - #[macro_export] - macro_rules! addq { - ($src:expr, $dst:expr) => { - $crate::language::x86var::Instr::Addq { - src: $src, - dst: $dst, - } - }; - } - - #[macro_export] - macro_rules! divq { - ($divisor:expr) => { - $crate::language::x86var::Instr::Divq { divisor: $divisor } - }; - } - - #[macro_export] - macro_rules! mulq { - ($src:expr) => { - $crate::language::x86var::Instr::Mulq { src: $src } - }; - } - - #[macro_export] - macro_rules! subq { - ($src:expr, $dst:expr) => { - $crate::language::x86var::Instr::Subq { - src: $src, - dst: $dst, - } - }; - } - - #[macro_export] - macro_rules! cmpq { - ($src:expr, $dst:expr) => { - $crate::language::x86var::Instr::Cmpq { - src: $src, - dst: $dst, - } - }; - } - #[macro_export] - macro_rules! andq { - ($src:expr, $dst:expr) => { - $crate::language::x86var::Instr::Andq { - src: $src, - dst: $dst, - } - }; - } - - #[macro_export] - macro_rules! orq { - ($src:expr, $dst:expr) => { - $crate::language::x86var::Instr::Orq { - src: $src, - dst: $dst, - } - }; - } - - #[macro_export] - macro_rules! xorq { - ($src:expr, $dst:expr) => { - $crate::language::x86var::Instr::Xorq { - src: $src, - dst: $dst, - } - }; - } - - #[macro_export] - macro_rules! notq { - ($dst:expr) => { - $crate::language::x86var::Instr::Notq { dst: $dst } - }; - } - - #[macro_export] - macro_rules! negq { - ($dst:expr) => { - $crate::language::x86var::Instr::Negq { dst: $dst } - }; - } - - #[macro_export] - macro_rules! movq { - ($src:expr, $dst:expr) => { - $crate::language::x86var::Instr::Movq { - src: $src, - dst: $dst, - } - }; - } - - #[macro_export] - macro_rules! load_lbl { - ($lbl:expr, $dst: expr) => { - $crate::language::x86var::Instr::LoadLbl { - sym: $lbl, - dst: $dst, - } - }; - } - - #[macro_export] - macro_rules! pushq { - ($src:expr) => { - $crate::language::x86var::Instr::Pushq { src: $src } - }; - } - - #[macro_export] - macro_rules! popq { - ($dst:expr) => { - $crate::language::x86var::Instr::Popq { dst: $dst } - }; - } - - #[macro_export] - macro_rules! callq_direct { - ($lbl:expr, $arity:expr) => { - $crate::language::x86var::Instr::CallqDirect { - lbl: $lbl, - arity: $arity, - } - }; - } - - #[macro_export] - macro_rules! callq_indirect { - ($src:expr, $arity:expr) => { - $crate::language::x86var::Instr::CallqIndirect { - src: $src, - arity: $arity, - } - }; - } - - #[macro_export] - macro_rules! jmp { - ($lbl:expr) => { - $crate::language::x86var::Instr::Jmp { lbl: $lbl } - }; - } - - #[macro_export] - macro_rules! setcc { - ($cnd:expr) => { - $crate::language::x86var::Instr::Setcc { cnd: $cnd } - }; - } - - #[macro_export] - macro_rules! jcc { - ($lbl:expr, $cnd:expr) => { - $crate::language::x86var::Instr::Jcc { - lbl: $lbl, - cnd: $cnd, - } - }; - } - - #[macro_export] - macro_rules! retq { - () => { - $crate::language::x86var::Instr::Retq - }; - } - - #[macro_export] - macro_rules! syscall { - ($arity:expr) => { - $crate::language::x86var::Instr::Syscall { arity: $arity } - }; - } - - #[macro_export] - macro_rules! imm { - ($val:expr) => { - $crate::language::x86var::Arg::Imm { val: $val.into() }.into() - }; - } - - #[macro_export] - macro_rules! reg { - ($reg:ident) => { - $crate::language::x86var::Arg::Reg { - reg: $crate::language::x86var::Reg::$reg, - } - .into() - }; - } - - #[macro_export] - macro_rules! var { - ($sym:expr) => { - $crate::language::x86var::VarArg::XVar { sym: $sym } - }; - } - - #[macro_export] - macro_rules! deref { - ($reg:ident, $off:expr) => { - $crate::language::x86var::Arg::Deref { - reg: Reg::$reg, - off: $off, - } - .into() - }; - } -} diff --git a/compiler/src/passes/conclude/conclude.rs b/compiler/src/passes/conclude/conclude.rs index 313dcac..38d50f1 100644 --- a/compiler/src/passes/conclude/conclude.rs +++ b/compiler/src/passes/conclude/conclude.rs @@ -1,6 +1,6 @@ +use crate::*; use crate::language::x86var::{X86Concluded, X86Patched}; use crate::utils::gen_sym::gen_sym; -use crate::{addq, block, callq_direct, imm, movq, popq, pushq, reg, subq}; impl<'p> X86Patched<'p> { #[must_use] @@ -31,9 +31,9 @@ impl<'p> X86Patched<'p> { #[cfg(test)] mod tests { use crate::interpreter::TestIO; - use crate::language::x86var::X86Selected; use crate::utils::split_test::split_test; use test_each_file::test_each_file; + use crate::passes::select::X86Selected; fn conclude([test]: [&str; 1]) { let (input, expected_output, expected_return, program) = split_test(test); diff --git a/compiler/src/passes/emit/binary.rs b/compiler/src/passes/emit/binary.rs index a04d08f..aabbfdf 100644 --- a/compiler/src/passes/emit/binary.rs +++ b/compiler/src/passes/emit/binary.rs @@ -1,6 +1,6 @@ use crate::language::x86var::Arg; use crate::passes::emit::encode_reg; -use crate::passes::emit::Reg; +use crate::passes::select::Reg; pub struct BinaryOpInfo { /// Opcode when src = Reg and dst = Reg | Deref. @@ -145,7 +145,6 @@ pub fn encode_binary_instr(op_info: BinaryOpInfo, src: &Arg, dst: &Arg) -> Vec X86Concluded<'p> { #[must_use] diff --git a/compiler/src/passes/emit/push_pop.rs b/compiler/src/passes/emit/push_pop.rs index b097951..e417867 100644 --- a/compiler/src/passes/emit/push_pop.rs +++ b/compiler/src/passes/emit/push_pop.rs @@ -63,7 +63,6 @@ pub fn encode_push_pop(op_info: PushPopInfo, reg: &Arg) -> Vec { #[cfg(test)] mod tests { - use crate::language::x86var::Reg; use crate::*; mod push { diff --git a/compiler/src/passes/emit/special.rs b/compiler/src/passes/emit/special.rs index 6b49560..e71f58f 100644 --- a/compiler/src/passes/emit/special.rs +++ b/compiler/src/passes/emit/special.rs @@ -1,4 +1,4 @@ -use crate::language::x86var::Cnd; +use crate::passes::select::Cnd; pub fn encode_setcc(cnd: &Cnd) -> Vec { let cnd = match cnd { diff --git a/compiler/src/passes/emit/unary.rs b/compiler/src/passes/emit/unary.rs index 869efb2..a4e9df3 100644 --- a/compiler/src/passes/emit/unary.rs +++ b/compiler/src/passes/emit/unary.rs @@ -1,6 +1,6 @@ use crate::language::x86var::Arg; use crate::passes::emit; -use crate::passes::emit::Reg; +use crate::passes::select::Reg; pub struct UnaryOpInfo { pub op: u8, @@ -47,7 +47,6 @@ pub fn encode_unary_instr(op_info: UnaryOpInfo, dst: &Arg) -> Vec { #[cfg(test)] mod tests { mod neg { - use crate::language::x86var::Reg; use crate::*; check!(nreg1, negq!(reg!(RSP)), vec![0x48, 0xF7, 0xDC]); diff --git a/compiler/src/passes/interference/assign_homes.rs b/compiler/src/passes/interference/assign_homes.rs index 6e8592c..9db6a8b 100644 --- a/compiler/src/passes/interference/assign_homes.rs +++ b/compiler/src/passes/interference/assign_homes.rs @@ -1,10 +1,11 @@ -use crate::language::x86var::{Arg, Block, Instr, VarArg, X86Assigned, X86Colored}; use crate::utils::gen_sym::UniqueSym; use crate::{ addq, andq, callq_direct, callq_indirect, cmpq, divq, jcc, jmp, load_lbl, movq, mulq, negq, notq, orq, popq, pushq, retq, setcc, subq, syscall, xorq, }; use std::collections::HashMap; +use crate::language::x86var::{Arg, X86Assigned, X86Colored}; +use crate::passes::select::{Block, Instr, VarArg}; impl<'p> X86Colored<'p> { #[must_use] @@ -74,11 +75,11 @@ fn assign_instr<'p>( #[cfg(test)] mod tests { use crate::interpreter::TestIO; - use crate::language::x86var::X86Selected; use crate::utils::gen_sym::gen_sym; use crate::utils::split_test::split_test; use crate::{block, callq_direct, movq, reg}; use test_each_file::test_each_file; + use crate::passes::select::X86Selected; fn assign_homes([test]: [&str; 1]) { let (input, expected_output, expected_return, program) = split_test(test); diff --git a/compiler/src/passes/interference/coloring_interference.rs b/compiler/src/passes/interference/coloring_interference.rs index db71854..b042a0e 100644 --- a/compiler/src/passes/interference/coloring_interference.rs +++ b/compiler/src/passes/interference/coloring_interference.rs @@ -1,7 +1,8 @@ -use crate::language::x86var::{Arg, InterferenceGraph, LArg, Reg, X86Colored, X86WithInterference}; +use crate::language::x86var::{Arg, InterferenceGraph, LArg, X86Colored, X86WithInterference}; use crate::utils::gen_sym::UniqueSym; use itertools::Itertools; use std::collections::{HashMap, HashSet}; +use crate::passes::select::Reg; impl<'p> X86WithInterference<'p> { #[must_use] diff --git a/compiler/src/passes/interference/compute_interference.rs b/compiler/src/passes/interference/compute_interference.rs index e3bbcf6..a5a56e2 100644 --- a/compiler/src/passes/interference/compute_interference.rs +++ b/compiler/src/passes/interference/compute_interference.rs @@ -1,8 +1,9 @@ use crate::language::x86var::{ - InterferenceGraph, LArg, LX86VarProgram, VarArg, X86WithInterference, + InterferenceGraph, LArg, LX86VarProgram, X86WithInterference, }; use crate::passes::interference::liveness_analysis::{handle_instr, ReadWriteOp}; use std::collections::HashMap; +use crate::passes::select::VarArg; impl<'p> LX86VarProgram<'p> { #[must_use] diff --git a/compiler/src/passes/interference/liveness_analysis.rs b/compiler/src/passes/interference/liveness_analysis.rs index 760527d..1100fb2 100644 --- a/compiler/src/passes/interference/liveness_analysis.rs +++ b/compiler/src/passes/interference/liveness_analysis.rs @@ -1,11 +1,9 @@ -use crate::language::x86var::{ - Block, Instr, LArg, LBlock, LX86VarProgram, Reg, VarArg, X86Selected, ARG_PASSING_REGS, - CALLER_SAVED, SYSCALL_REGS, -}; +use crate::language::x86var::{LArg, LBlock, LX86VarProgram}; use crate::utils::gen_sym::UniqueSym; use std::collections::hash_map::Entry; use std::collections::{HashMap, HashSet}; +use crate::passes::select::{ARG_PASSING_REGS, Block, CALLER_SAVED, Instr, Reg, SYSCALL_REGS, VarArg, X86Selected}; impl<'p> X86Selected<'p> { #[must_use] diff --git a/compiler/src/passes/patch_instructions/patch_instructions.rs b/compiler/src/passes/patch_instructions/patch_instructions.rs index 24e573a..c0f0064 100644 --- a/compiler/src/passes/patch_instructions/patch_instructions.rs +++ b/compiler/src/passes/patch_instructions/patch_instructions.rs @@ -1,5 +1,6 @@ -use crate::language::x86var::{Arg, Block, Instr, X86Assigned, X86Patched}; +use crate::language::x86var::{Arg, X86Assigned, X86Patched}; use crate::{addq, movq, reg, subq}; +use crate::passes::select::{Block, Instr}; impl<'p> X86Assigned<'p> { #[must_use] @@ -46,11 +47,11 @@ fn patch_args<'p>(src: Arg, dst: Arg, op: fn(Arg, Arg) -> Instr<'p, Arg>) -> Vec #[cfg(test)] mod tests { use crate::interpreter::TestIO; - use crate::language::x86var::X86Selected; use crate::utils::gen_sym::gen_sym; use crate::utils::split_test::split_test; use crate::{block, callq_direct, movq, reg}; use test_each_file::test_each_file; + use crate::passes::select::X86Selected; fn patch_instructions([test]: [&str; 1]) { let (input, expected_output, expected_return, program) = split_test(test); diff --git a/compiler/src/passes/select/io.rs b/compiler/src/passes/select/io.rs index 7710089..2774490 100644 --- a/compiler/src/passes/select/io.rs +++ b/compiler/src/passes/select/io.rs @@ -1,11 +1,11 @@ -use crate::language::x86var::Reg; -use crate::language::x86var::{Block, Cnd, VarArg}; use crate::utils::gen_sym::{gen_sym, UniqueSym}; use crate::{ addq, block, cmpq, deref, divq, imm, jcc, jmp, movq, mulq, negq, popq, pushq, reg, retq, subq, syscall, }; use std::collections::HashMap; +use crate::passes::select::{Block, VarArg}; +use crate::passes::select::Cnd; #[derive(Debug, PartialEq, Eq)] pub struct Std<'p> { diff --git a/compiler/src/passes/select/macros.rs b/compiler/src/passes/select/macros.rs new file mode 100644 index 0000000..8758c45 --- /dev/null +++ b/compiler/src/passes/select/macros.rs @@ -0,0 +1,222 @@ + + #[macro_export] + macro_rules! block { + ($($instr:expr),*) => { + $crate::passes::select::Block { instrs: vec![$($instr),*] } + }; + } + + #[macro_export] + macro_rules! addq { + ($src:expr, $dst:expr) => { + $crate::passes::select::Instr::Addq { + src: $src, + dst: $dst, + } + }; + } + + #[macro_export] + macro_rules! divq { + ($divisor:expr) => { + $crate::passes::select::Instr::Divq { divisor: $divisor } + }; + } + + #[macro_export] + macro_rules! mulq { + ($src:expr) => { + $crate::passes::select::Instr::Mulq { src: $src } + }; + } + + #[macro_export] + macro_rules! subq { + ($src:expr, $dst:expr) => { + $crate::passes::select::Instr::Subq { + src: $src, + dst: $dst, + } + }; + } + + #[macro_export] + macro_rules! cmpq { + ($src:expr, $dst:expr) => { + $crate::passes::select::Instr::Cmpq { + src: $src, + dst: $dst, + } + }; + } + #[macro_export] + macro_rules! andq { + ($src:expr, $dst:expr) => { + $crate::passes::select::Instr::Andq { + src: $src, + dst: $dst, + } + }; + } + + #[macro_export] + macro_rules! orq { + ($src:expr, $dst:expr) => { + $crate::passes::select::Instr::Orq { + src: $src, + dst: $dst, + } + }; + } + + #[macro_export] + macro_rules! xorq { + ($src:expr, $dst:expr) => { + $crate::passes::select::Instr::Xorq { + src: $src, + dst: $dst, + } + }; + } + + #[macro_export] + macro_rules! notq { + ($dst:expr) => { + $crate::passes::select::Instr::Notq { dst: $dst } + }; + } + + #[macro_export] + macro_rules! negq { + ($dst:expr) => { + $crate::passes::select::Instr::Negq { dst: $dst } + }; + } + + #[macro_export] + macro_rules! movq { + ($src:expr, $dst:expr) => { + $crate::passes::select::Instr::Movq { + src: $src, + dst: $dst, + } + }; + } + + #[macro_export] + macro_rules! load_lbl { + ($lbl:expr, $dst: expr) => { + $crate::passes::select::Instr::LoadLbl { + sym: $lbl, + dst: $dst, + } + }; + } + + #[macro_export] + macro_rules! pushq { + ($src:expr) => { + $crate::passes::select::Instr::Pushq { src: $src } + }; + } + + #[macro_export] + macro_rules! popq { + ($dst:expr) => { + $crate::passes::select::Instr::Popq { dst: $dst } + }; + } + + #[macro_export] + macro_rules! callq_direct { + ($lbl:expr, $arity:expr) => { + $crate::passes::select::Instr::CallqDirect { + lbl: $lbl, + arity: $arity, + } + }; + } + + #[macro_export] + macro_rules! callq_indirect { + ($src:expr, $arity:expr) => { + $crate::passes::select::Instr::CallqIndirect { + src: $src, + arity: $arity, + } + }; + } + + #[macro_export] + macro_rules! jmp { + ($lbl:expr) => { + $crate::passes::select::Instr::Jmp { lbl: $lbl } + }; + } + + #[macro_export] + macro_rules! setcc { + ($cnd:expr) => { + $crate::passes::select::Instr::Setcc { cnd: $cnd } + }; + } + + #[macro_export] + macro_rules! jcc { + ($lbl:expr, $cnd:expr) => { + $crate::passes::select::Instr::Jcc { + lbl: $lbl, + cnd: $cnd, + } + }; + } + + #[macro_export] + macro_rules! retq { + () => { + $crate::passes::select::Instr::Retq + }; + } + + #[macro_export] + macro_rules! syscall { + ($arity:expr) => { + $crate::passes::select::Instr::Syscall { arity: $arity } + }; + } + + #[macro_export] + macro_rules! imm { + ($val:expr) => { + $crate::language::x86var::Arg::Imm { val: $val.into() }.into() + }; + } + + #[macro_export] + macro_rules! reg { + ($reg:ident) => { + $crate::language::x86var::Arg::Reg { + reg: $crate::passes::select::Reg::$reg, + } + .into() + }; + } + + #[macro_export] + macro_rules! var { + ($sym:expr) => { + $crate::passes::select::VarArg::XVar { sym: $sym } + }; + } + + #[macro_export] + macro_rules! deref { + ($reg:ident, $off:expr) => { + $crate::language::x86var::Arg::Deref { + reg: crate::passes::select::Reg::$reg, + off: $off, + } + .into() + }; + } + diff --git a/compiler/src/passes/select/mod.rs b/compiler/src/passes/select/mod.rs index 14bb123..1c9c7d5 100644 --- a/compiler/src/passes/select/mod.rs +++ b/compiler/src/passes/select/mod.rs @@ -1,195 +1,165 @@ -pub mod io; - -use crate::language::x86var::{ - Block, Cnd, Instr, VarArg, X86Selected, ARG_PASSING_REGS, CALLEE_SAVED_NO_STACK, -}; -use crate::passes::atomize::Atom; -use crate::passes::explicate::{CExpr, PrgExplicated, Tail}; -use crate::passes::parse::Op; -use crate::passes::select::io::Std; -use crate::utils::gen_sym::{gen_sym, UniqueSym}; -use crate::*; use std::collections::HashMap; +use std::fmt::Display; +use derive_more::Display; +use functor_derive::Functor; +use crate::passes::select::io::Std; +use crate::utils::gen_sym::UniqueSym; +use itertools::Itertools; -impl<'p> PrgExplicated<'p> { - #[must_use] - pub fn select(self) -> X86Selected<'p> { - let mut blocks = HashMap::new(); - let std = Std::new(&mut blocks); - - blocks.extend( - self.blocks - .into_iter() - .map(|(sym, block)| (sym, select_block(sym, block, &std, &self.fn_params))), - ); - - X86Selected { - blocks, - entry: self.entry, - std, - } - } +pub mod io; +pub mod select; +pub mod macros; + +#[derive(Debug, PartialEq, Display)] +#[display( +fmt = "{}", +r#"blocks.iter().map(|(sym, block)| format!("{sym}:\n{block}")).format("\n")"# +)] +pub struct X86Selected<'p> { + pub blocks: HashMap, Block<'p, VarArg<'p>>>, + pub entry: UniqueSym<'p>, + pub std: Std<'p>, } -fn select_block<'p>( - sym: UniqueSym<'p>, - tail: Tail<'p>, - std: &Std<'p>, - fn_params: &HashMap, Vec>>, -) -> Block<'p, VarArg<'p>> { - let mut instrs = Vec::new(); - - if let Some(params) = fn_params.get(&sym) { - instrs.push(pushq!(reg!(RBP))); - instrs.push(movq!(reg!(RSP), reg!(RBP))); - for reg in CALLEE_SAVED_NO_STACK { - instrs.push(pushq!(VarArg::Reg { reg })); - } - - for (reg, param) in ARG_PASSING_REGS.into_iter().zip(params.iter()) { - instrs.push(movq!(VarArg::Reg { reg }, VarArg::XVar { sym: *param })); - } - assert!( - params.len() <= 6, - "Argument passing to stack is not yet implemented." - ); - } - - select_tail(tail, &mut instrs, std); - - Block { instrs } +#[derive(Debug, PartialEq, Clone, Display, Functor)] +#[display(fmt = "\t{}", r#"instrs.iter().format("\n\t")"#)] +pub struct Block<'p, A: Display> { + pub instrs: Vec>, } -fn select_tail<'p>(tail: Tail<'p>, instrs: &mut Vec>>, std: &Std<'p>) { - match tail { - Tail::Return { expr } => { - instrs.extend(select_assign(reg!(RAX), expr, std)); - - for reg in CALLEE_SAVED_NO_STACK.into_iter().rev() { - instrs.push(popq!(VarArg::Reg { reg })); - } - instrs.push(popq!(reg!(RBP))); - - instrs.push(retq!()); - } - Tail::Seq { sym, bnd, tail } => { - instrs.extend(select_assign(var!(sym), bnd, std)); - select_tail(*tail, instrs, std); - } - Tail::IfStmt { cnd, thn, els } => match cnd { - CExpr::Prim { op, args } => { - let tmp = gen_sym("tmp"); - instrs.extend(vec![ - movq!(select_atom(&args[0]), var!(tmp)), - cmpq!(select_atom(&args[1]), var!(tmp)), - jcc!(thn, select_cmp(op)), - jmp!(els), - ]); - } - _ => unreachable!(), - }, - Tail::Goto { lbl } => { - instrs.push(jmp!(lbl)); - } - } +#[derive(Copy, Clone, Debug, PartialEq, Display)] +pub enum Cnd { + Above, + AboveOrEqual, + Below, + BelowOrEqual, + Carry, + EQ, + GT, + GE, + LT, + LE, + NotCarry, + NE, + NotOverflow, + NotSign, + Overflow, + ParityEven, + ParityOdd, + Sign, } -fn select_assign<'p>( - dst: VarArg<'p>, - expr: CExpr<'p>, - std: &Std<'p>, -) -> Vec>> { - match expr { - CExpr::Atom { - atm: Atom::Val { val }, - } => vec![movq!(imm!(val), dst)], - CExpr::Atom { - atm: Atom::Var { sym }, - } => vec![movq!(var!(sym), dst)], - CExpr::Prim { op, args } => match (op, args.as_slice()) { - (Op::Plus, [a0, a1]) => vec![movq!(select_atom(a0), dst), addq!(select_atom(a1), dst)], - (Op::Minus, [a0, a1]) => vec![movq!(select_atom(a0), dst), subq!(select_atom(a1), dst)], - (Op::Minus, [a0]) => vec![movq!(select_atom(a0), dst), negq!(dst)], - (Op::Mul, [a0, a1]) => vec![ - movq!(select_atom(a1), reg!(RAX)), - movq!(select_atom(a0), reg!(RBX)), - mulq!(reg!(RBX)), - movq!(reg!(RAX), dst), - ], - (Op::Div, [a0, a1]) => vec![ - movq!(imm!(0), reg!(RDX)), - movq!(select_atom(a0), reg!(RAX)), - movq!(select_atom(a1), reg!(RBX)), - divq!(reg!(RBX)), - movq!(reg!(RAX), dst), - ], - (Op::Mod, [a0, a1]) => vec![ - movq!(imm!(0), reg!(RDX)), - movq!(select_atom(a0), reg!(RAX)), - movq!(select_atom(a1), reg!(RBX)), - divq!(reg!(RBX)), - movq!(reg!(RDX), dst), - ], - (Op::Read, []) => { - vec![callq_direct!(std.read_int, 0), movq!(reg!(RAX), dst)] - } - (Op::Print, [a0]) => vec![ - movq!(select_atom(a0), reg!(RDI)), - callq_direct!(std.print_int, 1), - movq!(select_atom(a0), dst), - ], - (Op::LAnd, [a0, a1]) => vec![movq!(select_atom(a0), dst), andq!(select_atom(a1), dst)], - (Op::LOr, [a0, a1]) => vec![movq!(select_atom(a0), dst), orq!(select_atom(a1), dst)], - (Op::Not, [a0]) => vec![movq!(select_atom(a0), dst), xorq!(imm!(1), dst)], - (Op::Xor, [a0, a1]) => vec![movq!(select_atom(a0), dst), xorq!(select_atom(a1), dst)], - (op @ (Op::GT | Op::GE | Op::EQ | Op::LE | Op::LT | Op::NE), [a0, a1]) => { - let tmp = gen_sym("tmp"); - vec![ - movq!(select_atom(a0), var!(tmp)), - cmpq!(select_atom(a1), var!(tmp)), - movq!(imm!(0), reg!(RAX)), - setcc!(select_cmp(op)), - movq!(reg!(RAX), dst), - ] - } - _ => panic!("Encountered Prim with incorrect arity during select instructions pass."), - }, - CExpr::FunRef { sym } => vec![load_lbl!(sym, dst)], - CExpr::Apply { fun, args } => { - let mut instrs = vec![]; - - for (arg, reg) in args.iter().zip(ARG_PASSING_REGS.into_iter()) { - instrs.push(movq!(select_atom(arg), VarArg::Reg { reg })); - } - assert!( - args.len() <= 6, - "Argument passing to stack is not yet implemented." - ); - - instrs.push(callq_indirect!(select_atom(&fun), args.len())); - instrs.push(movq!(reg!(RAX), dst)); - instrs - } - } +#[derive(Clone, Debug, PartialEq, Display, Functor)] +pub enum Instr<'p, A: Display> { + #[display(fmt = "addq\t{src}\t{dst}")] + Addq { src: A, dst: A }, + #[display(fmt = "subq\t{src}\t{dst}")] + Subq { src: A, dst: A }, + #[display(fmt = "divq\t{divisor}")] + Divq { divisor: A }, + #[display(fmt = "mulq\t{src}")] + Mulq { src: A }, + #[display(fmt = "negq\t{dst}")] + Negq { dst: A }, + #[display(fmt = "movq\t{src}\t{dst}")] + Movq { src: A, dst: A }, + #[display(fmt = "pushq\t{src}")] + Pushq { src: A }, + #[display(fmt = "popq\t{dst}")] + Popq { dst: A }, + #[display(fmt = "retq")] + Retq, + #[display(fmt = "syscall\t// arity: {arity}")] + Syscall { arity: usize }, + #[display(fmt = "cmpq\t{src}\t{dst}")] + Cmpq { src: A, dst: A }, + #[display(fmt = "jmp\t{lbl}")] + Jmp { lbl: UniqueSym<'p> }, + #[display(fmt = "jcc\t{cnd}\t{lbl}")] + Jcc { lbl: UniqueSym<'p>, cnd: Cnd }, + #[display(fmt = "andq {src}\t{dst}")] + Andq { src: A, dst: A }, + #[display(fmt = "orq {src}\t{dst}")] + Orq { src: A, dst: A }, + #[display(fmt = "xorq\t{src}\t{dst}")] + Xorq { src: A, dst: A }, + #[display(fmt = "notq\t{dst}")] + Notq { dst: A }, + #[display(fmt = "setcc\t{cnd}")] + Setcc { cnd: Cnd }, //TODO allow setting other byteregs + #[display(fmt = "loadlbl\t{sym}\t{dst}")] + LoadLbl { sym: UniqueSym<'p>, dst: A }, + #[display(fmt = "call_direct\t{lbl}\t// arity: {arity}")] + CallqDirect { lbl: UniqueSym<'p>, arity: usize }, + #[display(fmt = "call_indirect\t{src}\t// arity: {arity}")] + CallqIndirect { src: A, arity: usize }, } -fn select_atom<'p>(expr: &Atom<'p>) -> VarArg<'p> { - match expr { - Atom::Val { val } => imm!(*val), - Atom::Var { sym } => var!(*sym), - } +#[derive(Debug, PartialEq, Clone, Copy, Hash, Eq, Display)] +pub enum VarArg<'p> { + #[display(fmt = "${val}")] + Imm { val: i64 }, + #[display(fmt = "%{reg}")] + Reg { reg: Reg }, + #[display(fmt = "[%{reg} + ${off}]")] + Deref { reg: Reg, off: i64 }, + #[display(fmt = "{sym}")] + XVar { sym: UniqueSym<'p> }, } -fn select_cmp(op: Op) -> Cnd { - match op { - Op::GT => Cnd::GT, - Op::GE => Cnd::GE, - Op::EQ => Cnd::EQ, - Op::LE => Cnd::LE, - Op::LT => Cnd::LT, - Op::NE => Cnd::NE, - _ => unreachable!(), - } + +pub const CALLER_SAVED: [Reg; 9] = [ + Reg::RAX, + Reg::RCX, + Reg::RDX, + Reg::RSI, + Reg::RDI, + Reg::R8, + Reg::R9, + Reg::R10, + Reg::R11, +]; +pub const CALLEE_SAVED: [Reg; 7] = [ + Reg::RSP, + Reg::RBP, + Reg::RBX, + Reg::R12, + Reg::R13, + Reg::R14, + Reg::R15, +]; +pub const CALLEE_SAVED_NO_STACK: [Reg; 5] = [Reg::RBX, Reg::R12, Reg::R13, Reg::R14, Reg::R15]; + +pub const ARG_PASSING_REGS: [Reg; 6] = [Reg::RDI, Reg::RSI, Reg::RDX, Reg::RCX, Reg::R8, Reg::R9]; +pub const SYSCALL_REGS: [Reg; 7] = [ + Reg::RAX, + Reg::RDI, + Reg::RSI, + Reg::RDX, + Reg::RCX, + Reg::R8, + Reg::R9, +]; + +#[derive(Debug, PartialEq, Clone, Copy, Eq, Hash, Ord, PartialOrd, Display)] +#[allow(clippy::upper_case_acronyms)] +pub enum Reg { + RSP, + RBP, + RAX, + RBX, + RCX, + RDX, + RSI, + RDI, + R8, + R9, + R10, + R11, + R12, + R13, + R14, + R15, } #[cfg(test)] diff --git a/compiler/src/passes/select/select.rs b/compiler/src/passes/select/select.rs new file mode 100644 index 0000000..37b158e --- /dev/null +++ b/compiler/src/passes/select/select.rs @@ -0,0 +1,189 @@ +use crate::passes::atomize::Atom; +use crate::passes::explicate::{CExpr, PrgExplicated, Tail}; +use crate::passes::parse::Op; +use crate::passes::select::io::Std; +use crate::utils::gen_sym::{gen_sym, UniqueSym}; +use crate::*; +use std::collections::HashMap; +use crate::passes::select::{ARG_PASSING_REGS, Block, CALLEE_SAVED_NO_STACK, Cnd, Instr, VarArg, X86Selected}; + +impl<'p> PrgExplicated<'p> { + #[must_use] + pub fn select(self) -> X86Selected<'p> { + let mut blocks = HashMap::new(); + let std = Std::new(&mut blocks); + + blocks.extend( + self.blocks + .into_iter() + .map(|(sym, block)| (sym, select_block(sym, block, &std, &self.fn_params))), + ); + + X86Selected { + blocks, + entry: self.entry, + std, + } + } +} + +fn select_block<'p>( + sym: UniqueSym<'p>, + tail: Tail<'p>, + std: &Std<'p>, + fn_params: &HashMap, Vec>>, +) -> Block<'p, VarArg<'p>> { + let mut instrs = Vec::new(); + + if let Some(params) = fn_params.get(&sym) { + instrs.push(pushq!(reg!(RBP))); + instrs.push(movq!(reg!(RSP), reg!(RBP))); + for reg in CALLEE_SAVED_NO_STACK { + instrs.push(pushq!(VarArg::Reg { reg })); + } + + for (reg, param) in ARG_PASSING_REGS.into_iter().zip(params.iter()) { + instrs.push(movq!(VarArg::Reg { reg }, VarArg::XVar { sym: *param })); + } + assert!( + params.len() <= 6, + "Argument passing to stack is not yet implemented." + ); + } + + select_tail(tail, &mut instrs, std); + + Block { instrs } +} + +fn select_tail<'p>(tail: Tail<'p>, instrs: &mut Vec>>, std: &Std<'p>) { + match tail { + Tail::Return { expr } => { + instrs.extend(select_assign(reg!(RAX), expr, std)); + + for reg in CALLEE_SAVED_NO_STACK.into_iter().rev() { + instrs.push(popq!(VarArg::Reg { reg })); + } + instrs.push(popq!(reg!(RBP))); + + instrs.push(retq!()); + } + Tail::Seq { sym, bnd, tail } => { + instrs.extend(select_assign(var!(sym), bnd, std)); + select_tail(*tail, instrs, std); + } + Tail::IfStmt { cnd, thn, els } => match cnd { + CExpr::Prim { op, args } => { + let tmp = gen_sym("tmp"); + instrs.extend(vec![ + movq!(select_atom(&args[0]), var!(tmp)), + cmpq!(select_atom(&args[1]), var!(tmp)), + jcc!(thn, select_cmp(op)), + jmp!(els), + ]); + } + _ => unreachable!(), + }, + Tail::Goto { lbl } => { + instrs.push(jmp!(lbl)); + } + } +} + +fn select_assign<'p>( + dst: VarArg<'p>, + expr: CExpr<'p>, + std: &Std<'p>, +) -> Vec>> { + match expr { + CExpr::Atom { + atm: Atom::Val { val }, + } => vec![movq!(imm!(val), dst)], + CExpr::Atom { + atm: Atom::Var { sym }, + } => vec![movq!(var!(sym), dst)], + CExpr::Prim { op, args } => match (op, args.as_slice()) { + (Op::Plus, [a0, a1]) => vec![movq!(select_atom(a0), dst), addq!(select_atom(a1), dst)], + (Op::Minus, [a0, a1]) => vec![movq!(select_atom(a0), dst), subq!(select_atom(a1), dst)], + (Op::Minus, [a0]) => vec![movq!(select_atom(a0), dst), negq!(dst)], + (Op::Mul, [a0, a1]) => vec![ + movq!(select_atom(a1), reg!(RAX)), + movq!(select_atom(a0), reg!(RBX)), + mulq!(reg!(RBX)), + movq!(reg!(RAX), dst), + ], + (Op::Div, [a0, a1]) => vec![ + movq!(imm!(0), reg!(RDX)), + movq!(select_atom(a0), reg!(RAX)), + movq!(select_atom(a1), reg!(RBX)), + divq!(reg!(RBX)), + movq!(reg!(RAX), dst), + ], + (Op::Mod, [a0, a1]) => vec![ + movq!(imm!(0), reg!(RDX)), + movq!(select_atom(a0), reg!(RAX)), + movq!(select_atom(a1), reg!(RBX)), + divq!(reg!(RBX)), + movq!(reg!(RDX), dst), + ], + (Op::Read, []) => { + vec![callq_direct!(std.read_int, 0), movq!(reg!(RAX), dst)] + } + (Op::Print, [a0]) => vec![ + movq!(select_atom(a0), reg!(RDI)), + callq_direct!(std.print_int, 1), + movq!(select_atom(a0), dst), + ], + (Op::LAnd, [a0, a1]) => vec![movq!(select_atom(a0), dst), andq!(select_atom(a1), dst)], + (Op::LOr, [a0, a1]) => vec![movq!(select_atom(a0), dst), orq!(select_atom(a1), dst)], + (Op::Not, [a0]) => vec![movq!(select_atom(a0), dst), xorq!(imm!(1), dst)], + (Op::Xor, [a0, a1]) => vec![movq!(select_atom(a0), dst), xorq!(select_atom(a1), dst)], + (op @ (Op::GT | Op::GE | Op::EQ | Op::LE | Op::LT | Op::NE), [a0, a1]) => { + let tmp = gen_sym("tmp"); + vec![ + movq!(select_atom(a0), var!(tmp)), + cmpq!(select_atom(a1), var!(tmp)), + movq!(imm!(0), reg!(RAX)), + setcc!(select_cmp(op)), + movq!(reg!(RAX), dst), + ] + } + _ => panic!("Encountered Prim with incorrect arity during select instructions pass."), + }, + CExpr::FunRef { sym } => vec![load_lbl!(sym, dst)], + CExpr::Apply { fun, args } => { + let mut instrs = vec![]; + + for (arg, reg) in args.iter().zip(ARG_PASSING_REGS.into_iter()) { + instrs.push(movq!(select_atom(arg), VarArg::Reg { reg })); + } + assert!( + args.len() <= 6, + "Argument passing to stack is not yet implemented." + ); + + instrs.push(callq_indirect!(select_atom(&fun), args.len())); + instrs.push(movq!(reg!(RAX), dst)); + instrs + } + } +} + +fn select_atom<'p>(expr: &Atom<'p>) -> VarArg<'p> { + match expr { + Atom::Val { val } => imm!(*val), + Atom::Var { sym } => var!(*sym), + } +} + +fn select_cmp(op: Op) -> Cnd { + match op { + Op::GT => Cnd::GT, + Op::GE => Cnd::GE, + Op::EQ => Cnd::EQ, + Op::LE => Cnd::LE, + Op::LT => Cnd::LT, + Op::NE => Cnd::NE, + _ => unreachable!(), + } +} From 0195edaf31172118c6a28a93fdf8a6b110d37467 Mon Sep 17 00:00:00 2001 From: jonathan Date: Mon, 30 Oct 2023 19:42:34 +0100 Subject: [PATCH 11/16] Refactor pt 2 --- bencher/src/main.rs | 2 +- .../{interpreter/value.rs => interpreter.rs} | 83 ++-- compiler/src/interpreter/mod.rs | 61 --- compiler/src/language/mod.rs | 1 - compiler/src/language/x86var.rs | 139 ------ compiler/src/lib.rs | 4 +- compiler/src/passes/conclude/conclude.rs | 7 +- compiler/src/passes/conclude/mod.rs | 24 + compiler/src/passes/emit/binary.rs | 2 +- compiler/src/{ => passes/emit}/elf/header.rs | 4 +- compiler/src/{ => passes/emit}/elf/mod.rs | 4 +- compiler/src/{ => passes/emit}/elf/program.rs | 2 +- compiler/src/{ => passes/emit}/elf/section.rs | 0 compiler/src/passes/emit/mod.rs | 8 +- compiler/src/passes/emit/mul_div.rs | 2 +- compiler/src/passes/emit/push_pop.rs | 2 +- compiler/src/passes/emit/unary.rs | 2 +- compiler/src/passes/explicate/interpret.rs | 2 +- .../src/passes/interference/assign_homes.rs | 6 +- .../interference/coloring_interference.rs | 4 +- .../interference/compute_interference.rs | 6 +- .../passes/interference/liveness_analysis.rs | 6 +- compiler/src/passes/interference/mod.rs | 101 ++++ compiler/src/passes/parse/interpreter.rs | 2 +- compiler/src/passes/parse/mod.rs | 26 ++ compiler/src/passes/patch_instructions/mod.rs | 25 + .../patch_instructions/patch_instructions.rs | 7 +- .../select/interpreter.rs} | 6 +- compiler/src/passes/select/io.rs | 4 +- compiler/src/passes/select/macros.rs | 431 +++++++++--------- compiler/src/passes/select/mod.rs | 16 +- compiler/src/passes/select/select.rs | 4 +- compiler/src/utils/split_test.rs | 2 +- compiler/tests/integration.rs | 2 +- 34 files changed, 504 insertions(+), 493 deletions(-) rename compiler/src/{interpreter/value.rs => interpreter.rs} (58%) delete mode 100644 compiler/src/interpreter/mod.rs delete mode 100644 compiler/src/language/mod.rs delete mode 100644 compiler/src/language/x86var.rs rename compiler/src/{ => passes/emit}/elf/header.rs (95%) rename compiler/src/{ => passes/emit}/elf/mod.rs (91%) rename compiler/src/{ => passes/emit}/elf/program.rs (98%) rename compiler/src/{ => passes/emit}/elf/section.rs (100%) rename compiler/src/{interpreter/x86var.rs => passes/select/interpreter.rs} (98%) diff --git a/bencher/src/main.rs b/bencher/src/main.rs index d43dd07..8b741c1 100644 --- a/bencher/src/main.rs +++ b/bencher/src/main.rs @@ -1,6 +1,6 @@ use clap::Parser; use compiler::elf::ElfFile; -use compiler::interpreter::x86var::IStats; +use compiler::interpreter::interpreter::IStats; use compiler::interpreter::{TestIO, IO}; use compiler::passes::parse::parse::parse_program; use compiler::utils::split_test::split_test_raw; diff --git a/compiler/src/interpreter/value.rs b/compiler/src/interpreter.rs similarity index 58% rename from compiler/src/interpreter/value.rs rename to compiler/src/interpreter.rs index eabe946..444189f 100644 --- a/compiler/src/interpreter/value.rs +++ b/compiler/src/interpreter.rs @@ -2,7 +2,63 @@ use crate::passes::parse::Lit; use derive_more::Display; use std::fmt::Display; use std::hash::Hash; -use std::str::FromStr; +use std::io::stdin; +use std::vec::IntoIter; + +pub trait IO { + fn read(&mut self) -> Lit; + fn print(&mut self, v: Lit); +} + +struct StdIO {} + +impl IO for StdIO { + fn read(&mut self) -> Lit { + print!("> "); + let mut input = String::new(); + stdin() + .read_line(&mut input) + .expect("IO error or something"); + input + .trim_end() + .parse() + .expect("Provided input was not a valid i64") + } + + fn print(&mut self, v: Lit) { + println!("{v}"); + } +} + +pub struct TestIO { + inputs: IntoIter, + outputs: Vec, +} + +impl TestIO { + pub fn new(inputs: Vec) -> Self { + Self { + inputs: inputs.into_iter(), + outputs: Vec::new(), + } + } + + pub fn outputs(&self) -> &Vec { + &self.outputs + } +} + +impl IO for TestIO { + fn read(&mut self) -> Lit { + self.inputs + .next() + .expect("Test tried to read more input than were available.") + } + + fn print(&mut self, v: Lit) { + self.outputs.push(v); + } +} #[derive(Eq, PartialEq, Copy, Clone, Debug, Display)] pub enum Val { @@ -54,28 +110,3 @@ impl Val { } } } - -impl From for i64 { - fn from(value: Lit) -> Self { - match value { - Lit::Int { val } => val, - Lit::Bool { val } => val as i64, - Lit::Unit => 0, - } - } -} - -impl FromStr for Lit { - type Err = (); - - fn from_str(s: &str) -> Result { - Ok(match s { - "false" => Lit::Bool { val: false }, - "true" => Lit::Bool { val: true }, - "unit" => Lit::Unit, - s => Lit::Int { - val: s.parse().map_err(|_| ())?, - }, - }) - } -} diff --git a/compiler/src/interpreter/mod.rs b/compiler/src/interpreter/mod.rs deleted file mode 100644 index 14cd45c..0000000 --- a/compiler/src/interpreter/mod.rs +++ /dev/null @@ -1,61 +0,0 @@ -pub mod value; -pub mod x86var; - -use crate::passes::parse::Lit; -use std::io::stdin; -use std::vec::IntoIter; - -pub trait IO { - fn read(&mut self) -> Lit; - fn print(&mut self, v: Lit); -} - -struct StdIO {} - -impl IO for StdIO { - fn read(&mut self) -> Lit { - print!("> "); - let mut input = String::new(); - stdin() - .read_line(&mut input) - .expect("IO error or something"); - input - .trim_end() - .parse() - .expect("Provided input was not a valid i64") - } - - fn print(&mut self, v: Lit) { - println!("{v}"); - } -} - -pub struct TestIO { - inputs: IntoIter, - outputs: Vec, -} - -impl TestIO { - pub fn new(inputs: Vec) -> Self { - Self { - inputs: inputs.into_iter(), - outputs: Vec::new(), - } - } - - pub fn outputs(&self) -> &Vec { - &self.outputs - } -} - -impl IO for TestIO { - fn read(&mut self) -> Lit { - self.inputs - .next() - .expect("Test tried to read more input than were available.") - } - - fn print(&mut self, v: Lit) { - self.outputs.push(v); - } -} diff --git a/compiler/src/language/mod.rs b/compiler/src/language/mod.rs deleted file mode 100644 index a87fa85..0000000 --- a/compiler/src/language/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod x86var; diff --git a/compiler/src/language/x86var.rs b/compiler/src/language/x86var.rs deleted file mode 100644 index d6b81e1..0000000 --- a/compiler/src/language/x86var.rs +++ /dev/null @@ -1,139 +0,0 @@ -use crate::passes::select::io::Std; -use crate::utils::gen_sym::UniqueSym; -use derive_more::Display; -use functor_derive::Functor; -use petgraph::graphmap::GraphMap; -use petgraph::Undirected; -use std::collections::{HashMap, HashSet}; -use crate::passes::select::{Block, Instr, Reg, VarArg, X86Selected}; - -#[derive(Debug, PartialEq)] -pub struct X86Concluded<'p> { - pub blocks: HashMap, Block<'p, Arg>>, - pub entry: UniqueSym<'p>, - pub std: Std<'p>, -} - -#[derive(Debug, PartialEq)] -pub struct X86Patched<'p> { - pub blocks: HashMap, Block<'p, Arg>>, - pub entry: UniqueSym<'p>, - pub stack_space: usize, - pub std: Std<'p>, -} - -#[derive(Debug, PartialEq)] -pub struct X86Assigned<'p> { - pub blocks: HashMap, Block<'p, Arg>>, - pub entry: UniqueSym<'p>, - pub stack_space: usize, - pub std: Std<'p>, -} - - -#[derive(Debug, PartialEq)] -pub struct LX86VarProgram<'p> { - pub blocks: HashMap, LBlock<'p>>, - pub entry: UniqueSym<'p>, - pub std: Std<'p>, -} - -#[derive(Debug)] -pub struct X86WithInterference<'p> { - pub blocks: HashMap, Block<'p, VarArg<'p>>>, - pub entry: UniqueSym<'p>, - pub interference: InterferenceGraph<'p>, - pub std: Std<'p>, -} - -#[derive(Debug)] -pub struct X86Colored<'p> { - pub blocks: HashMap, Block<'p, VarArg<'p>>>, - pub entry: UniqueSym<'p>, - pub color_map: HashMap, Arg>, - pub stack_space: usize, - pub std: Std<'p>, -} - -pub type InterferenceGraph<'p> = GraphMap, (), Undirected>; - -#[derive(Debug, PartialEq)] -pub struct LBlock<'p> { - pub instrs: Vec<(Instr<'p, VarArg<'p>>, HashSet>)>, -} - - -#[derive(Debug, PartialEq, Copy, Clone, Hash, Eq, Display)] -pub enum Arg { - #[display(fmt = "${val}")] - Imm { val: i64 }, - #[display(fmt = "%{reg}")] - Reg { reg: Reg }, - #[display(fmt = "[%{reg} + ${off}]")] - Deref { reg: Reg, off: i64 }, -} - -#[derive(Debug, PartialEq, Clone, Copy, Hash, Eq, Ord, PartialOrd)] -pub enum LArg<'p> { - Var { sym: UniqueSym<'p> }, - Reg { reg: Reg }, -} - -impl<'p> From> for VarArg<'p> { - fn from(val: LArg<'p>) -> Self { - match val { - LArg::Var { sym } => VarArg::XVar { sym }, - LArg::Reg { reg } => VarArg::Reg { reg }, - } - } -} - - -impl<'p> From> for X86Selected<'p> { - fn from(value: X86Concluded<'p>) -> Self { - X86Selected { - blocks: value.blocks.fmap(|v| v.fmap(Into::into)), - entry: value.entry, - std: value.std, - } - } -} - -impl<'p> From> for X86Selected<'p> { - fn from(value: X86Patched<'p>) -> Self { - X86Selected { - blocks: value.blocks.fmap(|v| v.fmap(Into::into)), - entry: value.entry, - std: value.std, - } - } -} - -impl<'p> From> for X86Selected<'p> { - fn from(value: X86Assigned<'p>) -> Self { - X86Selected { - blocks: value.blocks.fmap(|v| v.fmap(Into::into)), - entry: value.entry, - std: value.std, - } - } -} - -impl<'p> From> for Block<'p, VarArg<'p>> { - fn from(value: LBlock<'p>) -> Self { - Block { - instrs: value.instrs.into_iter().map(|(instr, _)| instr).collect(), - } - } -} - -impl<'p> From for VarArg<'p> { - fn from(value: Arg) -> Self { - match value { - Arg::Imm { val } => VarArg::Imm { val }, - Arg::Reg { reg } => VarArg::Reg { reg }, - Arg::Deref { reg, off } => VarArg::Deref { reg, off }, - } - } -} - diff --git a/compiler/src/lib.rs b/compiler/src/lib.rs index 0bbc13d..9a12ec2 100644 --- a/compiler/src/lib.rs +++ b/compiler/src/lib.rs @@ -1,13 +1,11 @@ #![allow(clippy::module_inception)] -use crate::elf::ElfFile; use crate::passes::parse::parse::parse_program; use std::fs::File; use std::path::Path; +use crate::passes::emit::elf::ElfFile; -pub mod elf; pub mod interpreter; -pub mod language; pub mod passes; pub mod utils; diff --git a/compiler/src/passes/conclude/conclude.rs b/compiler/src/passes/conclude/conclude.rs index 38d50f1..c2bebc0 100644 --- a/compiler/src/passes/conclude/conclude.rs +++ b/compiler/src/passes/conclude/conclude.rs @@ -1,6 +1,7 @@ -use crate::*; -use crate::language::x86var::{X86Concluded, X86Patched}; +use crate::passes::conclude::X86Concluded; +use crate::passes::patch_instructions::X86Patched; use crate::utils::gen_sym::gen_sym; +use crate::*; impl<'p> X86Patched<'p> { #[must_use] @@ -31,9 +32,9 @@ impl<'p> X86Patched<'p> { #[cfg(test)] mod tests { use crate::interpreter::TestIO; + use crate::passes::select::X86Selected; use crate::utils::split_test::split_test; use test_each_file::test_each_file; - use crate::passes::select::X86Selected; fn conclude([test]: [&str; 1]) { let (input, expected_output, expected_return, program) = split_test(test); diff --git a/compiler/src/passes/conclude/mod.rs b/compiler/src/passes/conclude/mod.rs index 1d9d24c..733e2a8 100644 --- a/compiler/src/passes/conclude/mod.rs +++ b/compiler/src/passes/conclude/mod.rs @@ -1 +1,25 @@ +use crate::passes::interference::Arg; +use crate::passes::select::io::Std; +use crate::passes::select::{Block, X86Selected}; +use crate::utils::gen_sym::UniqueSym; +use functor_derive::Functor; +use std::collections::HashMap; + pub mod conclude; + +#[derive(Debug, PartialEq)] +pub struct X86Concluded<'p> { + pub blocks: HashMap, Block<'p, Arg>>, + pub entry: UniqueSym<'p>, + pub std: Std<'p>, +} + +impl<'p> From> for X86Selected<'p> { + fn from(value: X86Concluded<'p>) -> Self { + X86Selected { + blocks: value.blocks.fmap(|v| v.fmap(Into::into)), + entry: value.entry, + std: value.std, + } + } +} diff --git a/compiler/src/passes/emit/binary.rs b/compiler/src/passes/emit/binary.rs index aabbfdf..139dab3 100644 --- a/compiler/src/passes/emit/binary.rs +++ b/compiler/src/passes/emit/binary.rs @@ -1,5 +1,5 @@ -use crate::language::x86var::Arg; use crate::passes::emit::encode_reg; +use crate::passes::interference::Arg; use crate::passes::select::Reg; pub struct BinaryOpInfo { diff --git a/compiler/src/elf/header.rs b/compiler/src/passes/emit/elf/header.rs similarity index 95% rename from compiler/src/elf/header.rs rename to compiler/src/passes/emit/elf/header.rs index 9d4a03a..44ab8d1 100644 --- a/compiler/src/elf/header.rs +++ b/compiler/src/passes/emit/elf/header.rs @@ -1,7 +1,7 @@ -use crate::elf::program::ProgramHeader; -use crate::elf::section::SectionHeader; use std::mem::size_of; use zerocopy::AsBytes; +use crate::passes::emit::elf::program::ProgramHeader; +use crate::passes::emit::elf::section::SectionHeader; #[repr(C, packed)] #[derive(AsBytes, Copy, Clone)] diff --git a/compiler/src/elf/mod.rs b/compiler/src/passes/emit/elf/mod.rs similarity index 91% rename from compiler/src/elf/mod.rs rename to compiler/src/passes/emit/elf/mod.rs index 12ca742..5867c95 100644 --- a/compiler/src/elf/mod.rs +++ b/compiler/src/passes/emit/elf/mod.rs @@ -1,11 +1,11 @@ #![allow(non_camel_case_types)] #![allow(clippy::upper_case_acronyms)] -use crate::elf::header::ElfHeader; -use crate::elf::program::ProgramHeader; use std::io::Write; use std::mem::size_of; use zerocopy::AsBytes; +use crate::passes::emit::elf::header::ElfHeader; +use crate::passes::emit::elf::program::ProgramHeader; mod header; mod program; diff --git a/compiler/src/elf/program.rs b/compiler/src/passes/emit/elf/program.rs similarity index 98% rename from compiler/src/elf/program.rs rename to compiler/src/passes/emit/elf/program.rs index 8054f83..8c94737 100644 --- a/compiler/src/elf/program.rs +++ b/compiler/src/passes/emit/elf/program.rs @@ -1,7 +1,7 @@ -use crate::elf::PRG_OFFSET; use bitflags::bitflags; use std::mem::size_of; use zerocopy::AsBytes; +use crate::passes::emit::elf::PRG_OFFSET; #[allow(unused)] #[allow(non_camel_case_types)] diff --git a/compiler/src/elf/section.rs b/compiler/src/passes/emit/elf/section.rs similarity index 100% rename from compiler/src/elf/section.rs rename to compiler/src/passes/emit/elf/section.rs diff --git a/compiler/src/passes/emit/mod.rs b/compiler/src/passes/emit/mod.rs index e4a8a82..6106349 100644 --- a/compiler/src/passes/emit/mod.rs +++ b/compiler/src/passes/emit/mod.rs @@ -3,9 +3,10 @@ mod mul_div; mod push_pop; mod special; mod unary; +pub mod elf; -use crate::elf::PRG_OFFSET; use crate::imm; +use crate::passes::conclude::X86Concluded; use crate::passes::emit::binary::{ encode_binary_instr, ADDQ_INFO, ANDQ_INFO, CMPQ_INFO, MOVQ_INFO, ORQ_INFO, SUBQ_INFO, XORQ_INFO, }; @@ -13,10 +14,11 @@ use crate::passes::emit::mul_div::{encode_muldiv_instr, MulDivOpInfo}; use crate::passes::emit::push_pop::{encode_push_pop, POPQ_INFO, PUSHQ_INFO}; use crate::passes::emit::special::encode_setcc; use crate::passes::emit::unary::{encode_unary_instr, CALLQ_INDIRECT_INFO, NEGQ_INFO}; +use crate::passes::interference::Arg; +use crate::passes::select::{Block, Cnd, Instr, Reg}; use crate::utils::gen_sym::UniqueSym; use std::collections::HashMap; -use crate::language::x86var::{Arg, X86Concluded}; -use crate::passes::select::{Block, Cnd, Instr, Reg}; +use crate::passes::emit::elf::PRG_OFFSET; impl<'p> X86Concluded<'p> { #[must_use] diff --git a/compiler/src/passes/emit/mul_div.rs b/compiler/src/passes/emit/mul_div.rs index 6f11aff..5702cb1 100644 --- a/compiler/src/passes/emit/mul_div.rs +++ b/compiler/src/passes/emit/mul_div.rs @@ -1,5 +1,5 @@ -use crate::language::x86var::Arg; use crate::passes::emit::encode_reg; +use crate::passes::interference::Arg; pub struct MulDivOpInfo { pub op: u8, diff --git a/compiler/src/passes/emit/push_pop.rs b/compiler/src/passes/emit/push_pop.rs index e417867..391ed80 100644 --- a/compiler/src/passes/emit/push_pop.rs +++ b/compiler/src/passes/emit/push_pop.rs @@ -1,5 +1,5 @@ -use crate::language::x86var::Arg; use crate::passes::emit; +use crate::passes::interference::Arg; pub struct PushPopInfo { pub op_reg: u8, diff --git a/compiler/src/passes/emit/unary.rs b/compiler/src/passes/emit/unary.rs index a4e9df3..134b5e0 100644 --- a/compiler/src/passes/emit/unary.rs +++ b/compiler/src/passes/emit/unary.rs @@ -1,5 +1,5 @@ -use crate::language::x86var::Arg; use crate::passes::emit; +use crate::passes::interference::Arg; use crate::passes::select::Reg; pub struct UnaryOpInfo { diff --git a/compiler/src/passes/explicate/interpret.rs b/compiler/src/passes/explicate/interpret.rs index 8914ee5..e805328 100644 --- a/compiler/src/passes/explicate/interpret.rs +++ b/compiler/src/passes/explicate/interpret.rs @@ -1,4 +1,4 @@ -use crate::interpreter::value::Val; +use crate::interpreter::Val; use crate::interpreter::IO; use crate::passes::atomize::Atom; use crate::passes::explicate::{CExpr, PrgExplicated, Tail}; diff --git a/compiler/src/passes/interference/assign_homes.rs b/compiler/src/passes/interference/assign_homes.rs index 9db6a8b..e16ccc1 100644 --- a/compiler/src/passes/interference/assign_homes.rs +++ b/compiler/src/passes/interference/assign_homes.rs @@ -1,11 +1,11 @@ +use crate::passes::interference::{Arg, X86Assigned, X86Colored}; +use crate::passes::select::{Block, Instr, VarArg}; use crate::utils::gen_sym::UniqueSym; use crate::{ addq, andq, callq_direct, callq_indirect, cmpq, divq, jcc, jmp, load_lbl, movq, mulq, negq, notq, orq, popq, pushq, retq, setcc, subq, syscall, xorq, }; use std::collections::HashMap; -use crate::language::x86var::{Arg, X86Assigned, X86Colored}; -use crate::passes::select::{Block, Instr, VarArg}; impl<'p> X86Colored<'p> { #[must_use] @@ -75,11 +75,11 @@ fn assign_instr<'p>( #[cfg(test)] mod tests { use crate::interpreter::TestIO; + use crate::passes::select::X86Selected; use crate::utils::gen_sym::gen_sym; use crate::utils::split_test::split_test; use crate::{block, callq_direct, movq, reg}; use test_each_file::test_each_file; - use crate::passes::select::X86Selected; fn assign_homes([test]: [&str; 1]) { let (input, expected_output, expected_return, program) = split_test(test); diff --git a/compiler/src/passes/interference/coloring_interference.rs b/compiler/src/passes/interference/coloring_interference.rs index b042a0e..c53fb05 100644 --- a/compiler/src/passes/interference/coloring_interference.rs +++ b/compiler/src/passes/interference/coloring_interference.rs @@ -1,8 +1,8 @@ -use crate::language::x86var::{Arg, InterferenceGraph, LArg, X86Colored, X86WithInterference}; +use crate::passes::interference::{Arg, InterferenceGraph, LArg, X86Colored, X86WithInterference}; +use crate::passes::select::Reg; use crate::utils::gen_sym::UniqueSym; use itertools::Itertools; use std::collections::{HashMap, HashSet}; -use crate::passes::select::Reg; impl<'p> X86WithInterference<'p> { #[must_use] diff --git a/compiler/src/passes/interference/compute_interference.rs b/compiler/src/passes/interference/compute_interference.rs index a5a56e2..34cb74c 100644 --- a/compiler/src/passes/interference/compute_interference.rs +++ b/compiler/src/passes/interference/compute_interference.rs @@ -1,9 +1,7 @@ -use crate::language::x86var::{ - InterferenceGraph, LArg, LX86VarProgram, X86WithInterference, -}; use crate::passes::interference::liveness_analysis::{handle_instr, ReadWriteOp}; -use std::collections::HashMap; +use crate::passes::interference::{InterferenceGraph, LArg, LX86VarProgram, X86WithInterference}; use crate::passes::select::VarArg; +use std::collections::HashMap; impl<'p> LX86VarProgram<'p> { #[must_use] diff --git a/compiler/src/passes/interference/liveness_analysis.rs b/compiler/src/passes/interference/liveness_analysis.rs index 1100fb2..2eaf570 100644 --- a/compiler/src/passes/interference/liveness_analysis.rs +++ b/compiler/src/passes/interference/liveness_analysis.rs @@ -1,9 +1,11 @@ -use crate::language::x86var::{LArg, LBlock, LX86VarProgram}; use crate::utils::gen_sym::UniqueSym; +use crate::passes::interference::{LArg, LBlock, LX86VarProgram}; +use crate::passes::select::{ + Block, Instr, Reg, VarArg, X86Selected, ARG_PASSING_REGS, CALLER_SAVED, SYSCALL_REGS, +}; use std::collections::hash_map::Entry; use std::collections::{HashMap, HashSet}; -use crate::passes::select::{ARG_PASSING_REGS, Block, CALLER_SAVED, Instr, Reg, SYSCALL_REGS, VarArg, X86Selected}; impl<'p> X86Selected<'p> { #[must_use] diff --git a/compiler/src/passes/interference/mod.rs b/compiler/src/passes/interference/mod.rs index 02cd37b..a686ba0 100644 --- a/compiler/src/passes/interference/mod.rs +++ b/compiler/src/passes/interference/mod.rs @@ -1,4 +1,105 @@ +use crate::passes::select::io::Std; +use crate::passes::select::{Block, Instr, Reg, VarArg, X86Selected}; +use crate::utils::gen_sym::UniqueSym; +use derive_more::Display; +use functor_derive::Functor; +use petgraph::graphmap::GraphMap; +use petgraph::Undirected; +use std::collections::{HashMap, HashSet}; + pub mod assign_homes; pub mod coloring_interference; pub mod compute_interference; pub mod liveness_analysis; + +#[derive(Debug, PartialEq)] +pub struct X86Assigned<'p> { + pub blocks: HashMap, Block<'p, Arg>>, + pub entry: UniqueSym<'p>, + pub stack_space: usize, + pub std: Std<'p>, +} + +#[derive(Debug, PartialEq)] +pub struct LX86VarProgram<'p> { + pub blocks: HashMap, LBlock<'p>>, + pub entry: UniqueSym<'p>, + pub std: Std<'p>, +} + +#[derive(Debug)] +pub struct X86WithInterference<'p> { + pub blocks: HashMap, Block<'p, VarArg<'p>>>, + pub entry: UniqueSym<'p>, + pub interference: InterferenceGraph<'p>, + pub std: Std<'p>, +} + +#[derive(Debug)] +pub struct X86Colored<'p> { + pub blocks: HashMap, Block<'p, VarArg<'p>>>, + pub entry: UniqueSym<'p>, + pub color_map: HashMap, Arg>, + pub stack_space: usize, + pub std: Std<'p>, +} + +pub type InterferenceGraph<'p> = GraphMap, (), Undirected>; + +#[derive(Debug, PartialEq)] +pub struct LBlock<'p> { + pub instrs: Vec<(Instr<'p, VarArg<'p>>, HashSet>)>, +} + +#[derive(Debug, PartialEq, Copy, Clone, Hash, Eq, Display)] +pub enum Arg { + #[display(fmt = "${val}")] + Imm { val: i64 }, + #[display(fmt = "%{reg}")] + Reg { reg: Reg }, + #[display(fmt = "[%{reg} + ${off}]")] + Deref { reg: Reg, off: i64 }, +} + +#[derive(Debug, PartialEq, Clone, Copy, Hash, Eq, Ord, PartialOrd)] +pub enum LArg<'p> { + Var { sym: UniqueSym<'p> }, + Reg { reg: Reg }, +} + +impl<'p> From> for VarArg<'p> { + fn from(val: LArg<'p>) -> Self { + match val { + LArg::Var { sym } => VarArg::XVar { sym }, + LArg::Reg { reg } => VarArg::Reg { reg }, + } + } +} + +impl<'p> From> for Block<'p, VarArg<'p>> { + fn from(value: LBlock<'p>) -> Self { + Block { + instrs: value.instrs.into_iter().map(|(instr, _)| instr).collect(), + } + } +} + +impl<'p> From for VarArg<'p> { + fn from(value: Arg) -> Self { + match value { + Arg::Imm { val } => VarArg::Imm { val }, + Arg::Reg { reg } => VarArg::Reg { reg }, + Arg::Deref { reg, off } => VarArg::Deref { reg, off }, + } + } +} + +impl<'p> From> for X86Selected<'p> { + fn from(value: X86Assigned<'p>) -> Self { + X86Selected { + blocks: value.blocks.fmap(|v| v.fmap(Into::into)), + entry: value.entry, + std: value.std, + } + } +} diff --git a/compiler/src/passes/parse/interpreter.rs b/compiler/src/passes/parse/interpreter.rs index c7904de..b5a2715 100644 --- a/compiler/src/passes/parse/interpreter.rs +++ b/compiler/src/passes/parse/interpreter.rs @@ -1,4 +1,4 @@ -use crate::interpreter::value::Val; +use crate::interpreter::Val; use crate::interpreter::IO; use crate::passes::parse::{Def, Expr, Lit, Op, PrgGenericVar}; use crate::utils::push_map::PushMap; diff --git a/compiler/src/passes/parse/mod.rs b/compiler/src/passes/parse/mod.rs index 3de8e1b..72e1ebb 100644 --- a/compiler/src/passes/parse/mod.rs +++ b/compiler/src/passes/parse/mod.rs @@ -8,6 +8,7 @@ use crate::passes::type_check::Type; use derive_more::Display; use std::collections::HashMap; use std::hash::Hash; +use std::str::FromStr; #[derive(Debug, PartialEq)] pub struct PrgParsed<'p> { @@ -133,6 +134,31 @@ impl Lit { } } +impl From for i64 { + fn from(value: Lit) -> Self { + match value { + Lit::Int { val } => val, + Lit::Bool { val } => val as i64, + Lit::Unit => 0, + } + } +} + +impl FromStr for Lit { + type Err = (); + + fn from_str(s: &str) -> Result { + Ok(match s { + "false" => Lit::Bool { val: false }, + "true" => Lit::Bool { val: true }, + "unit" => Lit::Unit, + s => Lit::Int { + val: s.parse().map_err(|_| ())?, + }, + }) + } +} + #[cfg(test)] mod tests { use crate::utils::split_test::split_test; diff --git a/compiler/src/passes/patch_instructions/mod.rs b/compiler/src/passes/patch_instructions/mod.rs index a653a24..684cb3c 100644 --- a/compiler/src/passes/patch_instructions/mod.rs +++ b/compiler/src/passes/patch_instructions/mod.rs @@ -1 +1,26 @@ +use crate::passes::interference::Arg; +use crate::passes::select::io::Std; +use crate::passes::select::{Block, X86Selected}; +use crate::utils::gen_sym::UniqueSym; +use functor_derive::Functor; +use std::collections::HashMap; + pub mod patch_instructions; + +#[derive(Debug, PartialEq)] +pub struct X86Patched<'p> { + pub blocks: HashMap, Block<'p, Arg>>, + pub entry: UniqueSym<'p>, + pub stack_space: usize, + pub std: Std<'p>, +} + +impl<'p> From> for X86Selected<'p> { + fn from(value: X86Patched<'p>) -> Self { + X86Selected { + blocks: value.blocks.fmap(|v| v.fmap(Into::into)), + entry: value.entry, + std: value.std, + } + } +} diff --git a/compiler/src/passes/patch_instructions/patch_instructions.rs b/compiler/src/passes/patch_instructions/patch_instructions.rs index c0f0064..bcdf348 100644 --- a/compiler/src/passes/patch_instructions/patch_instructions.rs +++ b/compiler/src/passes/patch_instructions/patch_instructions.rs @@ -1,6 +1,7 @@ -use crate::language::x86var::{Arg, X86Assigned, X86Patched}; -use crate::{addq, movq, reg, subq}; +use crate::passes::interference::{Arg, X86Assigned}; +use crate::passes::patch_instructions::X86Patched; use crate::passes::select::{Block, Instr}; +use crate::{addq, movq, reg, subq}; impl<'p> X86Assigned<'p> { #[must_use] @@ -47,11 +48,11 @@ fn patch_args<'p>(src: Arg, dst: Arg, op: fn(Arg, Arg) -> Instr<'p, Arg>) -> Vec #[cfg(test)] mod tests { use crate::interpreter::TestIO; + use crate::passes::select::X86Selected; use crate::utils::gen_sym::gen_sym; use crate::utils::split_test::split_test; use crate::{block, callq_direct, movq, reg}; use test_each_file::test_each_file; - use crate::passes::select::X86Selected; fn patch_instructions([test]: [&str; 1]) { let (input, expected_output, expected_return, program) = split_test(test); diff --git a/compiler/src/interpreter/x86var.rs b/compiler/src/passes/select/interpreter.rs similarity index 98% rename from compiler/src/interpreter/x86var.rs rename to compiler/src/passes/select/interpreter.rs index 6949432..356d9b7 100644 --- a/compiler/src/interpreter/x86var.rs +++ b/compiler/src/passes/select/interpreter.rs @@ -1,13 +1,15 @@ use crate::interpreter::IO; +use crate::passes::conclude::X86Concluded; use crate::passes::parse::Lit; +use crate::passes::select::{ + Block, Cnd, Instr, Reg, VarArg, X86Selected, CALLEE_SAVED, CALLER_SAVED, +}; use crate::utils::gen_sym::UniqueSym; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std::fmt::Debug; use std::mem; use zerocopy::AsBytes; -use crate::language::x86var::X86Concluded; -use crate::passes::select::{Block, CALLEE_SAVED, CALLER_SAVED, Cnd, Instr, Reg, VarArg, X86Selected}; #[derive(Default)] pub struct Status { diff --git a/compiler/src/passes/select/io.rs b/compiler/src/passes/select/io.rs index 2774490..c153219 100644 --- a/compiler/src/passes/select/io.rs +++ b/compiler/src/passes/select/io.rs @@ -1,11 +1,11 @@ +use crate::passes::select::Cnd; +use crate::passes::select::{Block, VarArg}; use crate::utils::gen_sym::{gen_sym, UniqueSym}; use crate::{ addq, block, cmpq, deref, divq, imm, jcc, jmp, movq, mulq, negq, popq, pushq, reg, retq, subq, syscall, }; use std::collections::HashMap; -use crate::passes::select::{Block, VarArg}; -use crate::passes::select::Cnd; #[derive(Debug, PartialEq, Eq)] pub struct Std<'p> { diff --git a/compiler/src/passes/select/macros.rs b/compiler/src/passes/select/macros.rs index 8758c45..41e8b79 100644 --- a/compiler/src/passes/select/macros.rs +++ b/compiler/src/passes/select/macros.rs @@ -1,222 +1,221 @@ - #[macro_export] - macro_rules! block { +#[macro_export] +macro_rules! block { ($($instr:expr),*) => { $crate::passes::select::Block { instrs: vec![$($instr),*] } }; } - #[macro_export] - macro_rules! addq { - ($src:expr, $dst:expr) => { - $crate::passes::select::Instr::Addq { - src: $src, - dst: $dst, - } - }; - } - - #[macro_export] - macro_rules! divq { - ($divisor:expr) => { - $crate::passes::select::Instr::Divq { divisor: $divisor } - }; - } - - #[macro_export] - macro_rules! mulq { - ($src:expr) => { - $crate::passes::select::Instr::Mulq { src: $src } - }; - } - - #[macro_export] - macro_rules! subq { - ($src:expr, $dst:expr) => { - $crate::passes::select::Instr::Subq { - src: $src, - dst: $dst, - } - }; - } - - #[macro_export] - macro_rules! cmpq { - ($src:expr, $dst:expr) => { - $crate::passes::select::Instr::Cmpq { - src: $src, - dst: $dst, - } - }; - } - #[macro_export] - macro_rules! andq { - ($src:expr, $dst:expr) => { - $crate::passes::select::Instr::Andq { - src: $src, - dst: $dst, - } - }; - } - - #[macro_export] - macro_rules! orq { - ($src:expr, $dst:expr) => { - $crate::passes::select::Instr::Orq { - src: $src, - dst: $dst, - } - }; - } - - #[macro_export] - macro_rules! xorq { - ($src:expr, $dst:expr) => { - $crate::passes::select::Instr::Xorq { - src: $src, - dst: $dst, - } - }; - } - - #[macro_export] - macro_rules! notq { - ($dst:expr) => { - $crate::passes::select::Instr::Notq { dst: $dst } - }; - } - - #[macro_export] - macro_rules! negq { - ($dst:expr) => { - $crate::passes::select::Instr::Negq { dst: $dst } - }; - } - - #[macro_export] - macro_rules! movq { - ($src:expr, $dst:expr) => { - $crate::passes::select::Instr::Movq { - src: $src, - dst: $dst, - } - }; - } - - #[macro_export] - macro_rules! load_lbl { - ($lbl:expr, $dst: expr) => { - $crate::passes::select::Instr::LoadLbl { - sym: $lbl, - dst: $dst, - } - }; - } - - #[macro_export] - macro_rules! pushq { - ($src:expr) => { - $crate::passes::select::Instr::Pushq { src: $src } - }; - } - - #[macro_export] - macro_rules! popq { - ($dst:expr) => { - $crate::passes::select::Instr::Popq { dst: $dst } - }; - } - - #[macro_export] - macro_rules! callq_direct { - ($lbl:expr, $arity:expr) => { - $crate::passes::select::Instr::CallqDirect { - lbl: $lbl, - arity: $arity, - } - }; - } - - #[macro_export] - macro_rules! callq_indirect { - ($src:expr, $arity:expr) => { - $crate::passes::select::Instr::CallqIndirect { - src: $src, - arity: $arity, - } - }; - } - - #[macro_export] - macro_rules! jmp { - ($lbl:expr) => { - $crate::passes::select::Instr::Jmp { lbl: $lbl } - }; - } - - #[macro_export] - macro_rules! setcc { - ($cnd:expr) => { - $crate::passes::select::Instr::Setcc { cnd: $cnd } - }; - } - - #[macro_export] - macro_rules! jcc { - ($lbl:expr, $cnd:expr) => { - $crate::passes::select::Instr::Jcc { - lbl: $lbl, - cnd: $cnd, - } - }; - } - - #[macro_export] - macro_rules! retq { - () => { - $crate::passes::select::Instr::Retq - }; - } - - #[macro_export] - macro_rules! syscall { - ($arity:expr) => { - $crate::passes::select::Instr::Syscall { arity: $arity } - }; - } - - #[macro_export] - macro_rules! imm { - ($val:expr) => { - $crate::language::x86var::Arg::Imm { val: $val.into() }.into() - }; - } - - #[macro_export] - macro_rules! reg { - ($reg:ident) => { - $crate::language::x86var::Arg::Reg { - reg: $crate::passes::select::Reg::$reg, - } - .into() - }; - } - - #[macro_export] - macro_rules! var { - ($sym:expr) => { - $crate::passes::select::VarArg::XVar { sym: $sym } - }; - } - - #[macro_export] - macro_rules! deref { - ($reg:ident, $off:expr) => { - $crate::language::x86var::Arg::Deref { - reg: crate::passes::select::Reg::$reg, - off: $off, - } - .into() - }; - } - +#[macro_export] +macro_rules! addq { + ($src:expr, $dst:expr) => { + $crate::passes::select::Instr::Addq { + src: $src, + dst: $dst, + } + }; +} + +#[macro_export] +macro_rules! divq { + ($divisor:expr) => { + $crate::passes::select::Instr::Divq { divisor: $divisor } + }; +} + +#[macro_export] +macro_rules! mulq { + ($src:expr) => { + $crate::passes::select::Instr::Mulq { src: $src } + }; +} + +#[macro_export] +macro_rules! subq { + ($src:expr, $dst:expr) => { + $crate::passes::select::Instr::Subq { + src: $src, + dst: $dst, + } + }; +} + +#[macro_export] +macro_rules! cmpq { + ($src:expr, $dst:expr) => { + $crate::passes::select::Instr::Cmpq { + src: $src, + dst: $dst, + } + }; +} +#[macro_export] +macro_rules! andq { + ($src:expr, $dst:expr) => { + $crate::passes::select::Instr::Andq { + src: $src, + dst: $dst, + } + }; +} + +#[macro_export] +macro_rules! orq { + ($src:expr, $dst:expr) => { + $crate::passes::select::Instr::Orq { + src: $src, + dst: $dst, + } + }; +} + +#[macro_export] +macro_rules! xorq { + ($src:expr, $dst:expr) => { + $crate::passes::select::Instr::Xorq { + src: $src, + dst: $dst, + } + }; +} + +#[macro_export] +macro_rules! notq { + ($dst:expr) => { + $crate::passes::select::Instr::Notq { dst: $dst } + }; +} + +#[macro_export] +macro_rules! negq { + ($dst:expr) => { + $crate::passes::select::Instr::Negq { dst: $dst } + }; +} + +#[macro_export] +macro_rules! movq { + ($src:expr, $dst:expr) => { + $crate::passes::select::Instr::Movq { + src: $src, + dst: $dst, + } + }; +} + +#[macro_export] +macro_rules! load_lbl { + ($lbl:expr, $dst: expr) => { + $crate::passes::select::Instr::LoadLbl { + sym: $lbl, + dst: $dst, + } + }; +} + +#[macro_export] +macro_rules! pushq { + ($src:expr) => { + $crate::passes::select::Instr::Pushq { src: $src } + }; +} + +#[macro_export] +macro_rules! popq { + ($dst:expr) => { + $crate::passes::select::Instr::Popq { dst: $dst } + }; +} + +#[macro_export] +macro_rules! callq_direct { + ($lbl:expr, $arity:expr) => { + $crate::passes::select::Instr::CallqDirect { + lbl: $lbl, + arity: $arity, + } + }; +} + +#[macro_export] +macro_rules! callq_indirect { + ($src:expr, $arity:expr) => { + $crate::passes::select::Instr::CallqIndirect { + src: $src, + arity: $arity, + } + }; +} + +#[macro_export] +macro_rules! jmp { + ($lbl:expr) => { + $crate::passes::select::Instr::Jmp { lbl: $lbl } + }; +} + +#[macro_export] +macro_rules! setcc { + ($cnd:expr) => { + $crate::passes::select::Instr::Setcc { cnd: $cnd } + }; +} + +#[macro_export] +macro_rules! jcc { + ($lbl:expr, $cnd:expr) => { + $crate::passes::select::Instr::Jcc { + lbl: $lbl, + cnd: $cnd, + } + }; +} + +#[macro_export] +macro_rules! retq { + () => { + $crate::passes::select::Instr::Retq + }; +} + +#[macro_export] +macro_rules! syscall { + ($arity:expr) => { + $crate::passes::select::Instr::Syscall { arity: $arity } + }; +} + +#[macro_export] +macro_rules! imm { + ($val:expr) => { + $crate::passes::interference::Arg::Imm { val: $val.into() }.into() + }; +} + +#[macro_export] +macro_rules! reg { + ($reg:ident) => { + $crate::passes::interference::Arg::Reg { + reg: $crate::passes::select::Reg::$reg, + } + .into() + }; +} + +#[macro_export] +macro_rules! var { + ($sym:expr) => { + $crate::passes::select::VarArg::XVar { sym: $sym } + }; +} + +#[macro_export] +macro_rules! deref { + ($reg:ident, $off:expr) => { + $crate::passes::interference::Arg::Deref { + reg: crate::passes::select::Reg::$reg, + off: $off, + } + .into() + }; +} diff --git a/compiler/src/passes/select/mod.rs b/compiler/src/passes/select/mod.rs index 1c9c7d5..2ddf186 100644 --- a/compiler/src/passes/select/mod.rs +++ b/compiler/src/passes/select/mod.rs @@ -1,19 +1,20 @@ -use std::collections::HashMap; -use std::fmt::Display; -use derive_more::Display; -use functor_derive::Functor; use crate::passes::select::io::Std; use crate::utils::gen_sym::UniqueSym; +use derive_more::Display; +use functor_derive::Functor; use itertools::Itertools; +use std::collections::HashMap; +use std::fmt::Display; +pub mod interpreter; pub mod io; -pub mod select; pub mod macros; +pub mod select; #[derive(Debug, PartialEq, Display)] #[display( -fmt = "{}", -r#"blocks.iter().map(|(sym, block)| format!("{sym}:\n{block}")).format("\n")"# + fmt = "{}", + r#"blocks.iter().map(|(sym, block)| format!("{sym}:\n{block}")).format("\n")"# )] pub struct X86Selected<'p> { pub blocks: HashMap, Block<'p, VarArg<'p>>>, @@ -107,7 +108,6 @@ pub enum VarArg<'p> { XVar { sym: UniqueSym<'p> }, } - pub const CALLER_SAVED: [Reg; 9] = [ Reg::RAX, Reg::RCX, diff --git a/compiler/src/passes/select/select.rs b/compiler/src/passes/select/select.rs index 37b158e..944c08e 100644 --- a/compiler/src/passes/select/select.rs +++ b/compiler/src/passes/select/select.rs @@ -2,10 +2,12 @@ use crate::passes::atomize::Atom; use crate::passes::explicate::{CExpr, PrgExplicated, Tail}; use crate::passes::parse::Op; use crate::passes::select::io::Std; +use crate::passes::select::{ + Block, Cnd, Instr, VarArg, X86Selected, ARG_PASSING_REGS, CALLEE_SAVED_NO_STACK, +}; use crate::utils::gen_sym::{gen_sym, UniqueSym}; use crate::*; use std::collections::HashMap; -use crate::passes::select::{ARG_PASSING_REGS, Block, CALLEE_SAVED_NO_STACK, Cnd, Instr, VarArg, X86Selected}; impl<'p> PrgExplicated<'p> { #[must_use] diff --git a/compiler/src/utils/split_test.rs b/compiler/src/utils/split_test.rs index b38033b..8d4612a 100644 --- a/compiler/src/utils/split_test.rs +++ b/compiler/src/utils/split_test.rs @@ -1,4 +1,4 @@ -use crate::interpreter::value::Val; +use crate::interpreter::Val; use crate::passes::parse::parse::parse_program; use crate::passes::parse::{Lit, PrgParsed}; use std::hash::Hash; diff --git a/compiler/tests/integration.rs b/compiler/tests/integration.rs index 45a8d2e..6fe7640 100644 --- a/compiler/tests/integration.rs +++ b/compiler/tests/integration.rs @@ -1,6 +1,5 @@ #![cfg(unix)] -use compiler::elf::ElfFile; use compiler::passes::parse::Lit; use compiler::utils::split_test::split_test; use std::fs::OpenOptions; @@ -9,6 +8,7 @@ use std::os::unix::prelude::OpenOptionsExt; use std::process::{Command, Stdio}; use tempdir::TempDir; use test_each_file::test_each_file; +use compiler::passes::emit::elf::ElfFile; fn integration([test]: [&str; 1]) { let tempdir = TempDir::new("rust-compiler-construction-integration").unwrap(); From 6809ead3955005a2666c48c9bafcad3f18a774ed Mon Sep 17 00:00:00 2001 From: jonathan Date: Mon, 30 Oct 2023 19:50:15 +0100 Subject: [PATCH 12/16] Cleanup emit api --- compiler/src/lib.rs | 23 ++++++++++------------- compiler/src/passes/emit/elf/header.rs | 4 ++-- compiler/src/passes/emit/elf/mod.rs | 23 +++++++++++------------ compiler/src/passes/emit/elf/program.rs | 2 +- compiler/src/passes/emit/mod.rs | 8 ++++---- compiler/src/passes/select/macros.rs | 3 +-- compiler/tests/integration.rs | 24 +++++++++++------------- 7 files changed, 40 insertions(+), 47 deletions(-) diff --git a/compiler/src/lib.rs b/compiler/src/lib.rs index 9a12ec2..0c13ef4 100644 --- a/compiler/src/lib.rs +++ b/compiler/src/lib.rs @@ -1,16 +1,17 @@ #![allow(clippy::module_inception)] -use crate::passes::parse::parse::parse_program; -use std::fs::File; -use std::path::Path; -use crate::passes::emit::elf::ElfFile; - pub mod interpreter; pub mod passes; pub mod utils; +use crate::passes::parse::parse::parse_program; +use std::fs::File; +use std::path::Path; + pub fn compile(program: &str, output: &Path) -> miette::Result<()> { - let program = parse_program(program)? + let mut file = File::create(output).unwrap(); + + parse_program(program)? .type_check()? .uniquify() .reveal() @@ -22,13 +23,9 @@ pub fn compile(program: &str, output: &Path) -> miette::Result<()> { .color_interference() .assign_homes() .patch() - .conclude(); - - let (entry, program) = program.emit(); - - let elf = ElfFile::new(entry, &program); - let mut file = File::create(output).unwrap(); - elf.write(&mut file); + .conclude() + .emit() + .write(&mut file); Ok(()) } diff --git a/compiler/src/passes/emit/elf/header.rs b/compiler/src/passes/emit/elf/header.rs index 44ab8d1..5f2a57d 100644 --- a/compiler/src/passes/emit/elf/header.rs +++ b/compiler/src/passes/emit/elf/header.rs @@ -1,7 +1,7 @@ -use std::mem::size_of; -use zerocopy::AsBytes; use crate::passes::emit::elf::program::ProgramHeader; use crate::passes::emit::elf::section::SectionHeader; +use std::mem::size_of; +use zerocopy::AsBytes; #[repr(C, packed)] #[derive(AsBytes, Copy, Clone)] diff --git a/compiler/src/passes/emit/elf/mod.rs b/compiler/src/passes/emit/elf/mod.rs index 5867c95..5c9776a 100644 --- a/compiler/src/passes/emit/elf/mod.rs +++ b/compiler/src/passes/emit/elf/mod.rs @@ -1,27 +1,26 @@ #![allow(non_camel_case_types)] #![allow(clippy::upper_case_acronyms)] -use std::io::Write; -use std::mem::size_of; -use zerocopy::AsBytes; -use crate::passes::emit::elf::header::ElfHeader; -use crate::passes::emit::elf::program::ProgramHeader; - mod header; mod program; mod section; +use crate::passes::emit::elf::header::ElfHeader; +use crate::passes::emit::elf::program::ProgramHeader; +use std::io::Write; +use std::mem::size_of; +use zerocopy::AsBytes; + pub const PRG_OFFSET: usize = 0x0040_0000; -#[repr(C, packed)] -pub struct ElfFile<'a> { +pub struct ElfFile { header: ElfHeader, p_headers: Vec, - program: &'a [u8], + program: Vec, } -impl<'a> ElfFile<'a> { - pub fn new(entry: usize, program: &'a [u8]) -> Self { +impl ElfFile { + pub fn new(entry: usize, program: Vec) -> Self { let p_headers = vec![ProgramHeader::new(0x1000, program.len() as u64)]; Self { @@ -41,6 +40,6 @@ impl<'a> ElfFile<'a> { w.write_all(&[0]).unwrap(); } - w.write_all(self.program).unwrap(); + w.write_all(&self.program).unwrap(); } } diff --git a/compiler/src/passes/emit/elf/program.rs b/compiler/src/passes/emit/elf/program.rs index 8c94737..147051d 100644 --- a/compiler/src/passes/emit/elf/program.rs +++ b/compiler/src/passes/emit/elf/program.rs @@ -1,7 +1,7 @@ +use crate::passes::emit::elf::PRG_OFFSET; use bitflags::bitflags; use std::mem::size_of; use zerocopy::AsBytes; -use crate::passes::emit::elf::PRG_OFFSET; #[allow(unused)] #[allow(non_camel_case_types)] diff --git a/compiler/src/passes/emit/mod.rs b/compiler/src/passes/emit/mod.rs index 6106349..b4a8bd6 100644 --- a/compiler/src/passes/emit/mod.rs +++ b/compiler/src/passes/emit/mod.rs @@ -1,15 +1,16 @@ mod binary; +pub mod elf; mod mul_div; mod push_pop; mod special; mod unary; -pub mod elf; use crate::imm; use crate::passes::conclude::X86Concluded; use crate::passes::emit::binary::{ encode_binary_instr, ADDQ_INFO, ANDQ_INFO, CMPQ_INFO, MOVQ_INFO, ORQ_INFO, SUBQ_INFO, XORQ_INFO, }; +use crate::passes::emit::elf::{ElfFile, PRG_OFFSET}; use crate::passes::emit::mul_div::{encode_muldiv_instr, MulDivOpInfo}; use crate::passes::emit::push_pop::{encode_push_pop, POPQ_INFO, PUSHQ_INFO}; use crate::passes::emit::special::encode_setcc; @@ -18,11 +19,10 @@ use crate::passes::interference::Arg; use crate::passes::select::{Block, Cnd, Instr, Reg}; use crate::utils::gen_sym::UniqueSym; use std::collections::HashMap; -use crate::passes::emit::elf::PRG_OFFSET; impl<'p> X86Concluded<'p> { #[must_use] - pub fn emit(self) -> (usize, Vec) { + pub fn emit(self) -> ElfFile { let mut machine_code = Vec::new(); let mut rel_jumps = HashMap::new(); @@ -48,7 +48,7 @@ impl<'p> X86Concluded<'p> { machine_code[addr..addr + 4].copy_from_slice(&target.to_le_bytes()); } - (addresses[&self.entry], machine_code) + ElfFile::new(addresses[&self.entry], machine_code) } } diff --git a/compiler/src/passes/select/macros.rs b/compiler/src/passes/select/macros.rs index 41e8b79..bab6e64 100644 --- a/compiler/src/passes/select/macros.rs +++ b/compiler/src/passes/select/macros.rs @@ -1,4 +1,3 @@ - #[macro_export] macro_rules! block { ($($instr:expr),*) => { @@ -213,7 +212,7 @@ macro_rules! var { macro_rules! deref { ($reg:ident, $off:expr) => { $crate::passes::interference::Arg::Deref { - reg: crate::passes::select::Reg::$reg, + reg: $crate::passes::select::Reg::$reg, off: $off, } .into() diff --git a/compiler/tests/integration.rs b/compiler/tests/integration.rs index 6fe7640..76e2ddc 100644 --- a/compiler/tests/integration.rs +++ b/compiler/tests/integration.rs @@ -8,7 +8,6 @@ use std::os::unix::prelude::OpenOptionsExt; use std::process::{Command, Stdio}; use tempdir::TempDir; use test_each_file::test_each_file; -use compiler::passes::emit::elf::ElfFile; fn integration([test]: [&str; 1]) { let tempdir = TempDir::new("rust-compiler-construction-integration").unwrap(); @@ -16,7 +15,15 @@ fn integration([test]: [&str; 1]) { let (input, expected_output, expected_return, program) = split_test(test); let expected_return: i64 = expected_return.into(); - let (entry, program) = program + let input_path = tempdir.path().join("output"); + let mut output = OpenOptions::new() + .write(true) + .create(true) + .mode(0o777) + .open(&input_path) + .unwrap(); + + program .type_check() .unwrap() .uniquify() @@ -30,18 +37,9 @@ fn integration([test]: [&str; 1]) { .assign_homes() .patch() .conclude() - .emit(); - - let input_path = tempdir.path().join("output"); - let mut output = OpenOptions::new() - .write(true) - .create(true) - .mode(0o777) - .open(&input_path) - .unwrap(); + .emit() + .write(&mut output); - let elf = ElfFile::new(entry, &program); - elf.write(&mut output); drop(output); // Wait for file to be readable From b13294993039e9a5698d5c18251aacc7f91bba04 Mon Sep 17 00:00:00 2001 From: jonathan Date: Mon, 30 Oct 2023 19:52:29 +0100 Subject: [PATCH 13/16] Fix bencher --- bencher/src/main.rs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/bencher/src/main.rs b/bencher/src/main.rs index 8b741c1..615aa1b 100644 --- a/bencher/src/main.rs +++ b/bencher/src/main.rs @@ -1,8 +1,7 @@ use clap::Parser; -use compiler::elf::ElfFile; -use compiler::interpreter::interpreter::IStats; use compiler::interpreter::{TestIO, IO}; use compiler::passes::parse::parse::parse_program; +use compiler::passes::select::interpreter::IStats; use compiler::utils::split_test::split_test_raw; use git2::{Commit, Repository}; use mongodb::bson; @@ -277,11 +276,8 @@ impl Stats { let (_, interpreter_stats) = prg_concluded.interpret_with_stats(io); - let (entry, program) = prg_concluded.emit(); - - let elf = ElfFile::new(entry, &program); let mut file = File::create(&output).unwrap(); - elf.write(&mut file); + prg_concluded.emit().write(&mut file); let bencher_stats = BStats::new(&output); From 33c81b8d52098d2bace918709c61289696227e86 Mon Sep 17 00:00:00 2001 From: jonathan Date: Mon, 30 Oct 2023 20:22:58 +0100 Subject: [PATCH 14/16] Parse return --- README.md | 2 +- compiler/src/passes/parse/grammar.lalrpop | 4 + compiler/src/passes/parse/grammar.rs | 1511 +++++++++-------- compiler/src/passes/parse/interpreter.rs | 37 +- compiler/src/passes/parse/mod.rs | 3 + .../reveal_functions/reveal_functions.rs | 1 + compiler/src/passes/type_check/check.rs | 5 + compiler/src/passes/uniquify/uniquify.rs | 1 + programs/good/functions/maybe_return.test | 16 + programs/good/functions/simple_return.test | 11 + 10 files changed, 882 insertions(+), 709 deletions(-) create mode 100644 programs/good/functions/maybe_return.test create mode 100644 programs/good/functions/simple_return.test diff --git a/README.md b/README.md index bcd1879..d2fe548 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ cargo run -- input.jj -o output && ./output ; echo $? * [ ] Improve error handling for type checking pass. * [ ] Improve algorithm for colouring the interference graph. * [ ] Add read and write functionality to the bencher to update locally. -* [ ] Lots, and lots, of refactoring! +* [x] Lots, and lots, of refactoring! # Upcoming Language Features * [ ] Implement comments in code. diff --git a/compiler/src/passes/parse/grammar.lalrpop b/compiler/src/passes/parse/grammar.lalrpop index 081df9c..8ec7bb0 100644 --- a/compiler/src/passes/parse/grammar.lalrpop +++ b/compiler/src/passes/parse/grammar.lalrpop @@ -15,6 +15,7 @@ match { "while", "break", "continue", + "return", "mut", // Structural tokens @@ -162,6 +163,9 @@ ExprInStmt: Expr<&'input str> = { "break" => Expr::Break { bdy: Box::new(bdy.unwrap_or(Expr::Lit { val: Lit::Unit })), }, + "return" => Expr::Return { + bdy: Box::new(bdy.unwrap_or(Expr::Lit { val: Lit::Unit })), + }, "continue" => Expr::Continue, ExprLogicalOr, } diff --git a/compiler/src/passes/parse/grammar.rs b/compiler/src/passes/parse/grammar.rs index d49e11e..0045707 100644 --- a/compiler/src/passes/parse/grammar.rs +++ b/compiler/src/passes/parse/grammar.rs @@ -1,5 +1,5 @@ // auto-generated: "lalrpop 0.20.1" -// sha3: 338558213abf2f82f348432a5869eed7ab265d878d809803caa0c1870e956df4 +// sha3: 462ccf64c64bfc280345ea946b109b904f226d513ae4bbef717d067be19f4bb6 use std::str::FromStr; use crate::passes::parse::{Def, Expr, Lit, Op, Param}; use crate::passes::parse::PrgParsed; @@ -50,306 +50,310 @@ mod __parse__Program { } const __ACTION: &[i16] = &[ // State 0 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 1 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 2 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 3 - 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, + 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, // State 4 - 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, + 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, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, // State 6 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61, 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, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 7 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61, 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, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 8 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 82, 0, 83, 0, 20, 21, 84, 0, 85, 86, 22, 87, 88, 23, 0, 0, 0, 89, 50, // State 9 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61, 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, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 10 - 0, -57, 0, -57, 0, -57, 0, 90, -57, 91, 0, 0, 0, -57, -57, -57, 0, -57, -57, -57, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, -57, -57, 0, 0, + 0, -57, 0, -57, 0, -57, 0, 91, -57, 92, 0, 0, 0, -57, -57, -57, 0, -57, -57, -57, 0, 0, 0, 0, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -57, -57, -57, 0, 0, // State 11 - 0, 92, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, -67, 93, 94, 0, 95, 96, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, -67, -67, 0, 0, + 0, 93, 0, -67, 0, -67, 0, 0, -67, 0, 0, 0, 0, -67, 94, 95, 0, 96, 97, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -67, -67, -67, 0, 0, // State 12 - 0, 0, 0, 98, 0, -77, 0, 0, -77, 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, -77, -77, -77, 0, 0, + 0, 0, 0, 99, 0, -79, 0, 0, -79, 0, 0, 0, 0, -79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -79, -79, -79, 0, 0, // State 13 - 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 99, -78, 0, 0, + 0, 0, 0, 0, 0, -80, 0, 0, -80, 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, -80, 100, -80, 0, 0, // State 14 - 0, -81, 100, -81, 0, -81, 101, -81, -81, -81, 0, 102, 0, -81, -81, -81, 0, -81, -81, -81, 0, 0, 0, 0, -81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -81, -81, -81, 0, 0, + 0, -83, 101, -83, 0, -83, 102, -83, -83, -83, 0, 103, 0, -83, -83, -83, 0, -83, -83, -83, 0, 0, 0, 0, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -83, -83, -83, 0, 0, // State 15 - 0, -93, 0, -93, 0, -93, 0, 0, -93, 0, 0, 0, 0, -93, -93, -93, 0, -93, -93, -93, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, -93, -93, 0, 0, + 0, -95, 0, -95, 0, -95, 0, 0, -95, 0, 0, 0, 0, -95, -95, -95, 0, -95, -95, -95, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -95, -95, -95, 0, 0, // State 16 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 85, 86, 0, 87, 88, 0, 0, 0, 0, 89, 50, // State 17 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 82, 0, 83, 0, 20, 21, 84, 0, 85, 86, 22, 87, 88, 23, 0, 0, 0, 89, 50, // State 18 - 79, 0, 0, 0, 18, -74, 0, 0, -74, 80, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, -74, 88, 49, + 80, 0, 0, 0, 18, -74, 0, 0, -74, 81, 0, 0, 0, -74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 85, 86, 0, 87, 88, 0, 0, 0, -74, 89, 50, // State 19 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 85, 86, 0, 87, 88, 0, 0, 0, 0, 89, 50, // State 20 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, // State 21 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, -76, 0, 0, -76, 81, 0, 0, 0, -76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 85, 86, 0, 87, 88, 0, 0, 0, -76, 89, 50, // State 22 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 85, 86, 0, 87, 88, 0, 0, 0, 0, 89, 50, // State 23 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 82, 0, 83, 0, 20, 21, 84, 0, 85, 86, 22, 87, 88, 23, 0, 0, 0, 89, 50, // State 24 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 85, 86, 0, 87, 88, 0, 0, 0, 0, 89, 50, // State 25 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 85, 86, 0, 87, 88, 0, 0, 0, 0, 89, 50, // State 26 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 85, 86, 0, 87, 88, 0, 0, 0, 0, 89, 50, // State 27 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 85, 86, 0, 87, 88, 0, 0, 0, 0, 89, 50, // State 28 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 85, 86, 0, 87, 88, 0, 0, 0, 0, 89, 50, // State 29 - 79, 0, 0, 0, 18, -36, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 85, 86, 0, 87, 88, 0, 0, 0, 0, 89, 50, // State 30 - 79, 0, 0, 0, 18, -87, 0, 0, -87, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -87, 88, 49, + 80, 0, 0, 0, 18, -36, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 82, 0, 83, 0, 20, 21, 84, 0, 85, 86, 22, 87, 88, 23, 0, 0, 0, 89, 50, // State 31 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, -89, 0, 0, -89, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 82, 0, 83, 0, 20, 21, 84, 0, 85, 86, 22, 87, 88, 23, 0, 0, -89, 89, 50, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 85, 86, 0, 87, 88, 0, 0, 0, 0, 89, 50, // State 33 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, // State 34 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 82, 0, 83, 0, 20, 21, 84, 0, 85, 86, 22, 87, 88, 23, 0, 0, 0, 89, 50, // State 35 - 79, 0, 0, 0, 18, -38, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 82, 0, 83, 0, 20, 21, 84, 0, 85, 86, 22, 87, 88, 23, 0, 0, 0, 89, 50, // State 36 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, -38, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 82, 0, 83, 0, 20, 21, 84, 0, 85, 86, 22, 87, 88, 23, 0, 0, 0, 89, 50, // State 37 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 82, 0, 83, 0, 20, 21, 84, 0, 85, 86, 22, 87, 88, 23, 0, 0, 0, 89, 50, // State 38 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 85, 86, 0, 87, 88, 0, 0, 0, 0, 89, 50, // State 39 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 85, 86, 87, 0, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 82, 0, 83, 0, 20, 21, 84, 0, 85, 86, 22, 87, 88, 23, 0, 0, 0, 89, 50, // State 40 - 79, 0, 0, 0, 18, -85, 0, 0, -85, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -85, 88, 49, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 85, 86, 0, 87, 88, 0, 0, 0, 0, 89, 50, // State 41 - 79, 0, 0, 0, 18, -83, 0, 0, -83, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, -83, 88, 49, + 80, 0, 0, 0, 18, -87, 0, 0, -87, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 82, 0, 83, 0, 20, 21, 84, 0, 85, 86, 22, 87, 88, 23, 0, 0, -87, 89, 50, // State 42 - 79, 0, 0, 0, 18, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 81, 0, 82, 0, 20, 21, 83, 0, 84, 85, 86, 87, 22, 0, 0, 0, 88, 49, + 80, 0, 0, 0, 18, -85, 0, 0, -85, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 82, 0, 83, 0, 20, 21, 84, 0, 85, 86, 22, 87, 88, 23, 0, 0, -85, 89, 50, // State 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, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 0, 0, 0, 18, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 82, 0, 83, 0, 20, 21, 84, 0, 85, 86, 22, 87, 88, 23, 0, 0, 0, 89, 50, // State 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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 46 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 47 - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 48 - 0, -96, -96, -96, -96, -96, -96, -96, -96, -96, 0, -96, -96, -96, -96, -96, -96, -96, -96, -96, 0, 0, 0, 0, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, -96, -96, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 49 - 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, + 0, -98, -98, -98, -98, -98, -98, -98, -98, -98, 0, -98, -98, -98, -98, -98, -98, -98, -98, -98, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, -98, -98, 0, 0, // State 50 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 51 - 0, 0, 0, 0, 0, -39, 0, 0, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 52 - 0, 0, 0, 0, 0, -41, 0, 0, 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, 0, 0, + 0, 0, 0, 0, 0, -39, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 53 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -41, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 54 - 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, // State 55 - 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, // State 56 - 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 57 - 0, 0, 0, 0, 0, -104, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, // State 58 - 0, 0, 0, 0, 0, -110, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -110, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -106, 0, 0, -106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 59 - 0, 0, 0, 0, 0, -109, 0, 0, -109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -112, 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, -112, 0, 0, 0, 0, // State 60 - 0, 0, 0, 0, 0, -112, 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, -112, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -111, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, 0, 0, 0, // State 61 - 0, 0, 0, 0, 0, -111, 0, 0, -111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -111, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -114, 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, -114, 0, 0, 0, 0, // State 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, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -113, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, 0, 0, 0, 0, // State 63 - 0, -59, -59, -59, -59, -59, -59, -59, -59, -59, 0, -59, 0, -59, -59, -59, 0, -59, -59, -59, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, // State 64 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, + 0, -59, -59, -59, -59, -59, -59, -59, -59, -59, 0, -59, 0, -59, -59, -59, 0, -59, -59, -59, 0, 0, 0, 0, -59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -59, -59, -59, 0, 0, // State 65 - 0, -32, 0, -32, 0, -32, 0, 0, -32, 0, 0, 0, 0, -32, -32, -32, 0, -32, -32, -32, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, -32, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, // State 66 - 0, -66, -66, -66, 30, -66, -66, -66, -66, -66, 0, -66, 0, -66, -66, -66, 0, -66, -66, -66, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, -66, -66, 0, 0, + 0, -32, 0, -32, 0, -32, 0, 0, -32, 0, 0, 0, 0, -32, -32, -32, 0, -32, -32, -32, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, -32, -32, 0, 0, // State 67 - 0, -92, -92, -92, 0, -92, -92, -92, -92, -92, 0, -92, 0, -92, -92, -92, 0, -92, -92, -92, 0, 0, 0, 0, -92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, -92, -92, 0, 0, + 0, -66, -66, -66, 31, -66, -66, -66, -66, -66, 0, -66, 0, -66, -66, -66, 0, -66, -66, -66, 0, 0, 0, 0, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -66, -66, -66, 0, 0, // State 68 - 0, 0, 0, -26, 0, -26, 0, 0, -26, 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, -26, -26, -26, 0, 0, + 0, -94, -94, -94, 0, -94, -94, -94, -94, -94, 0, -94, 0, -94, -94, -94, 0, -94, -94, -94, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, -94, -94, 0, 0, // State 69 - 0, 0, 0, 0, 0, -88, 0, 0, -88, 0, 0, 0, 0, 31, 0, 0, 0, 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, 0, -26, 0, -26, 0, 0, -26, 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, -26, -26, -26, 0, 0, // State 70 - 0, 0, 0, 0, 0, -28, 0, 0, -28, 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, 0, 0, 0, 0, -28, -28, -28, 0, 0, + 0, 0, 0, 0, 0, -90, 0, 0, -90, 0, 0, 0, 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, -90, 0, 0, // State 71 - 0, 0, 0, 0, 0, -76, 0, 0, -76, 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, -76, 0, 0, + 0, 0, 0, 0, 0, -28, 0, 0, -28, 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, 0, 0, 0, 0, 0, -28, -28, -28, 0, 0, // State 72 - 0, -22, 0, -22, 0, -22, 0, -22, -22, -22, 0, 0, 0, -22, -22, -22, 0, -22, -22, -22, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, -22, -22, 0, 0, + 0, 0, 0, 0, 0, -78, 0, 0, -78, 0, 0, 0, 0, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -78, 0, 0, // State 73 - 0, 0, 0, 0, 0, -54, 0, 0, -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, -54, 0, 0, + 0, -22, 0, -22, 0, -22, 0, -22, -22, -22, 0, 0, 0, -22, -22, -22, 0, -22, -22, -22, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, -22, -22, 0, 0, // State 74 - 0, -30, -30, -30, 0, -30, -30, -30, -30, -30, 0, -30, 0, -30, -30, -30, 0, -30, -30, -30, 0, 0, 0, 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -30, -30, -30, 0, 0, + 0, 0, 0, 0, 0, -54, 0, 0, -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, 0, 0, // State 75 - 0, -24, 0, -24, 0, -24, 0, 0, -24, 0, 0, 0, 0, -24, -24, -24, 0, -24, -24, -24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -24, -24, -24, 0, 0, + 0, -30, -30, -30, 0, -30, -30, -30, -30, -30, 0, -30, 0, -30, -30, -30, 0, -30, -30, -30, 0, 0, 0, 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -30, -30, -30, 0, 0, // State 76 - 0, -61, -61, -61, -61, -61, -61, -61, -61, -61, 0, -61, 0, -61, -61, -61, 32, -61, -61, -61, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, -61, 0, 0, + 0, -24, 0, -24, 0, -24, 0, 0, -24, 0, 0, 0, 0, -24, -24, -24, 0, -24, -24, -24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -24, -24, -24, 0, 0, // State 77 - 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, 0, -58, -58, -58, 0, -58, -58, -58, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -58, -58, 0, 0, + 0, -61, -61, -61, -61, -61, -61, -61, -61, -61, 0, -61, 0, -61, -61, -61, 33, -61, -61, -61, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, -61, 0, 0, // State 78 - -114, 0, 0, 0, -114, 0, 0, 0, 0, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -114, 0, 0, 0, 0, 0, -114, -114, -114, -114, 0, 0, 0, 0, -114, -114, + 0, -58, -58, -58, -58, -58, -58, -58, -58, -58, 0, -58, 0, -58, -58, -58, 0, -58, -58, -58, 0, 0, 0, 0, -58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -58, -58, 0, 0, // State 79 - -113, 0, 0, 0, -113, 0, 0, 0, 0, -113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -113, 0, 0, 0, 0, 0, -113, -113, -113, -113, 0, 0, 0, 0, -113, -113, + -116, 0, 0, 0, -116, 0, 0, 0, 0, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, 0, 0, 0, 0, 0, -116, -116, 0, -116, -116, 0, 0, 0, 0, -116, -116, // State 80 - 0, 0, 0, 0, 0, -75, 0, 0, -75, 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, -75, 0, 0, + -115, 0, 0, 0, -115, 0, 0, 0, 0, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, 0, 0, 0, 0, 0, -115, -115, 0, -115, -115, 0, 0, 0, 0, -115, -115, // State 81 - 0, -34, -34, -34, -34, -34, -34, -34, -34, -34, 0, -34, 0, -34, -34, -34, 0, -34, -34, -34, 0, 0, 0, 0, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -34, -34, -34, 0, 0, + 0, 0, 0, 0, 0, -77, 0, 0, -77, 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, -77, 0, 0, // State 82 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, + 0, -34, -34, -34, -34, -34, -34, -34, -34, -34, 0, -34, 0, -34, -34, -34, 0, -34, -34, -34, 0, 0, 0, 0, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -34, -34, -34, 0, 0, // State 83 - 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 84 - 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, // State 85 - 0, -33, -33, -33, -33, -33, -33, -33, -33, -33, 0, -33, 0, -33, -33, -33, 0, -33, -33, -33, 0, 0, 0, 0, -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -33, -33, -33, 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, 0, 0, 0, 0, 0, 0, 0, 0, // State 86 - 0, -60, -60, -60, -60, -60, -60, -60, -60, -60, 0, -60, 0, -60, -60, -60, 0, -60, -60, -60, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, -60, -60, 0, 0, + 0, -33, -33, -33, -33, -33, -33, -33, -33, -33, 0, -33, 0, -33, -33, -33, 0, -33, -33, -33, 0, 0, 0, 0, -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -33, -33, -33, 0, 0, // State 87 - 0, -102, -102, -102, -102, -102, -102, -102, -102, -102, 0, -102, 0, -102, -102, -102, 0, -102, -102, -102, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, -102, -102, 0, 0, + 0, -60, -60, -60, -60, -60, -60, -60, -60, -60, 0, -60, 0, -60, -60, -60, 0, -60, -60, -60, 0, 0, 0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -60, -60, -60, 0, 0, // State 88 - 0, 0, 0, 0, 0, -103, 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, 0, + 0, -104, -104, -104, -104, -104, -104, -104, -104, -104, 0, -104, 0, -104, -104, -104, 0, -104, -104, -104, 0, 0, 0, 0, -104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -104, -104, -104, 0, 0, // State 89 - -19, 0, 0, 0, -19, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, -19, -19, -19, -19, 0, 0, 0, 0, -19, -19, + 0, 0, 0, 0, 0, -105, 0, 0, -105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 90 - -20, 0, 0, 0, -20, 0, 0, 0, 0, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, 0, 0, 0, 0, 0, -20, -20, -20, -20, 0, 0, 0, 0, -20, -20, + -19, 0, 0, 0, -19, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, -19, -19, 0, -19, -19, 0, 0, 0, 0, -19, -19, // State 91 - -44, 0, 0, 0, -44, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, -44, -44, -44, -44, 0, 0, 0, 0, -44, -44, + -20, 0, 0, 0, -20, 0, 0, 0, 0, -20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, 0, 0, 0, 0, 0, -20, -20, 0, -20, -20, 0, 0, 0, 0, -20, -20, // State 92 - -47, 0, 0, 0, -47, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, -47, -47, -47, -47, 0, 0, 0, 0, -47, -47, + -44, 0, 0, 0, -44, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -44, 0, 0, 0, 0, 0, -44, -44, 0, -44, -44, 0, 0, 0, 0, -44, -44, // State 93 - -48, 0, 0, 0, -48, 0, 0, 0, 0, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -48, 0, 0, 0, 0, 0, -48, -48, -48, -48, 0, 0, 0, 0, -48, -48, + -47, 0, 0, 0, -47, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, 0, 0, 0, 0, -47, -47, 0, -47, -47, 0, 0, 0, 0, -47, -47, // State 94 - -43, 0, 0, 0, -43, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, -43, -43, -43, -43, 0, 0, 0, 0, -43, -43, + -48, 0, 0, 0, -48, 0, 0, 0, 0, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -48, 0, 0, 0, 0, 0, -48, -48, 0, -48, -48, 0, 0, 0, 0, -48, -48, // State 95 - -45, 0, 0, 0, -45, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, -45, -45, -45, -45, 0, 0, 0, 0, -45, -45, + -43, 0, 0, 0, -43, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -43, 0, 0, 0, 0, 0, -43, -43, 0, -43, -43, 0, 0, 0, 0, -43, -43, // State 96 - -46, 0, 0, 0, -46, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, -46, -46, -46, -46, 0, 0, 0, 0, -46, -46, + -45, 0, 0, 0, -45, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -45, 0, 0, 0, 0, 0, -45, -45, 0, -45, -45, 0, 0, 0, 0, -45, -45, // State 97 - -97, 0, 0, 0, -97, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -97, 0, 0, 0, 0, 0, -97, -97, -97, -97, 0, 0, 0, 0, -97, -97, + -46, 0, 0, 0, -46, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -46, 0, 0, 0, 0, 0, -46, -46, 0, -46, -46, 0, 0, 0, 0, -46, -46, // State 98 - -98, 0, 0, 0, -98, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -98, 0, 0, 0, 0, 0, -98, -98, -98, -98, 0, 0, 0, 0, -98, -98, + -99, 0, 0, 0, -99, 0, 0, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0, 0, 0, -99, -99, 0, -99, -99, 0, 0, 0, 0, -99, -99, // State 99 - -101, 0, 0, 0, -101, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, -101, -101, -101, -101, 0, 0, 0, 0, -101, -101, + -100, 0, 0, 0, -100, 0, 0, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0, 0, 0, -100, -100, 0, -100, -100, 0, 0, 0, 0, -100, -100, // State 100 - -99, 0, 0, 0, -99, 0, 0, 0, 0, -99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, 0, 0, 0, 0, -99, -99, -99, -99, 0, 0, 0, 0, -99, -99, + -103, 0, 0, 0, -103, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, -103, -103, 0, -103, -103, 0, 0, 0, 0, -103, -103, // State 101 - -100, 0, 0, 0, -100, 0, 0, 0, 0, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0, 0, 0, -100, -100, -100, -100, 0, 0, 0, 0, -100, -100, + -101, 0, 0, 0, -101, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -101, 0, 0, 0, 0, 0, -101, -101, 0, -101, -101, 0, 0, 0, 0, -101, -101, // State 102 - -115, 0, 0, 0, -115, 0, 0, 0, 0, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -115, 0, 0, 0, 0, 0, -115, -115, -115, -115, 0, 0, 0, 0, -115, -115, + -102, 0, 0, 0, -102, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -102, 0, 0, 0, 0, 0, -102, -102, 0, -102, -102, 0, 0, 0, 0, -102, -102, // State 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, -95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -117, 0, 0, 0, -117, 0, 0, 0, 0, -117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -117, 0, 0, 0, 0, 0, -117, -117, 0, -117, -117, 0, 0, 0, 0, -117, -117, // State 104 - 0, -91, -91, -91, 0, -91, -91, -91, -91, -91, 0, -91, 0, -91, -91, -91, 0, -91, -91, -91, 0, 0, 0, 0, -91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -91, -91, -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, -97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 105 - 0, -61, -61, -61, -61, -61, -61, -61, -61, -61, 0, -61, 0, -61, -61, -61, 0, -61, -61, -61, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, -61, -61, 0, 0, + 0, -93, -93, -93, 0, -93, -93, -93, -93, -93, 0, -93, 0, -93, -93, -93, 0, -93, -93, -93, 0, 0, 0, 0, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -93, -93, -93, 0, 0, // State 106 - 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -61, -61, -61, -61, -61, -61, -61, -61, -61, 0, -61, 0, -61, -61, -61, 0, -61, -61, -61, 0, 0, 0, 0, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -61, -61, -61, 0, 0, // State 107 - 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, -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, -73, 0, 0, + 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 108 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -73, 0, 0, -73, 0, 0, 0, 0, -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, -73, 0, 0, // State 109 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, // State 110 - 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 111 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 112 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, + 0, 0, 0, 0, 0, -75, 0, 0, -75, 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, -75, 0, 0, // State 113 - 0, -21, 0, -21, 0, -21, 0, -21, -21, -21, 0, 0, 0, -21, -21, -21, 0, -21, -21, -21, 0, 0, 0, 0, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, -21, -21, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, // State 114 - 0, -23, 0, -23, 0, -23, 0, 0, -23, 0, 0, 0, 0, -23, -23, -23, 0, -23, -23, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, -23, -23, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 0, 0, // State 115 - 0, 0, 0, -25, 0, -25, 0, 0, -25, 0, 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -25, -25, -25, 0, 0, + 0, -21, 0, -21, 0, -21, 0, -21, -21, -21, 0, 0, 0, -21, -21, -21, 0, -21, -21, -21, 0, 0, 0, 0, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, -21, -21, 0, 0, // State 116 - 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 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, -27, -27, -27, 0, 0, + 0, -23, 0, -23, 0, -23, 0, 0, -23, 0, 0, 0, 0, -23, -23, -23, 0, -23, -23, -23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, -23, -23, 0, 0, // State 117 - 0, -29, -29, -29, 0, -29, -29, -29, -29, -29, 0, -29, 0, -29, -29, -29, 0, -29, -29, -29, 0, 0, 0, 0, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -29, -29, -29, 0, 0, + 0, 0, 0, -25, 0, -25, 0, 0, -25, 0, 0, 0, 0, -25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -25, -25, -25, 0, 0, // State 118 - 0, -31, 0, -31, 0, -31, 0, 0, -31, 0, 0, 0, 0, -31, -31, -31, 0, -31, -31, -31, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, -31, -31, 0, 0, + 0, 0, 0, 0, 0, -27, 0, 0, -27, 0, 0, 0, 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, -27, -27, -27, 0, 0, // State 119 - 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -29, -29, -29, 0, -29, -29, -29, -29, -29, 0, -29, 0, -29, -29, -29, 0, -29, -29, -29, 0, 0, 0, 0, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -29, -29, -29, 0, 0, // State 120 - 0, 0, 0, 0, 0, -35, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -31, 0, -31, 0, -31, 0, 0, -31, 0, 0, 0, 0, -31, -31, -31, 0, -31, -31, -31, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, -31, -31, 0, 0, // State 121 - 0, 0, 0, 0, 0, -86, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, 0, 0, + 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 122 - 0, 0, 0, 0, 0, -68, 0, 0, -68, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, + 0, 0, 0, 0, 0, -35, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 123 - 0, -62, -62, -62, -62, -62, -62, -62, -62, -62, 0, -62, 0, -62, -62, -62, 0, -62, -62, -62, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, -62, -62, 0, 0, + 0, 0, 0, 0, 0, -88, 0, 0, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -88, 0, 0, // State 124 - 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, -68, 0, 0, -68, 0, 0, 0, 0, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -68, 0, 0, // State 125 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, + 0, -62, -62, -62, -62, -62, -62, -62, -62, -62, 0, -62, 0, -62, -62, -62, 0, -62, -62, -62, 0, 0, 0, 0, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, -62, -62, 0, 0, // State 126 - 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, // State 127 - 0, -63, -63, -63, 0, -63, -63, -63, -63, -63, 0, -63, 0, -63, -63, -63, 0, -63, -63, -63, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, // State 128 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 129 - 0, 0, 0, 0, 0, -37, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -63, -63, 0, -63, -63, -63, -63, -63, 0, -63, 0, -63, -63, -63, 0, -63, -63, -63, 0, 0, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -63, -63, -63, 0, 0, // State 130 - 0, -65, -65, -65, 0, -65, -65, -65, -65, -65, 0, -65, 0, -65, -65, -65, 0, -65, -65, -65, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, -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, -96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 131 - -12, 0, 0, 0, -12, -12, 0, 0, 0, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12, -12, 0, -12, 0, -12, -12, -12, 0, -12, -12, -12, -12, -12, 0, 0, 0, -12, -12, + 0, 0, 0, 0, 0, -37, 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, 0, 0, 0, 0, 0, 0, // State 132 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, + 0, -65, -65, -65, 0, -65, -65, -65, -65, -65, 0, -65, 0, -65, -65, -65, 0, -65, -65, -65, 0, 0, 0, 0, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, -65, -65, 0, 0, // State 133 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + -12, 0, 0, 0, -12, -12, 0, 0, 0, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12, -12, 0, -12, 0, -12, -12, -12, 0, -12, -12, -12, -12, -12, -12, 0, 0, 0, -12, -12, // State 134 - 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, -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, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, // State 135 - 0, -64, -64, -64, 0, -64, -64, -64, -64, -64, 0, -64, 0, -64, -64, -64, 0, -64, -64, -64, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, -64, -64, 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, // State 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, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, + 0, 0, 0, 0, 0, -71, 0, 0, -71, 0, 0, 0, 0, -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, -71, 0, 0, // State 137 - -13, 0, 0, 0, -13, -13, 0, 0, 0, -13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13, -13, 0, -13, 0, -13, -13, -13, 0, -13, -13, -13, -13, -13, 0, 0, 0, -13, -13, + 0, -64, -64, -64, 0, -64, -64, -64, -64, -64, 0, -64, 0, -64, -64, -64, 0, -64, -64, -64, 0, 0, 0, 0, -64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -64, -64, -64, 0, 0, // State 138 - 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, // State 139 - 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, + -13, 0, 0, 0, -13, -13, 0, 0, 0, -13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13, -13, 0, -13, 0, -13, -13, -13, 0, -13, -13, -13, -13, -13, -13, 0, 0, 0, -13, -13, // State 140 - 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, -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, -72, 0, 0, + 0, 0, 0, 0, 0, -70, 0, 0, -70, 0, 0, 0, 0, -70, 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, -70, 0, 0, // State 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, 43, 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, // State 142 - 0, 0, 0, 0, 0, -84, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, 0, 0, + 0, 0, 0, 0, 0, -72, 0, 0, -72, 0, 0, 0, 0, -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, -72, 0, 0, // State 143 - 0, 0, 0, 0, 0, -82, 0, 0, -82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -82, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, // State 144 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, + 0, 0, 0, 0, 0, -86, 0, 0, -86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, 0, 0, // State 145 - 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, + 0, 0, 0, 0, 0, -84, 0, 0, -84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -84, 0, 0, + // State 146 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, 0, + // State 147 + 0, 0, 0, 0, 0, -69, 0, 0, -69, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, ]; fn __action(state: i16, integer: usize) -> i16 { - __ACTION[(state as usize) * 44 + integer] + __ACTION[(state as usize) * 45 + integer] } const __EOF_ACTION: &[i16] = &[ // State 0 - -107, + -109, // State 1 - -108, + -110, // State 2 0, // State 3 @@ -433,15 +437,15 @@ mod __parse__Program { // State 42 0, // State 43 - -52, + 0, // State 44 - -49, + -52, // State 45 - -116, + -49, // State 46 - -53, + -118, // State 47 - 0, + -53, // State 48 0, // State 49 @@ -553,9 +557,9 @@ mod __parse__Program { // State 102 0, // State 103 - -95, - // State 104 0, + // State 104 + -97, // State 105 0, // State 106 @@ -603,11 +607,11 @@ mod __parse__Program { // State 127 0, // State 128 - -94, + 0, // State 129 0, // State 130 - 0, + -96, // State 131 0, // State 132 @@ -638,108 +642,113 @@ mod __parse__Program { 0, // State 145 0, + // State 146 + 0, + // State 147 + 0, ]; fn __goto(state: i16, nt: usize) -> i16 { match nt { - 7 => 35, + 7 => 36, 10 => 4, - 11 => 23, + 11 => 24, 12 => 10, 13 => 11, 14 => 12, 15 => 13, 16 => 14, 17 => 15, - 18 => 63, - 19 => 119, - 20 => 49, - 21 => 24, + 18 => 64, + 19 => 121, + 20 => 50, + 21 => 25, 22 => match state { - 1 => 46, - _ => 43, + 1 => 47, + _ => 44, }, 24 => 1, 25 => match state { - 17 => 106, - 22 => 112, - 29 => 120, - 33 => 125, - 34 => 126, - 35 => 129, - 36 => 132, - 38 => 136, - 42 => 144, - _ => 64, + 17 => 107, + 23 => 114, + 30 => 122, + 34 => 127, + 35 => 128, + 36 => 131, + 37 => 134, + 39 => 138, + 43 => 146, + _ => 65, }, 27 => match state { - 28 => 118, - _ => 65, + 29 => 120, + _ => 66, }, - 28 => 66, - 29 => 67, + 28 => 67, + 29 => 68, 30 => match state { - 25 => 115, - _ => 68, + 26 => 117, + _ => 69, }, - 31 => 69, + 31 => 70, 32 => match state { - 26 => 116, - _ => 70, + 27 => 118, + _ => 71, }, 33 => match state { - 18 => 107, - 19 => 108, - 21 => 111, - 31 => 122, - 37 => 133, - 39 => 139, - _ => 71, + 18 => 108, + 19 => 109, + 21 => 112, + 22 => 113, + 32 => 124, + 38 => 135, + 40 => 141, + _ => 72, }, 35 => match state { - 23 => 113, - _ => 72, + 24 => 115, + _ => 73, }, 36 => match state { - 30 => 121, - 40 => 142, - 41 => 143, - _ => 73, + 31 => 123, + 41 => 144, + 42 => 145, + _ => 74, }, 38 => match state { - 16 => 104, - 27 => 117, - _ => 74, + 16 => 105, + 28 => 119, + _ => 75, }, 39 => match state { - 24 => 114, - _ => 75, + 25 => 116, + _ => 76, }, - 40 => 44, + 40 => 45, 41 => match state { - 2 => 47, - 3..=4 => 50, - 5 => 55, - 16 | 18..=19 | 21 | 23..=28 | 31 | 37 | 39 => 105, - 20 => 109, - 32 => 124, - _ => 76, + 2 => 48, + 3..=4 => 51, + 5 => 56, + 16 | 18..=19 | 21..=22 | 24..=29 | 32 | 38 | 40 => 106, + 20 => 110, + 33 => 126, + _ => 77, }, - 42 => 25, - 43 => 26, - 44 => 27, - 45 => 77, + 42 => 26, + 43 => 27, + 44 => 28, + 45 => 78, 46 => match state { - 4 => 52, - _ => 51, + 4 => 53, + _ => 52, }, - 48 => 45, + 48 => 46, 49 => match state { - 7 => 62, - 9 => 88, - _ => 57, + 7 => 63, + 9 => 89, + _ => 58, }, 50 => 16, - 51 => 28, + 51 => 29, _ => 0, } } @@ -780,6 +789,7 @@ mod __parse__Program { r###""mut""###, r###""print""###, r###""read""###, + r###""return""###, r###""true""###, r###""unit""###, r###""while""###, @@ -856,7 +866,7 @@ mod __parse__Program { #[inline] fn error_action(&self, state: i16) -> i16 { - __action(state, 44 - 1) + __action(state, 45 - 1) } #[inline] @@ -965,8 +975,9 @@ mod __parse__Program { Token(42, _) if true => Some(39), Token(43, _) if true => Some(40), Token(44, _) if true => Some(41), - Token(0, _) if true => Some(42), - Token(1, _) if true => Some(43), + Token(45, _) if true => Some(42), + Token(0, _) if true => Some(43), + Token(1, _) if true => Some(44), _ => None, } } @@ -979,8 +990,8 @@ mod __parse__Program { ) -> __Symbol<'input> { #[allow(clippy::manual_range_patterns)]match __token_index { - 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 => match __token { - Token(3, __tok0) | Token(4, __tok0) | Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(0, __tok0) | Token(1, __tok0) if true => __Symbol::Variant0(__tok0), + 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 => match __token { + Token(3, __tok0) | Token(4, __tok0) | Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(0, __tok0) | Token(1, __tok0) if true => __Symbol::Variant0(__tok0), _ => unreachable!(), }, _ => unreachable!(), @@ -1440,7 +1451,7 @@ mod __parse__Program { } 74 => { __state_machine::SimulatedReduce::Reduce { - states_to_pop: 1, + states_to_pop: 2, nonterminal_produced: 31, } } @@ -1453,238 +1464,250 @@ mod __parse__Program { 76 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 32, + nonterminal_produced: 31, } } 77 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 33, + nonterminal_produced: 31, } } 78 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, - nonterminal_produced: 34, + nonterminal_produced: 32, } } 79 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 33, + } + } + 80 => { + __state_machine::SimulatedReduce::Reduce { + states_to_pop: 1, + nonterminal_produced: 34, + } + } + 81 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 0, nonterminal_produced: 34, } } - 80 => { + 82 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 35, } } - 81 => { + 83 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 7, nonterminal_produced: 36, } } - 82 => { + 84 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 6, nonterminal_produced: 36, } } - 83 => { + 85 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 6, nonterminal_produced: 36, } } - 84 => { + 86 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 5, nonterminal_produced: 36, } } - 85 => { + 87 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, nonterminal_produced: 36, } } - 86 => { + 88 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, nonterminal_produced: 36, } } - 87 => { + 89 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 36, } } - 88 => { + 90 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 37, } } - 89 => { + 91 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 0, nonterminal_produced: 37, } } - 90 => { + 92 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 2, nonterminal_produced: 38, } } - 91 => { + 93 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 38, } } - 92 => { + 94 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 39, } } - 93 => { + 95 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 10, nonterminal_produced: 40, } } - 94 => { + 96 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 8, nonterminal_produced: 40, } } - 95 => { + 97 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 41, } } - 96 => { + 98 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 42, } } - 97 => { + 99 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 43, } } - 98 => { + 100 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 44, } } - 99 => { + 101 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 44, } } - 100 => { + 102 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 44, } } - 101 => { + 103 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 45, } } - 102 => { + 104 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 4, nonterminal_produced: 46, } } - 103 => { + 105 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 3, nonterminal_produced: 46, } } - 104 => { + 106 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 47, } } - 105 => { + 107 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 0, nonterminal_produced: 47, } } - 106 => { + 108 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 0, nonterminal_produced: 48, } } - 107 => { + 109 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 48, } } - 108 => { + 110 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 49, } } - 109 => { + 111 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 49, } } - 110 => { + 112 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 49, } } - 111 => { + 113 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 49, } } - 112 => { + 114 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 50, } } - 113 => { + 115 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 50, } } - 114 => { + 116 => { __state_machine::SimulatedReduce::Reduce { states_to_pop: 1, nonterminal_produced: 51, } } - 115 => __state_machine::SimulatedReduce::Accept, + 117 => __state_machine::SimulatedReduce::Accept, _ => panic!("invalid reduction index {}", __reduce_index) } } @@ -2112,6 +2135,12 @@ mod __parse__Program { __reduce114(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) } 115 => { + __reduce115(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 116 => { + __reduce116(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&())>) + } + 117 => { // __Program = Program => ActionFn(0); let __sym0 = __pop_Variant17(__symbols); let __start = __sym0.0; @@ -2339,11 +2368,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // "mut"? = "mut" => ActionFn(77); + // "mut"? = "mut" => ActionFn(78); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action77::<>(input, __sym0); + let __nt = super::__action78::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (1, 0) } @@ -2356,10 +2385,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // "mut"? = => ActionFn(78); + // "mut"? = => ActionFn(79); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action78::<>(input, &__start, &__end); + let __nt = super::__action79::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (0, 0) } @@ -2372,13 +2401,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" ) = "->", Type => ActionFn(81); + // ("->" ) = "->", Type => ActionFn(82); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant2(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action81::<>(input, __sym0, __sym1); + let __nt = super::__action82::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (2, 1) } @@ -2391,13 +2420,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" )? = "->", Type => ActionFn(105); + // ("->" )? = "->", Type => ActionFn(106); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant2(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action105::<>(input, __sym0, __sym1); + let __nt = super::__action106::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (2, 2) } @@ -2410,10 +2439,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("->" )? = => ActionFn(80); + // ("->" )? = => ActionFn(81); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action80::<>(input, &__start, &__end); + let __nt = super::__action81::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (0, 2) } @@ -2426,7 +2455,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("else" "{" "}") = "else", "{", Expr, "}" => ActionFn(74); + // ("else" "{" "}") = "else", "{", Expr, "}" => ActionFn(75); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant4(__symbols); @@ -2434,7 +2463,7 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action74::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action75::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (4, 3) } @@ -2447,7 +2476,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("else" "{" "}")? = "else", "{", Expr, "}" => ActionFn(108); + // ("else" "{" "}")? = "else", "{", Expr, "}" => ActionFn(109); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant4(__symbols); @@ -2455,7 +2484,7 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action108::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action109::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (4, 4) } @@ -2468,10 +2497,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ("else" "{" "}")? = => ActionFn(73); + // ("else" "{" "}")? = => ActionFn(74); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action73::<>(input, &__start, &__end); + let __nt = super::__action74::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (0, 4) } @@ -2484,13 +2513,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Expr, "," => ActionFn(96); + // ( ",") = Expr, "," => ActionFn(97); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action96::<>(input, __sym0, __sym1); + let __nt = super::__action97::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 5) } @@ -2503,10 +2532,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(94); + // ( ",")* = => ActionFn(95); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action94::<>(input, &__start, &__end); + let __nt = super::__action95::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (0, 6) } @@ -2519,11 +2548,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(95); + // ( ",")* = ( ",")+ => ActionFn(96); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action95::<>(input, __sym0); + let __nt = super::__action96::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (1, 6) } @@ -2536,13 +2565,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Expr, "," => ActionFn(111); + // ( ",")+ = Expr, "," => ActionFn(112); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action111::<>(input, __sym0, __sym1); + let __nt = super::__action112::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (2, 7) } @@ -2555,14 +2584,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Expr, "," => ActionFn(112); + // ( ",")+ = ( ",")+, Expr, "," => ActionFn(113); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action112::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action113::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (3, 7) } @@ -2575,13 +2604,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",") = Param, "," => ActionFn(91); + // ( ",") = Param, "," => ActionFn(92); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action91::<>(input, __sym0, __sym1); + let __nt = super::__action92::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (2, 8) } @@ -2594,10 +2623,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = => ActionFn(89); + // ( ",")* = => ActionFn(90); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action89::<>(input, &__start, &__end); + let __nt = super::__action90::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (0, 9) } @@ -2610,11 +2639,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")* = ( ",")+ => ActionFn(90); + // ( ",")* = ( ",")+ => ActionFn(91); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action90::<>(input, __sym0); + let __nt = super::__action91::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 9) } @@ -2627,13 +2656,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = Param, "," => ActionFn(115); + // ( ",")+ = Param, "," => ActionFn(116); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action115::<>(input, __sym0, __sym1); + let __nt = super::__action116::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (2, 10) } @@ -2646,14 +2675,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ( ",")+ = ( ",")+, Param, "," => ActionFn(116); + // ( ",")+ = ( ",")+, Param, "," => ActionFn(117); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action116::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action117::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (3, 10) } @@ -2666,11 +2695,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // AdditiveOp = "+" => ActionFn(35); + // AdditiveOp = "+" => ActionFn(36); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action35::<>(input, __sym0); + let __nt = super::__action36::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 11) } @@ -2683,11 +2712,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // AdditiveOp = "-" => ActionFn(36); + // AdditiveOp = "-" => ActionFn(37); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action36::<>(input, __sym0); + let __nt = super::__action37::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 11) } @@ -2700,14 +2729,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, AdditiveOp, ExprMultiplicative => ActionFn(60); + // BinaryOps = BinaryOps, AdditiveOp, ExprMultiplicative => ActionFn(61); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action60::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action61::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 12) } @@ -2720,11 +2749,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprMultiplicative => ActionFn(61); + // BinaryOps = ExprMultiplicative => ActionFn(62); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action61::<>(input, __sym0); + let __nt = super::__action62::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 12) } @@ -2737,14 +2766,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, ComparativeOp, ExprXor => ActionFn(64); + // BinaryOps = BinaryOps, ComparativeOp, ExprXor => ActionFn(65); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action64::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action65::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 13) } @@ -2757,11 +2786,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprXor => ActionFn(65); + // BinaryOps = ExprXor => ActionFn(66); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action65::<>(input, __sym0); + let __nt = super::__action66::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 13) } @@ -2774,14 +2803,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, LogicalAndOp, ExprComparative => ActionFn(66); + // BinaryOps = BinaryOps, LogicalAndOp, ExprComparative => ActionFn(67); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action66::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action67::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 14) } @@ -2794,11 +2823,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprComparative => ActionFn(67); + // BinaryOps = ExprComparative => ActionFn(68); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action67::<>(input, __sym0); + let __nt = super::__action68::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 14) } @@ -2811,14 +2840,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, LogicalOrOp, ExprLogicalAnd => ActionFn(68); + // BinaryOps = BinaryOps, LogicalOrOp, ExprLogicalAnd => ActionFn(69); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action68::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action69::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 15) } @@ -2831,11 +2860,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprLogicalAnd => ActionFn(69); + // BinaryOps = ExprLogicalAnd => ActionFn(70); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action69::<>(input, __sym0); + let __nt = super::__action70::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 15) } @@ -2848,14 +2877,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, MultiplicativeOp, ExprUnary => ActionFn(58); + // BinaryOps = BinaryOps, MultiplicativeOp, ExprUnary => ActionFn(59); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action58::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action59::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 16) } @@ -2868,11 +2897,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprUnary => ActionFn(59); + // BinaryOps = ExprUnary => ActionFn(60); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action59::<>(input, __sym0); + let __nt = super::__action60::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 16) } @@ -2885,14 +2914,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = BinaryOps, XorOp, ExprAdditive => ActionFn(62); + // BinaryOps = BinaryOps, XorOp, ExprAdditive => ActionFn(63); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action62::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action63::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 17) } @@ -2905,11 +2934,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // BinaryOps = ExprAdditive => ActionFn(63); + // BinaryOps = ExprAdditive => ActionFn(64); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action63::<>(input, __sym0); + let __nt = super::__action64::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 17) } @@ -2922,11 +2951,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Bool = "true" => ActionFn(55); + // Bool = "true" => ActionFn(56); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action55::<>(input, __sym0); + let __nt = super::__action56::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (1, 18) } @@ -2939,11 +2968,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Bool = "false" => ActionFn(56); + // Bool = "false" => ActionFn(57); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action56::<>(input, __sym0); + let __nt = super::__action57::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (1, 18) } @@ -2956,11 +2985,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Expr => ActionFn(121); + // Comma = Expr => ActionFn(122); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action121::<>(input, __sym0); + let __nt = super::__action122::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (1, 19) } @@ -2973,10 +3002,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(122); + // Comma = => ActionFn(123); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action122::<>(input, &__start, &__end); + let __nt = super::__action123::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (0, 19) } @@ -2989,13 +3018,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Expr => ActionFn(123); + // Comma = ( ",")+, Expr => ActionFn(124); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action123::<>(input, __sym0, __sym1); + let __nt = super::__action124::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (2, 19) } @@ -3008,11 +3037,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(124); + // Comma = ( ",")+ => ActionFn(125); let __sym0 = __pop_Variant6(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action124::<>(input, __sym0); + let __nt = super::__action125::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant11(__nt), __end)); (1, 19) } @@ -3025,11 +3054,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = Param => ActionFn(133); + // Comma = Param => ActionFn(136); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action133::<>(input, __sym0); + let __nt = super::__action136::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (1, 20) } @@ -3042,10 +3071,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = => ActionFn(134); + // Comma = => ActionFn(137); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action134::<>(input, &__start, &__end); + let __nt = super::__action137::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (0, 20) } @@ -3058,13 +3087,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+, Param => ActionFn(135); + // Comma = ( ",")+, Param => ActionFn(138); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action135::<>(input, __sym0, __sym1); + let __nt = super::__action138::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (2, 20) } @@ -3077,11 +3106,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Comma = ( ",")+ => ActionFn(136); + // Comma = ( ",")+ => ActionFn(139); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action136::<>(input, __sym0); + let __nt = super::__action139::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant12(__nt), __end)); (1, 20) } @@ -3094,11 +3123,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "==" => ActionFn(28); + // ComparativeOp = "==" => ActionFn(29); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action28::<>(input, __sym0); + let __nt = super::__action29::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 21) } @@ -3111,11 +3140,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "!=" => ActionFn(29); + // ComparativeOp = "!=" => ActionFn(30); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action29::<>(input, __sym0); + let __nt = super::__action30::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 21) } @@ -3128,11 +3157,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = ">" => ActionFn(30); + // ComparativeOp = ">" => ActionFn(31); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action30::<>(input, __sym0); + let __nt = super::__action31::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 21) } @@ -3145,11 +3174,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = ">=" => ActionFn(31); + // ComparativeOp = ">=" => ActionFn(32); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action31::<>(input, __sym0); + let __nt = super::__action32::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 21) } @@ -3162,11 +3191,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "<" => ActionFn(32); + // ComparativeOp = "<" => ActionFn(33); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action32::<>(input, __sym0); + let __nt = super::__action33::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 21) } @@ -3179,11 +3208,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ComparativeOp = "<=" => ActionFn(33); + // ComparativeOp = "<=" => ActionFn(34); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action33::<>(input, __sym0); + let __nt = super::__action34::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 21) } @@ -3213,10 +3242,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def* = => ActionFn(83); + // Def* = => ActionFn(84); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action83::<>(input, &__start, &__end); + let __nt = super::__action84::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (0, 23) } @@ -3229,11 +3258,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def* = Def+ => ActionFn(84); + // Def* = Def+ => ActionFn(85); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action84::<>(input, __sym0); + let __nt = super::__action85::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 23) } @@ -3246,11 +3275,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def+ = Def => ActionFn(85); + // Def+ = Def => ActionFn(86); let __sym0 = __pop_Variant13(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action85::<>(input, __sym0); + let __nt = super::__action86::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (1, 24) } @@ -3263,13 +3292,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Def+ = Def+, Def => ActionFn(86); + // Def+ = Def+, Def => ActionFn(87); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant13(__symbols); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action86::<>(input, __sym0, __sym1); + let __nt = super::__action87::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant14(__nt), __end)); (2, 24) } @@ -3299,11 +3328,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = Expr => ActionFn(92); + // Expr? = Expr => ActionFn(93); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action92::<>(input, __sym0); + let __nt = super::__action93::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (1, 26) } @@ -3316,10 +3345,10 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Expr? = => ActionFn(93); + // Expr? = => ActionFn(94); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action93::<>(input, &__start, &__end); + let __nt = super::__action94::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (0, 26) } @@ -3332,11 +3361,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAdditive = BinaryOps => ActionFn(24); + // ExprAdditive = BinaryOps => ActionFn(25); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action24::<>(input, __sym0); + let __nt = super::__action25::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 27) } @@ -3349,11 +3378,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Num => ActionFn(48); + // ExprAtom = Num => ActionFn(49); let __sym0 = __pop_Variant15(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action48::<>(input, __sym0); + let __nt = super::__action49::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 28) } @@ -3366,11 +3395,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Bool => ActionFn(49); + // ExprAtom = Bool => ActionFn(50); let __sym0 = __pop_Variant10(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action49::<>(input, __sym0); + let __nt = super::__action50::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 28) } @@ -3383,11 +3412,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = "unit" => ActionFn(50); + // ExprAtom = "unit" => ActionFn(51); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action50::<>(input, __sym0); + let __nt = super::__action51::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 28) } @@ -3400,11 +3429,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = Ident => ActionFn(51); + // ExprAtom = Ident => ActionFn(52); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action51::<>(input, __sym0); + let __nt = super::__action52::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 28) } @@ -3417,14 +3446,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprAtom = "(", Expr, ")" => ActionFn(52); + // ExprAtom = "(", Expr, ")" => ActionFn(53); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action52::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action53::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 28) } @@ -3437,14 +3466,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = "read", "(", ")" => ActionFn(44); + // ExprCall = "read", "(", ")" => ActionFn(45); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 29) } @@ -3457,7 +3486,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = "print", "(", Expr, ")" => ActionFn(45); + // ExprCall = "print", "(", Expr, ")" => ActionFn(46); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant4(__symbols); @@ -3465,7 +3494,7 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (4, 29) } @@ -3478,7 +3507,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = ExprAtom, "(", Comma, ")" => ActionFn(46); + // ExprCall = ExprAtom, "(", Comma, ")" => ActionFn(47); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant0(__symbols); let __sym2 = __pop_Variant11(__symbols); @@ -3486,7 +3515,7 @@ mod __parse__Program { let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (4, 29) } @@ -3499,11 +3528,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprCall = ExprAtom => ActionFn(47); + // ExprCall = ExprAtom => ActionFn(48); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action47::<>(input, __sym0); + let __nt = super::__action48::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 29) } @@ -3516,11 +3545,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprComparative = BinaryOps => ActionFn(22); + // ExprComparative = BinaryOps => ActionFn(23); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action22::<>(input, __sym0); + let __nt = super::__action23::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 30) } @@ -3553,7 +3582,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "if", ExprLogicalOr, "{", Expr, "}", "else", "{", Expr, "}" => ActionFn(109); + // ExprInStmt = "if", ExprLogicalOr, "{", Expr, "}", "else", "{", Expr, "}" => ActionFn(110); assert!(__symbols.len() >= 9); let __sym8 = __pop_Variant0(__symbols); let __sym7 = __pop_Variant4(__symbols); @@ -3566,7 +3595,7 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym8.2; - let __nt = super::__action109::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); + let __nt = super::__action110::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (9, 31) } @@ -3579,7 +3608,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "if", ExprLogicalOr, "{", Expr, "}" => ActionFn(110); + // ExprInStmt = "if", ExprLogicalOr, "{", Expr, "}" => ActionFn(111); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant4(__symbols); @@ -3588,7 +3617,7 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action110::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action111::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (5, 31) } @@ -3644,13 +3673,13 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "break", ExprLogicalOr => ActionFn(125); + // ExprInStmt = "break", ExprLogicalOr => ActionFn(126); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action125::<>(input, __sym0, __sym1); + let __nt = super::__action126::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 31) } @@ -3663,11 +3692,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "break" => ActionFn(126); + // ExprInStmt = "break" => ActionFn(127); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action126::<>(input, __sym0); + let __nt = super::__action127::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 31) } @@ -3680,15 +3709,34 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = "continue" => ActionFn(18); + // ExprInStmt = "return", ExprLogicalOr => ActionFn(128); + assert!(__symbols.len() >= 2); + let __sym1 = __pop_Variant4(__symbols); + let __sym0 = __pop_Variant0(__symbols); + let __start = __sym0.0; + let __end = __sym1.2; + let __nt = super::__action128::<>(input, __sym0, __sym1); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + (2, 31) + } + fn __reduce75< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ExprInStmt = "return" => ActionFn(129); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action18::<>(input, __sym0); + let __nt = super::__action129::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 31) } - fn __reduce75< + fn __reduce76< 'input, >( input: &'input str, @@ -3697,15 +3745,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprInStmt = ExprLogicalOr => ActionFn(19); - let __sym0 = __pop_Variant4(__symbols); + // ExprInStmt = "continue" => ActionFn(19); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; let __nt = super::__action19::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 31) } - fn __reduce76< + fn __reduce77< 'input, >( input: &'input str, @@ -3714,15 +3762,32 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalAnd = BinaryOps => ActionFn(21); + // ExprInStmt = ExprLogicalOr => ActionFn(20); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action20::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant4(__nt), __end)); + (1, 31) + } + fn __reduce78< + 'input, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input ())>, + ) -> (usize, usize) + { + // ExprLogicalAnd = BinaryOps => ActionFn(22); + let __sym0 = __pop_Variant4(__symbols); + let __start = __sym0.0; + let __end = __sym0.2; + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 32) } - fn __reduce77< + fn __reduce79< 'input, >( input: &'input str, @@ -3731,15 +3796,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr = BinaryOps => ActionFn(20); + // ExprLogicalOr = BinaryOps => ActionFn(21); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action20::<>(input, __sym0); + let __nt = super::__action21::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 33) } - fn __reduce78< + fn __reduce80< 'input, >( input: &'input str, @@ -3748,15 +3813,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr? = ExprLogicalOr => ActionFn(70); + // ExprLogicalOr? = ExprLogicalOr => ActionFn(71); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action70::<>(input, __sym0); + let __nt = super::__action71::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (1, 34) } - fn __reduce79< + fn __reduce81< 'input, >( input: &'input str, @@ -3765,14 +3830,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprLogicalOr? = => ActionFn(71); + // ExprLogicalOr? = => ActionFn(72); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action71::<>(input, &__start, &__end); + let __nt = super::__action72::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (0, 34) } - fn __reduce80< + fn __reduce82< 'input, >( input: &'input str, @@ -3781,15 +3846,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprMultiplicative = BinaryOps => ActionFn(25); + // ExprMultiplicative = BinaryOps => ActionFn(26); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action25::<>(input, __sym0); + let __nt = super::__action26::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 35) } - fn __reduce81< + fn __reduce83< 'input, >( input: &'input str, @@ -3798,7 +3863,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(127); + // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(130); assert!(__symbols.len() >= 7); let __sym6 = __pop_Variant4(__symbols); let __sym5 = __pop_Variant0(__symbols); @@ -3809,11 +3874,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym6.2; - let __nt = super::__action127::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); + let __nt = super::__action130::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (7, 36) } - fn __reduce82< + fn __reduce84< 'input, >( input: &'input str, @@ -3822,7 +3887,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";" => ActionFn(128); + // ExprStmt = "let", "mut", Ident, "=", ExprLogicalOr, ";" => ActionFn(131); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); let __sym4 = __pop_Variant4(__symbols); @@ -3832,11 +3897,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action128::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action131::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (6, 36) } - fn __reduce83< + fn __reduce85< 'input, >( input: &'input str, @@ -3845,7 +3910,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(129); + // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";", ExprStmt => ActionFn(132); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant4(__symbols); let __sym4 = __pop_Variant0(__symbols); @@ -3855,11 +3920,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym5.2; - let __nt = super::__action129::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __nt = super::__action132::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (6, 36) } - fn __reduce84< + fn __reduce86< 'input, >( input: &'input str, @@ -3868,7 +3933,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";" => ActionFn(130); + // ExprStmt = "let", Ident, "=", ExprLogicalOr, ";" => ActionFn(133); assert!(__symbols.len() >= 5); let __sym4 = __pop_Variant0(__symbols); let __sym3 = __pop_Variant4(__symbols); @@ -3877,11 +3942,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym4.2; - let __nt = super::__action130::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action133::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (5, 36) } - fn __reduce85< + fn __reduce87< 'input, >( input: &'input str, @@ -3890,18 +3955,18 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = ExprInStmt, ";", ExprStmt => ActionFn(131); + // ExprStmt = ExprInStmt, ";", ExprStmt => ActionFn(134); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant4(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action131::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action134::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (3, 36) } - fn __reduce86< + fn __reduce88< 'input, >( input: &'input str, @@ -3910,17 +3975,17 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt = ExprInStmt, ";" => ActionFn(132); + // ExprStmt = ExprInStmt, ";" => ActionFn(135); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action132::<>(input, __sym0, __sym1); + let __nt = super::__action135::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 36) } - fn __reduce87< + fn __reduce89< 'input, >( input: &'input str, @@ -3937,7 +4002,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 36) } - fn __reduce88< + fn __reduce90< 'input, >( input: &'input str, @@ -3946,15 +4011,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt? = ExprStmt => ActionFn(75); + // ExprStmt? = ExprStmt => ActionFn(76); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action75::<>(input, __sym0); + let __nt = super::__action76::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (1, 37) } - fn __reduce89< + fn __reduce91< 'input, >( input: &'input str, @@ -3963,14 +4028,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprStmt? = => ActionFn(76); + // ExprStmt? = => ActionFn(77); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action76::<>(input, &__start, &__end); + let __nt = super::__action77::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (0, 37) } - fn __reduce90< + fn __reduce92< 'input, >( input: &'input str, @@ -3979,17 +4044,17 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprUnary = UnaryOp, ExprUnary => ActionFn(42); + // ExprUnary = UnaryOp, ExprUnary => ActionFn(43); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant4(__symbols); let __sym0 = __pop_Variant9(__symbols); let __start = __sym0.0; let __end = __sym1.2; - let __nt = super::__action42::<>(input, __sym0, __sym1); + let __nt = super::__action43::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (2, 38) } - fn __reduce91< + fn __reduce93< 'input, >( input: &'input str, @@ -3998,15 +4063,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprUnary = ExprCall => ActionFn(43); + // ExprUnary = ExprCall => ActionFn(44); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action43::<>(input, __sym0); + let __nt = super::__action44::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 38) } - fn __reduce92< + fn __reduce94< 'input, >( input: &'input str, @@ -4015,15 +4080,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // ExprXor = BinaryOps => ActionFn(23); + // ExprXor = BinaryOps => ActionFn(24); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 39) } - fn __reduce93< + fn __reduce95< 'input, >( input: &'input str, @@ -4032,7 +4097,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Fn = "fn", Ident, "(", Comma, ")", "->", Type, "{", Expr, "}" => ActionFn(106); + // Fn = "fn", Ident, "(", Comma, ")", "->", Type, "{", Expr, "}" => ActionFn(107); assert!(__symbols.len() >= 10); let __sym9 = __pop_Variant0(__symbols); let __sym8 = __pop_Variant4(__symbols); @@ -4046,11 +4111,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym9.2; - let __nt = super::__action106::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); + let __nt = super::__action107::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7, __sym8, __sym9); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (10, 40) } - fn __reduce94< + fn __reduce96< 'input, >( input: &'input str, @@ -4059,7 +4124,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Fn = "fn", Ident, "(", Comma, ")", "{", Expr, "}" => ActionFn(107); + // Fn = "fn", Ident, "(", Comma, ")", "{", Expr, "}" => ActionFn(108); assert!(__symbols.len() >= 8); let __sym7 = __pop_Variant0(__symbols); let __sym6 = __pop_Variant4(__symbols); @@ -4071,11 +4136,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym7.2; - let __nt = super::__action107::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); + let __nt = super::__action108::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant13(__nt), __end)); (8, 40) } - fn __reduce95< + fn __reduce97< 'input, >( input: &'input str, @@ -4084,15 +4149,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Ident = r#"[_a-zA-Z][_a-zA-Z0-9]*"# => ActionFn(53); + // Ident = r#"[_a-zA-Z][_a-zA-Z0-9]*"# => ActionFn(54); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action53::<>(input, __sym0); + let __nt = super::__action54::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant0(__nt), __end)); (1, 41) } - fn __reduce96< + fn __reduce98< 'input, >( input: &'input str, @@ -4101,15 +4166,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // LogicalAndOp = "&&" => ActionFn(27); + // LogicalAndOp = "&&" => ActionFn(28); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action27::<>(input, __sym0); + let __nt = super::__action28::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 42) } - fn __reduce97< + fn __reduce99< 'input, >( input: &'input str, @@ -4118,15 +4183,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // LogicalOrOp = "||" => ActionFn(26); + // LogicalOrOp = "||" => ActionFn(27); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action26::<>(input, __sym0); + let __nt = super::__action27::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 43) } - fn __reduce98< + fn __reduce100< 'input, >( input: &'input str, @@ -4135,15 +4200,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "*" => ActionFn(37); + // MultiplicativeOp = "*" => ActionFn(38); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action37::<>(input, __sym0); + let __nt = super::__action38::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 44) } - fn __reduce99< + fn __reduce101< 'input, >( input: &'input str, @@ -4152,15 +4217,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "/" => ActionFn(38); + // MultiplicativeOp = "/" => ActionFn(39); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action38::<>(input, __sym0); + let __nt = super::__action39::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 44) } - fn __reduce100< + fn __reduce102< 'input, >( input: &'input str, @@ -4169,15 +4234,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // MultiplicativeOp = "%" => ActionFn(39); + // MultiplicativeOp = "%" => ActionFn(40); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action39::<>(input, __sym0); + let __nt = super::__action40::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 44) } - fn __reduce101< + fn __reduce103< 'input, >( input: &'input str, @@ -4186,15 +4251,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Num = r#"[0-9]+"# => ActionFn(54); + // Num = r#"[0-9]+"# => ActionFn(55); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action54::<>(input, __sym0); + let __nt = super::__action55::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant15(__nt), __end)); (1, 45) } - fn __reduce102< + fn __reduce104< 'input, >( input: &'input str, @@ -4203,7 +4268,7 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param = "mut", Ident, ":", Type => ActionFn(103); + // Param = "mut", Ident, ":", Type => ActionFn(104); assert!(__symbols.len() >= 4); let __sym3 = __pop_Variant2(__symbols); let __sym2 = __pop_Variant0(__symbols); @@ -4211,11 +4276,11 @@ mod __parse__Program { let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym3.2; - let __nt = super::__action103::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action104::<>(input, __sym0, __sym1, __sym2, __sym3); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (4, 46) } - fn __reduce103< + fn __reduce105< 'input, >( input: &'input str, @@ -4224,18 +4289,18 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param = Ident, ":", Type => ActionFn(104); + // Param = Ident, ":", Type => ActionFn(105); assert!(__symbols.len() >= 3); let __sym2 = __pop_Variant2(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym2.2; - let __nt = super::__action104::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action105::<>(input, __sym0, __sym1, __sym2); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (3, 46) } - fn __reduce104< + fn __reduce106< 'input, >( input: &'input str, @@ -4244,15 +4309,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param? = Param => ActionFn(87); + // Param? = Param => ActionFn(88); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action87::<>(input, __sym0); + let __nt = super::__action88::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); (1, 47) } - fn __reduce105< + fn __reduce107< 'input, >( input: &'input str, @@ -4261,14 +4326,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Param? = => ActionFn(88); + // Param? = => ActionFn(89); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action88::<>(input, &__start, &__end); + let __nt = super::__action89::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant16(__nt), __end)); (0, 47) } - fn __reduce106< + fn __reduce108< 'input, >( input: &'input str, @@ -4277,14 +4342,14 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Program = => ActionFn(119); + // Program = => ActionFn(120); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2)).unwrap_or_default(); let __end = __start; - let __nt = super::__action119::<>(input, &__start, &__end); + let __nt = super::__action120::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); (0, 48) } - fn __reduce107< + fn __reduce109< 'input, >( input: &'input str, @@ -4293,15 +4358,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // Program = Def+ => ActionFn(120); + // Program = Def+ => ActionFn(121); let __sym0 = __pop_Variant14(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action120::<>(input, __sym0); + let __nt = super::__action121::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant17(__nt), __end)); (1, 48) } - fn __reduce108< + fn __reduce110< 'input, >( input: &'input str, @@ -4318,7 +4383,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 49) } - fn __reduce109< + fn __reduce111< 'input, >( input: &'input str, @@ -4335,7 +4400,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 49) } - fn __reduce110< + fn __reduce112< 'input, >( input: &'input str, @@ -4352,7 +4417,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 49) } - fn __reduce111< + fn __reduce113< 'input, >( input: &'input str, @@ -4369,7 +4434,7 @@ mod __parse__Program { __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 49) } - fn __reduce112< + fn __reduce114< 'input, >( input: &'input str, @@ -4378,15 +4443,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UnaryOp = "-" => ActionFn(40); + // UnaryOp = "-" => ActionFn(41); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action40::<>(input, __sym0); + let __nt = super::__action41::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 50) } - fn __reduce113< + fn __reduce115< 'input, >( input: &'input str, @@ -4395,15 +4460,15 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // UnaryOp = "!" => ActionFn(41); + // UnaryOp = "!" => ActionFn(42); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action41::<>(input, __sym0); + let __nt = super::__action42::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 50) } - fn __reduce114< + fn __reduce116< 'input, >( input: &'input str, @@ -4412,11 +4477,11 @@ mod __parse__Program { _: core::marker::PhantomData<(&'input ())>, ) -> (usize, usize) { - // XorOp = "^" => ActionFn(34); + // XorOp = "^" => ActionFn(35); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0; let __end = __sym0.2; - let __nt = super::__action34::<>(input, __sym0); + let __nt = super::__action35::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); (1, 51) } @@ -4476,6 +4541,7 @@ mod __intern_token { ("(?:mut)", false), ("(?:print)", false), ("(?:read)", false), + ("(?:return)", false), ("(?:true)", false), ("(?:unit)", false), ("(?:while)", false), @@ -4784,10 +4850,13 @@ fn __action18< 'input, >( input: &'input str, - (_, __0, _): (usize, &'input str, usize), + (_, _, _): (usize, &'input str, usize), + (_, bdy, _): (usize, core::option::Option>, usize), ) -> Expr<&'input str> { - Expr::Continue + Expr::Return { + bdy: Box::new(bdy.unwrap_or(Expr::Lit { val: Lit::Unit })), + } } #[allow(unused_variables)] @@ -4796,10 +4865,10 @@ fn __action19< 'input, >( input: &'input str, - (_, __0, _): (usize, Expr<&'input str>, usize), + (_, __0, _): (usize, &'input str, usize), ) -> Expr<&'input str> { - __0 + Expr::Continue } #[allow(unused_variables)] @@ -4878,6 +4947,18 @@ fn __action25< #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] fn __action26< 'input, +>( + input: &'input str, + (_, __0, _): (usize, Expr<&'input str>, usize), +) -> Expr<&'input str> +{ + __0 +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] +fn __action27< + 'input, >( input: &'input str, (_, __0, _): (usize, &'input str, usize), @@ -4888,7 +4969,7 @@ fn __action26< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action27< +fn __action28< 'input, >( input: &'input str, @@ -4900,7 +4981,7 @@ fn __action27< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action28< +fn __action29< 'input, >( input: &'input str, @@ -4912,7 +4993,7 @@ fn __action28< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action29< +fn __action30< 'input, >( input: &'input str, @@ -4924,7 +5005,7 @@ fn __action29< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action30< +fn __action31< 'input, >( input: &'input str, @@ -4936,7 +5017,7 @@ fn __action30< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action31< +fn __action32< 'input, >( input: &'input str, @@ -4948,7 +5029,7 @@ fn __action31< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action32< +fn __action33< 'input, >( input: &'input str, @@ -4960,7 +5041,7 @@ fn __action32< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action33< +fn __action34< 'input, >( input: &'input str, @@ -4972,7 +5053,7 @@ fn __action33< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action34< +fn __action35< 'input, >( input: &'input str, @@ -4984,7 +5065,7 @@ fn __action34< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action35< +fn __action36< 'input, >( input: &'input str, @@ -4996,7 +5077,7 @@ fn __action35< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action36< +fn __action37< 'input, >( input: &'input str, @@ -5008,7 +5089,7 @@ fn __action36< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action37< +fn __action38< 'input, >( input: &'input str, @@ -5020,7 +5101,7 @@ fn __action37< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action38< +fn __action39< 'input, >( input: &'input str, @@ -5032,7 +5113,7 @@ fn __action38< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action39< +fn __action40< 'input, >( input: &'input str, @@ -5044,7 +5125,7 @@ fn __action39< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action40< +fn __action41< 'input, >( input: &'input str, @@ -5056,7 +5137,7 @@ fn __action40< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action41< +fn __action42< 'input, >( input: &'input str, @@ -5068,7 +5149,7 @@ fn __action41< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action42< +fn __action43< 'input, >( input: &'input str, @@ -5084,7 +5165,7 @@ fn __action42< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action43< +fn __action44< 'input, >( input: &'input str, @@ -5096,7 +5177,7 @@ fn __action43< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action44< +fn __action45< 'input, >( input: &'input str, @@ -5113,7 +5194,7 @@ fn __action44< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action45< +fn __action46< 'input, >( input: &'input str, @@ -5131,7 +5212,7 @@ fn __action45< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action46< +fn __action47< 'input, >( input: &'input str, @@ -5149,7 +5230,7 @@ fn __action46< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action47< +fn __action48< 'input, >( input: &'input str, @@ -5161,7 +5242,7 @@ fn __action47< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action48< +fn __action49< 'input, >( input: &'input str, @@ -5173,7 +5254,7 @@ fn __action48< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action49< +fn __action50< 'input, >( input: &'input str, @@ -5185,7 +5266,7 @@ fn __action49< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action50< +fn __action51< 'input, >( input: &'input str, @@ -5197,7 +5278,7 @@ fn __action50< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action51< +fn __action52< 'input, >( input: &'input str, @@ -5209,7 +5290,7 @@ fn __action51< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action52< +fn __action53< 'input, >( input: &'input str, @@ -5223,7 +5304,7 @@ fn __action52< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action53< +fn __action54< 'input, >( input: &'input str, @@ -5235,7 +5316,7 @@ fn __action53< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action54< +fn __action55< 'input, >( input: &'input str, @@ -5247,7 +5328,7 @@ fn __action54< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action55< +fn __action56< 'input, >( input: &'input str, @@ -5259,7 +5340,7 @@ fn __action55< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action56< +fn __action57< 'input, >( input: &'input str, @@ -5271,7 +5352,7 @@ fn __action56< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action57< +fn __action58< 'input, >( input: &'input str, @@ -5291,7 +5372,7 @@ fn __action57< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action58< +fn __action59< 'input, >( input: &'input str, @@ -5308,7 +5389,7 @@ fn __action58< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action59< +fn __action60< 'input, >( input: &'input str, @@ -5320,7 +5401,7 @@ fn __action59< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action60< +fn __action61< 'input, >( input: &'input str, @@ -5337,7 +5418,7 @@ fn __action60< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action61< +fn __action62< 'input, >( input: &'input str, @@ -5349,7 +5430,7 @@ fn __action61< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action62< +fn __action63< 'input, >( input: &'input str, @@ -5366,7 +5447,7 @@ fn __action62< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action63< +fn __action64< 'input, >( input: &'input str, @@ -5378,7 +5459,7 @@ fn __action63< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action64< +fn __action65< 'input, >( input: &'input str, @@ -5395,7 +5476,7 @@ fn __action64< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action65< +fn __action66< 'input, >( input: &'input str, @@ -5407,7 +5488,7 @@ fn __action65< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action66< +fn __action67< 'input, >( input: &'input str, @@ -5424,7 +5505,7 @@ fn __action66< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action67< +fn __action68< 'input, >( input: &'input str, @@ -5436,7 +5517,7 @@ fn __action67< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action68< +fn __action69< 'input, >( input: &'input str, @@ -5453,7 +5534,7 @@ fn __action68< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action69< +fn __action70< 'input, >( input: &'input str, @@ -5465,7 +5546,7 @@ fn __action69< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action70< +fn __action71< 'input, >( input: &'input str, @@ -5477,7 +5558,7 @@ fn __action70< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action71< +fn __action72< 'input, >( input: &'input str, @@ -5490,7 +5571,7 @@ fn __action71< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action72< +fn __action73< 'input, >( input: &'input str, @@ -5502,7 +5583,7 @@ fn __action72< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action73< +fn __action74< 'input, >( input: &'input str, @@ -5515,7 +5596,7 @@ fn __action73< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action74< +fn __action75< 'input, >( input: &'input str, @@ -5530,7 +5611,7 @@ fn __action74< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action75< +fn __action76< 'input, >( input: &'input str, @@ -5542,7 +5623,7 @@ fn __action75< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action76< +fn __action77< 'input, >( input: &'input str, @@ -5555,7 +5636,7 @@ fn __action76< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action77< +fn __action78< 'input, >( input: &'input str, @@ -5567,7 +5648,7 @@ fn __action77< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action78< +fn __action79< 'input, >( input: &'input str, @@ -5580,7 +5661,7 @@ fn __action78< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action79< +fn __action80< 'input, >( input: &'input str, @@ -5592,7 +5673,7 @@ fn __action79< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action80< +fn __action81< 'input, >( input: &'input str, @@ -5605,7 +5686,7 @@ fn __action80< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action81< +fn __action82< 'input, >( input: &'input str, @@ -5618,7 +5699,7 @@ fn __action81< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action82< +fn __action83< 'input, >( input: &'input str, @@ -5638,7 +5719,7 @@ fn __action82< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action83< +fn __action84< 'input, >( input: &'input str, @@ -5651,7 +5732,7 @@ fn __action83< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action84< +fn __action85< 'input, >( input: &'input str, @@ -5663,7 +5744,7 @@ fn __action84< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action85< +fn __action86< 'input, >( input: &'input str, @@ -5675,7 +5756,7 @@ fn __action85< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action86< +fn __action87< 'input, >( input: &'input str, @@ -5688,7 +5769,7 @@ fn __action86< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action87< +fn __action88< 'input, >( input: &'input str, @@ -5700,7 +5781,7 @@ fn __action87< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action88< +fn __action89< 'input, >( input: &'input str, @@ -5713,7 +5794,7 @@ fn __action88< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action89< +fn __action90< 'input, >( input: &'input str, @@ -5726,7 +5807,7 @@ fn __action89< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action90< +fn __action91< 'input, >( input: &'input str, @@ -5738,7 +5819,7 @@ fn __action90< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action91< +fn __action92< 'input, >( input: &'input str, @@ -5751,7 +5832,7 @@ fn __action91< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action92< +fn __action93< 'input, >( input: &'input str, @@ -5763,7 +5844,7 @@ fn __action92< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action93< +fn __action94< 'input, >( input: &'input str, @@ -5776,7 +5857,7 @@ fn __action93< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action94< +fn __action95< 'input, >( input: &'input str, @@ -5789,7 +5870,7 @@ fn __action94< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action95< +fn __action96< 'input, >( input: &'input str, @@ -5801,7 +5882,7 @@ fn __action95< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action96< +fn __action97< 'input, >( input: &'input str, @@ -5814,7 +5895,7 @@ fn __action96< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action97< +fn __action98< 'input, >( input: &'input str, @@ -5826,7 +5907,7 @@ fn __action97< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action98< +fn __action99< 'input, >( input: &'input str, @@ -5839,7 +5920,7 @@ fn __action98< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action99< +fn __action100< 'input, >( input: &'input str, @@ -5851,7 +5932,7 @@ fn __action99< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action100< +fn __action101< 'input, >( input: &'input str, @@ -5865,7 +5946,7 @@ fn __action100< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action101< +fn __action102< 'input, >( input: &'input str, @@ -5880,7 +5961,7 @@ fn __action101< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action77( + let __temp0 = __action78( input, __1, ); @@ -5900,7 +5981,7 @@ fn __action101< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action102< +fn __action103< 'input, >( input: &'input str, @@ -5914,7 +5995,7 @@ fn __action102< { let __start0 = __0.2; let __end0 = __1.0; - let __temp0 = __action78( + let __temp0 = __action79( input, &__start0, &__end0, @@ -5935,7 +6016,7 @@ fn __action102< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action103< +fn __action104< 'input, >( input: &'input str, @@ -5947,7 +6028,7 @@ fn __action103< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action77( + let __temp0 = __action78( input, __0, ); @@ -5964,7 +6045,7 @@ fn __action103< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action104< +fn __action105< 'input, >( input: &'input str, @@ -5975,7 +6056,7 @@ fn __action104< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action78( + let __temp0 = __action79( input, &__start0, &__end0, @@ -5993,7 +6074,7 @@ fn __action104< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action105< +fn __action106< 'input, >( input: &'input str, @@ -6003,13 +6084,13 @@ fn __action105< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action81( + let __temp0 = __action82( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action79( + __action80( input, __temp0, ) @@ -6018,7 +6099,7 @@ fn __action105< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action106< +fn __action107< 'input, >( input: &'input str, @@ -6036,7 +6117,7 @@ fn __action106< { let __start0 = __5.0; let __end0 = __6.2; - let __temp0 = __action105( + let __temp0 = __action106( input, __5, __6, @@ -6059,7 +6140,7 @@ fn __action106< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action107< +fn __action108< 'input, >( input: &'input str, @@ -6075,7 +6156,7 @@ fn __action107< { let __start0 = __4.2; let __end0 = __5.0; - let __temp0 = __action80( + let __temp0 = __action81( input, &__start0, &__end0, @@ -6098,7 +6179,7 @@ fn __action107< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action108< +fn __action109< 'input, >( input: &'input str, @@ -6110,7 +6191,7 @@ fn __action108< { let __start0 = __0.0; let __end0 = __3.2; - let __temp0 = __action74( + let __temp0 = __action75( input, __0, __1, @@ -6118,7 +6199,7 @@ fn __action108< __3, ); let __temp0 = (__start0, __temp0, __end0); - __action72( + __action73( input, __temp0, ) @@ -6127,7 +6208,7 @@ fn __action108< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action109< +fn __action110< 'input, >( input: &'input str, @@ -6144,7 +6225,7 @@ fn __action109< { let __start0 = __5.0; let __end0 = __8.2; - let __temp0 = __action108( + let __temp0 = __action109( input, __5, __6, @@ -6166,7 +6247,7 @@ fn __action109< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action110< +fn __action111< 'input, >( input: &'input str, @@ -6179,7 +6260,7 @@ fn __action110< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action73( + let __temp0 = __action74( input, &__start0, &__end0, @@ -6199,7 +6280,7 @@ fn __action110< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action111< +fn __action112< 'input, >( input: &'input str, @@ -6209,13 +6290,13 @@ fn __action111< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action96( + let __temp0 = __action97( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action97( + __action98( input, __temp0, ) @@ -6224,7 +6305,7 @@ fn __action111< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action112< +fn __action113< 'input, >( input: &'input str, @@ -6235,13 +6316,13 @@ fn __action112< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action96( + let __temp0 = __action97( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action98( + __action99( input, __0, __temp0, @@ -6251,7 +6332,7 @@ fn __action112< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action113< +fn __action114< 'input, >( input: &'input str, @@ -6260,13 +6341,13 @@ fn __action113< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action94( + let __temp0 = __action95( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action57( + __action58( input, __temp0, __0, @@ -6276,7 +6357,7 @@ fn __action113< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action114< +fn __action115< 'input, >( input: &'input str, @@ -6286,12 +6367,12 @@ fn __action114< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action95( + let __temp0 = __action96( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action57( + __action58( input, __temp0, __1, @@ -6301,7 +6382,7 @@ fn __action114< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action115< +fn __action116< 'input, >( input: &'input str, @@ -6311,13 +6392,13 @@ fn __action115< { let __start0 = __0.0; let __end0 = __1.2; - let __temp0 = __action91( + let __temp0 = __action92( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action99( + __action100( input, __temp0, ) @@ -6326,7 +6407,7 @@ fn __action115< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action116< +fn __action117< 'input, >( input: &'input str, @@ -6337,13 +6418,13 @@ fn __action116< { let __start0 = __1.0; let __end0 = __2.2; - let __temp0 = __action91( + let __temp0 = __action92( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action100( + __action101( input, __0, __temp0, @@ -6353,7 +6434,7 @@ fn __action116< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action117< +fn __action118< 'input, >( input: &'input str, @@ -6362,13 +6443,13 @@ fn __action117< { let __start0 = __0.0; let __end0 = __0.0; - let __temp0 = __action89( + let __temp0 = __action90( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action82( + __action83( input, __temp0, __0, @@ -6378,7 +6459,7 @@ fn __action117< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action118< +fn __action119< 'input, >( input: &'input str, @@ -6388,12 +6469,12 @@ fn __action118< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action90( + let __temp0 = __action91( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action82( + __action83( input, __temp0, __1, @@ -6403,7 +6484,7 @@ fn __action118< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action119< +fn __action120< 'input, >( input: &'input str, @@ -6413,7 +6494,7 @@ fn __action119< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action83( + let __temp0 = __action84( input, &__start0, &__end0, @@ -6428,7 +6509,7 @@ fn __action119< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action120< +fn __action121< 'input, >( input: &'input str, @@ -6437,7 +6518,7 @@ fn __action120< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action84( + let __temp0 = __action85( input, __0, ); @@ -6451,7 +6532,7 @@ fn __action120< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action121< +fn __action122< 'input, >( input: &'input str, @@ -6460,12 +6541,12 @@ fn __action121< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action92( + let __temp0 = __action93( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action113( + __action114( input, __temp0, ) @@ -6474,7 +6555,7 @@ fn __action121< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action122< +fn __action123< 'input, >( input: &'input str, @@ -6484,13 +6565,13 @@ fn __action122< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action93( + let __temp0 = __action94( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action113( + __action114( input, __temp0, ) @@ -6499,7 +6580,7 @@ fn __action122< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action123< +fn __action124< 'input, >( input: &'input str, @@ -6509,12 +6590,12 @@ fn __action123< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action92( + let __temp0 = __action93( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action114( + __action115( input, __0, __temp0, @@ -6524,7 +6605,7 @@ fn __action123< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action124< +fn __action125< 'input, >( input: &'input str, @@ -6533,13 +6614,13 @@ fn __action124< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action93( + let __temp0 = __action94( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action114( + __action115( input, __0, __temp0, @@ -6549,7 +6630,7 @@ fn __action124< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action125< +fn __action126< 'input, >( input: &'input str, @@ -6559,7 +6640,7 @@ fn __action125< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action70( + let __temp0 = __action71( input, __1, ); @@ -6574,7 +6655,7 @@ fn __action125< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action126< +fn __action127< 'input, >( input: &'input str, @@ -6583,7 +6664,7 @@ fn __action126< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action71( + let __temp0 = __action72( input, &__start0, &__end0, @@ -6599,7 +6680,57 @@ fn __action126< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action127< +fn __action128< + 'input, +>( + input: &'input str, + __0: (usize, &'input str, usize), + __1: (usize, Expr<&'input str>, usize), +) -> Expr<&'input str> +{ + let __start0 = __1.0; + let __end0 = __1.2; + let __temp0 = __action71( + input, + __1, + ); + let __temp0 = (__start0, __temp0, __end0); + __action18( + input, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, + clippy::just_underscores_and_digits)] +fn __action129< + 'input, +>( + input: &'input str, + __0: (usize, &'input str, usize), +) -> Expr<&'input str> +{ + let __start0 = __0.2; + let __end0 = __0.2; + let __temp0 = __action72( + input, + &__start0, + &__end0, + ); + let __temp0 = (__start0, __temp0, __end0); + __action18( + input, + __0, + __temp0, + ) +} + +#[allow(unused_variables)] +#[allow(clippy::too_many_arguments, clippy::needless_lifetimes, + clippy::just_underscores_and_digits)] +fn __action130< 'input, >( input: &'input str, @@ -6614,12 +6745,12 @@ fn __action127< { let __start0 = __6.0; let __end0 = __6.2; - let __temp0 = __action75( + let __temp0 = __action76( input, __6, ); let __temp0 = (__start0, __temp0, __end0); - __action101( + __action102( input, __0, __1, @@ -6634,7 +6765,7 @@ fn __action127< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action128< +fn __action131< 'input, >( input: &'input str, @@ -6648,13 +6779,13 @@ fn __action128< { let __start0 = __5.2; let __end0 = __5.2; - let __temp0 = __action76( + let __temp0 = __action77( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action101( + __action102( input, __0, __1, @@ -6669,7 +6800,7 @@ fn __action128< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action129< +fn __action132< 'input, >( input: &'input str, @@ -6683,12 +6814,12 @@ fn __action129< { let __start0 = __5.0; let __end0 = __5.2; - let __temp0 = __action75( + let __temp0 = __action76( input, __5, ); let __temp0 = (__start0, __temp0, __end0); - __action102( + __action103( input, __0, __1, @@ -6702,7 +6833,7 @@ fn __action129< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action130< +fn __action133< 'input, >( input: &'input str, @@ -6715,13 +6846,13 @@ fn __action130< { let __start0 = __4.2; let __end0 = __4.2; - let __temp0 = __action76( + let __temp0 = __action77( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action102( + __action103( input, __0, __1, @@ -6735,7 +6866,7 @@ fn __action130< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action131< +fn __action134< 'input, >( input: &'input str, @@ -6746,7 +6877,7 @@ fn __action131< { let __start0 = __2.0; let __end0 = __2.2; - let __temp0 = __action75( + let __temp0 = __action76( input, __2, ); @@ -6762,7 +6893,7 @@ fn __action131< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action132< +fn __action135< 'input, >( input: &'input str, @@ -6772,7 +6903,7 @@ fn __action132< { let __start0 = __1.2; let __end0 = __1.2; - let __temp0 = __action76( + let __temp0 = __action77( input, &__start0, &__end0, @@ -6789,7 +6920,7 @@ fn __action132< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action133< +fn __action136< 'input, >( input: &'input str, @@ -6798,12 +6929,12 @@ fn __action133< { let __start0 = __0.0; let __end0 = __0.2; - let __temp0 = __action87( + let __temp0 = __action88( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action117( + __action118( input, __temp0, ) @@ -6812,7 +6943,7 @@ fn __action133< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action134< +fn __action137< 'input, >( input: &'input str, @@ -6822,13 +6953,13 @@ fn __action134< { let __start0 = *__lookbehind; let __end0 = *__lookahead; - let __temp0 = __action88( + let __temp0 = __action89( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action117( + __action118( input, __temp0, ) @@ -6837,7 +6968,7 @@ fn __action134< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action135< +fn __action138< 'input, >( input: &'input str, @@ -6847,12 +6978,12 @@ fn __action135< { let __start0 = __1.0; let __end0 = __1.2; - let __temp0 = __action87( + let __temp0 = __action88( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action118( + __action119( input, __0, __temp0, @@ -6862,7 +6993,7 @@ fn __action135< #[allow(unused_variables)] #[allow(clippy::too_many_arguments, clippy::needless_lifetimes, clippy::just_underscores_and_digits)] -fn __action136< +fn __action139< 'input, >( input: &'input str, @@ -6871,13 +7002,13 @@ fn __action136< { let __start0 = __0.2; let __end0 = __0.2; - let __temp0 = __action88( + let __temp0 = __action89( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action118( + __action119( input, __0, __temp0, diff --git a/compiler/src/passes/parse/interpreter.rs b/compiler/src/passes/parse/interpreter.rs index b5a2715..b2fc62c 100644 --- a/compiler/src/passes/parse/interpreter.rs +++ b/compiler/src/passes/parse/interpreter.rs @@ -9,24 +9,17 @@ use std::hash::Hash; pub enum ControlFlow { Val(Val), Break(Val), + Return(Val), Continue, } -impl ControlFlow { - pub fn val(self) -> Val { - match self { - ControlFlow::Val(v) => v, - ControlFlow::Break(_) | ControlFlow::Continue => panic!("Sterf"), - } - } -} - +/// This macro unwraps values and bubbles up continues, breaks and returns. macro_rules! b { ($e: expr) => {{ let e = $e; match e { - ControlFlow::Break(_) | ControlFlow::Continue => return e, ControlFlow::Val(val) => val, + ControlFlow::Break(_) | ControlFlow::Return(_) | ControlFlow::Continue => return e, } }}; } @@ -54,7 +47,10 @@ impl PrgGenericVar { .iter() .zip(args.iter()) .map(|(param, v)| (param.sym, *v)), - |scope| self.interpret_expr(bdy, scope, io).val(), + |scope| match self.interpret_expr(bdy, scope, io) { + ControlFlow::Return(val) | ControlFlow::Val(val) => val, + ControlFlow::Continue | ControlFlow::Break(_) => unreachable!(), + }, ), } } @@ -172,15 +168,19 @@ impl PrgGenericVar { } Expr::Apply { fun, args } => { let sym = b!(self.interpret_expr(fun, scope, io)).fun(); - let args = args - .iter() - .map(|arg| self.interpret_expr(arg, scope, io).val()) - .collect(); - self.interpret_fn(sym, args, scope, io) + + let mut fn_args = Vec::new(); + for arg in args { + fn_args.push(b!(self.interpret_expr(arg, scope, io))); + } + + self.interpret_fn(sym, fn_args, scope, io) } Expr::Loop { bdy } => loop { - if let ControlFlow::Break(val) = self.interpret_expr(bdy, scope, io) { - return ControlFlow::Val(val); + match self.interpret_expr(bdy, scope, io){ + ControlFlow::Return(val) => return ControlFlow::Return(val), + ControlFlow::Break(val) => return ControlFlow::Val(val), + ControlFlow::Continue | ControlFlow::Val(_) => {} } }, Expr::Break { bdy } => { @@ -196,6 +196,7 @@ impl PrgGenericVar { Val::Unit } Expr::Continue => return ControlFlow::Continue, + Expr::Return { bdy } => return ControlFlow::Return(b!(self.interpret_expr(bdy, scope, io))) }) } } diff --git a/compiler/src/passes/parse/mod.rs b/compiler/src/passes/parse/mod.rs index 72e1ebb..e868724 100644 --- a/compiler/src/passes/parse/mod.rs +++ b/compiler/src/passes/parse/mod.rs @@ -73,6 +73,9 @@ pub enum Expr { bdy: Box>, }, Continue, + Return { + bdy: Box>, + }, Seq { stmt: Box>, cnt: Box>, diff --git a/compiler/src/passes/reveal_functions/reveal_functions.rs b/compiler/src/passes/reveal_functions/reveal_functions.rs index a1b4679..97a51ca 100644 --- a/compiler/src/passes/reveal_functions/reveal_functions.rs +++ b/compiler/src/passes/reveal_functions/reveal_functions.rs @@ -88,5 +88,6 @@ fn reveal_expr<'p>(expr: Expr>, scope: &mut PushMap, bnd: Box::new(reveal_expr(*bnd, scope)), }, Expr::Continue => RExpr::Continue, + Expr::Return { .. } => todo!(), } } diff --git a/compiler/src/passes/type_check/check.rs b/compiler/src/passes/type_check/check.rs index 942bc3f..12029c3 100644 --- a/compiler/src/passes/type_check/check.rs +++ b/compiler/src/passes/type_check/check.rs @@ -274,6 +274,11 @@ fn type_check_expr<'p>(expr: &Expr<&'p str>, env: &mut Env<'_, 'p>) -> Result Ok(Type::Never), + Expr::Return { bdy } => { + // TODO: check bdy has type of function! + + Ok(Type::Never) + }, } } diff --git a/compiler/src/passes/uniquify/uniquify.rs b/compiler/src/passes/uniquify/uniquify.rs index a629212..424f293 100644 --- a/compiler/src/passes/uniquify/uniquify.rs +++ b/compiler/src/passes/uniquify/uniquify.rs @@ -111,5 +111,6 @@ fn uniquify_expression<'p>( bnd: Box::new(uniquify_expression(*bnd, scope)), }, Expr::Continue => Expr::Continue, + Expr::Return { .. } => todo!(), } } diff --git a/programs/good/functions/maybe_return.test b/programs/good/functions/maybe_return.test new file mode 100644 index 0000000..bab8450 --- /dev/null +++ b/programs/good/functions/maybe_return.test @@ -0,0 +1,16 @@ +# +42 13 +# +unit +# +fn add(x: Int, y: Int) -> Int { + if x + y != 13 { + return 42; + }; + x + y +} + +fn main() { + print(add(0, 1)); + print(add(5, 8)); +} diff --git a/programs/good/functions/simple_return.test b/programs/good/functions/simple_return.test new file mode 100644 index 0000000..2135f7f --- /dev/null +++ b/programs/good/functions/simple_return.test @@ -0,0 +1,11 @@ +## +42 +# +fn add(x: Int, y: Int) -> Int { + return x + y; + 8 +} + +fn main() -> Int { + add(40, 2) +} From 2f64d171ca8a9e6c6d1a11c98d064385e1a4657e Mon Sep 17 00:00:00 2001 From: jonathan Date: Mon, 30 Oct 2023 20:38:38 +0100 Subject: [PATCH 15/16] Return working! --- compiler/src/passes/atomize/atomize.rs | 24 ++++------- compiler/src/passes/atomize/mod.rs | 6 +++ compiler/src/passes/explicate/explicate.rs | 15 +++++-- compiler/src/passes/parse/interpreter.rs | 6 ++- compiler/src/passes/reveal_functions/mod.rs | 6 +++ .../reveal_functions/reveal_functions.rs | 4 +- compiler/src/passes/type_check/check.rs | 40 ++++++++----------- compiler/src/passes/uniquify/uniquify.rs | 4 +- programs/fail/type_check/bad_return.test | 11 +++++ 9 files changed, 69 insertions(+), 47 deletions(-) create mode 100644 programs/fail/type_check/bad_return.test diff --git a/compiler/src/passes/atomize/atomize.rs b/compiler/src/passes/atomize/atomize.rs index 8519724..e530d11 100644 --- a/compiler/src/passes/atomize/atomize.rs +++ b/compiler/src/passes/atomize/atomize.rs @@ -101,25 +101,17 @@ fn atomize_expr(expr: RExpr) -> AExpr { bnd: Box::new(atomize_expr(*bnd)), }, RExpr::Continue => AExpr::Continue, + RExpr::Return { bdy } => AExpr::Return { + bdy: Box::new(atomize_expr(*bdy)), + }, } } fn atomize_atom(expr: RExpr) -> (Atom, Option<(UniqueSym, AExpr)>) { - match expr { - RExpr::Lit { val } => (Atom::Val { val }, None), - RExpr::Prim { .. } - | RExpr::Let { .. } - | RExpr::If { .. } - | RExpr::Apply { .. } - | RExpr::FunRef { .. } - | RExpr::Loop { .. } - | RExpr::Break { .. } - | RExpr::Seq { .. } - | RExpr::Assign { .. } - | RExpr::Var { .. } - | RExpr::Continue => { - let tmp = gen_sym("tmp"); - (Atom::Var { sym: tmp }, Some((tmp, atomize_expr(expr)))) - } + if let RExpr::Lit { val } = expr { + (Atom::Val { val }, None) + } else { + let tmp = gen_sym("tmp"); + (Atom::Var { sym: tmp }, Some((tmp, atomize_expr(expr)))) } } diff --git a/compiler/src/passes/atomize/mod.rs b/compiler/src/passes/atomize/mod.rs index f773ab2..097d7e8 100644 --- a/compiler/src/passes/atomize/mod.rs +++ b/compiler/src/passes/atomize/mod.rs @@ -52,6 +52,9 @@ pub enum AExpr<'p> { sym: UniqueSym<'p>, bnd: Box>, }, + Return { + bdy: Box>, + }, } #[derive(Debug, PartialEq, Copy, Clone)] @@ -131,6 +134,9 @@ impl<'p> From> for Expr> { bnd: Box::new((*bnd).into()), }, AExpr::Continue => Expr::Continue, + AExpr::Return { bdy } => Expr::Return { + bdy: Box::new((*bdy).into()), + }, } } } diff --git a/compiler/src/passes/explicate/explicate.rs b/compiler/src/passes/explicate/explicate.rs index ad7285b..c157ee1 100644 --- a/compiler/src/passes/explicate/explicate.rs +++ b/compiler/src/passes/explicate/explicate.rs @@ -1,5 +1,4 @@ use crate::passes::atomize::{AExpr, Atom, PrgAtomized}; -use crate::passes::explicate::Tail::Goto; use crate::passes::explicate::{CExpr, PrgExplicated, Tail}; use crate::passes::parse::{Def, Lit, Op}; use crate::utils::gen_sym::{gen_sym, UniqueSym}; @@ -158,9 +157,18 @@ fn explicate_assign<'p>( ), env, ), - AExpr::Continue => Goto { + AExpr::Continue => Tail::Goto { lbl: env.continue_target.unwrap(), }, + AExpr::Return { bdy } => { + let tmp = gen_sym("return"); + let tail = Tail::Return { + expr: CExpr::Atom { + atm: Atom::Var { sym: tmp }, + }, + }; + explicate_assign(tmp, *bdy, tail, env) + } } } @@ -296,6 +304,7 @@ fn explicate_pred<'p>( } | AExpr::Assign { .. } | AExpr::Break { .. } - | AExpr::Continue => unreachable!(), + | AExpr::Continue + | AExpr::Return { .. } => unreachable!(), } } diff --git a/compiler/src/passes/parse/interpreter.rs b/compiler/src/passes/parse/interpreter.rs index b2fc62c..e460258 100644 --- a/compiler/src/passes/parse/interpreter.rs +++ b/compiler/src/passes/parse/interpreter.rs @@ -177,7 +177,7 @@ impl PrgGenericVar { self.interpret_fn(sym, fn_args, scope, io) } Expr::Loop { bdy } => loop { - match self.interpret_expr(bdy, scope, io){ + match self.interpret_expr(bdy, scope, io) { ControlFlow::Return(val) => return ControlFlow::Return(val), ControlFlow::Break(val) => return ControlFlow::Val(val), ControlFlow::Continue | ControlFlow::Val(_) => {} @@ -196,7 +196,9 @@ impl PrgGenericVar { Val::Unit } Expr::Continue => return ControlFlow::Continue, - Expr::Return { bdy } => return ControlFlow::Return(b!(self.interpret_expr(bdy, scope, io))) + Expr::Return { bdy } => { + return ControlFlow::Return(b!(self.interpret_expr(bdy, scope, io))) + } }) } } diff --git a/compiler/src/passes/reveal_functions/mod.rs b/compiler/src/passes/reveal_functions/mod.rs index 67fac95..d147361 100644 --- a/compiler/src/passes/reveal_functions/mod.rs +++ b/compiler/src/passes/reveal_functions/mod.rs @@ -46,6 +46,9 @@ pub enum RExpr<'p> { Break { bdy: Box>, }, + Return { + bdy: Box>, + }, Continue, Seq { stmt: Box>, @@ -128,6 +131,9 @@ impl<'p> From> for Expr> { bnd: Box::new((*bnd).into()), }, RExpr::Continue => Expr::Continue, + RExpr::Return { bdy } => Expr::Return { + bdy: Box::new((*bdy).into()), + }, } } } diff --git a/compiler/src/passes/reveal_functions/reveal_functions.rs b/compiler/src/passes/reveal_functions/reveal_functions.rs index 97a51ca..77b75e2 100644 --- a/compiler/src/passes/reveal_functions/reveal_functions.rs +++ b/compiler/src/passes/reveal_functions/reveal_functions.rs @@ -88,6 +88,8 @@ fn reveal_expr<'p>(expr: Expr>, scope: &mut PushMap, bnd: Box::new(reveal_expr(*bnd, scope)), }, Expr::Continue => RExpr::Continue, - Expr::Return { .. } => todo!(), + Expr::Return { bdy } => RExpr::Return { + bdy: Box::new(reveal_expr(*bdy, scope)), + }, } } diff --git a/compiler/src/passes/type_check/check.rs b/compiler/src/passes/type_check/check.rs index 12029c3..84fb99b 100644 --- a/compiler/src/passes/type_check/check.rs +++ b/compiler/src/passes/type_check/check.rs @@ -36,6 +36,7 @@ struct Env<'a, 'p> { scope: &'a mut PushMap<&'p str, (bool, Type)>, loop_type: &'a mut Option, in_loop: bool, + return_type: &'a Type, } impl<'a, 'p> Env<'a, 'p> { @@ -50,20 +51,7 @@ impl<'a, 'p> Env<'a, 'p> { scope, loop_type: self.loop_type, in_loop: self.in_loop, - }) - }) - } - - pub fn push_iter( - &mut self, - iterator: impl Iterator, - sub: impl FnOnce(&mut Env<'_, 'p>) -> O, - ) -> O { - self.scope.push_iter(iterator, |scope| { - sub(&mut Env { - scope, - loop_type: self.loop_type, - in_loop: self.in_loop, + return_type: self.return_type, }) }) } @@ -72,11 +60,6 @@ impl<'a, 'p> Env<'a, 'p> { impl<'p> PrgParsed<'p> { pub fn type_check(self) -> Result, TypeError> { let mut scope = uncover_fns(&self)?; - let mut env = Env { - scope: &mut scope, - loop_type: &mut None, - in_loop: false, - }; // Typecheck all definitions and collect them. let defs = self @@ -88,10 +71,19 @@ impl<'p> PrgParsed<'p> { ref params, ref bdy, ref typ, - } => env + } => scope .push_iter( params.iter().map(|p| (p.sym, (p.mutable, p.typ.clone()))), - |env| expect_type(bdy, typ.clone(), env), + |scope| { + let mut env = Env { + scope, + loop_type: &mut None, + in_loop: false, + return_type: typ, + }; + + expect_type(bdy, typ.clone(), &mut env) + }, ) .map(|()| (sym, def)), }) @@ -233,6 +225,7 @@ fn type_check_expr<'p>(expr: &Expr<&'p str>, env: &mut Env<'_, 'p>) -> Result(expr: &Expr<&'p str>, env: &mut Env<'_, 'p>) -> Result Ok(Type::Never), Expr::Return { bdy } => { - // TODO: check bdy has type of function! - + expect_type(bdy, env.return_type.clone(), env)?; Ok(Type::Never) - }, + } } } diff --git a/compiler/src/passes/uniquify/uniquify.rs b/compiler/src/passes/uniquify/uniquify.rs index 424f293..c410fc0 100644 --- a/compiler/src/passes/uniquify/uniquify.rs +++ b/compiler/src/passes/uniquify/uniquify.rs @@ -111,6 +111,8 @@ fn uniquify_expression<'p>( bnd: Box::new(uniquify_expression(*bnd, scope)), }, Expr::Continue => Expr::Continue, - Expr::Return { .. } => todo!(), + Expr::Return { bdy } => Expr::Return { + bdy: Box::new(uniquify_expression(*bdy, scope)), + }, } } diff --git a/programs/fail/type_check/bad_return.test b/programs/fail/type_check/bad_return.test new file mode 100644 index 0000000..3c59d62 --- /dev/null +++ b/programs/fail/type_check/bad_return.test @@ -0,0 +1,11 @@ +## +42 +# +fn add(x: Int, y: Int) -> Int { + return true; + 8 +} + +fn main() -> Int { + add(40, 2) +} From 129366180419f9c8008ade00a66e3cbd14506aa0 Mon Sep 17 00:00:00 2001 From: jonathan Date: Mon, 30 Oct 2023 20:50:02 +0100 Subject: [PATCH 16/16] Comments! --- compiler/src/passes/parse/grammar.lalrpop | 6 ++ compiler/src/passes/parse/grammar.rs | 96 ++++++++++--------- programs/good/comments/block_comment.test | 8 ++ .../comments/block_comment_same_line.test | 7 ++ programs/good/comments/line_comment.test | 8 ++ .../good/comments/line_comment_same_line.test | 7 ++ 6 files changed, 85 insertions(+), 47 deletions(-) create mode 100644 programs/good/comments/block_comment.test create mode 100644 programs/good/comments/block_comment_same_line.test create mode 100644 programs/good/comments/line_comment.test create mode 100644 programs/good/comments/line_comment_same_line.test diff --git a/compiler/src/passes/parse/grammar.lalrpop b/compiler/src/passes/parse/grammar.lalrpop index 8ec7bb0..3e0915b 100644 --- a/compiler/src/passes/parse/grammar.lalrpop +++ b/compiler/src/passes/parse/grammar.lalrpop @@ -71,6 +71,12 @@ match { // Whitespaces r"\s+" => {}, + + // Line comments + r"//[^\n]*\n" => {}, + + // Block comments + r"/\*([^*]|(\*[^/]))*\*/" => {}, } pub Program: PrgParsed<'input> = { diff --git a/compiler/src/passes/parse/grammar.rs b/compiler/src/passes/parse/grammar.rs index 0045707..b454373 100644 --- a/compiler/src/passes/parse/grammar.rs +++ b/compiler/src/passes/parse/grammar.rs @@ -1,5 +1,5 @@ // auto-generated: "lalrpop 0.20.1" -// sha3: 462ccf64c64bfc280345ea946b109b904f226d513ae4bbef717d067be19f4bb6 +// sha3: f30dd7abdd74a55517cbc7c3176c903c0fde841baab8bbc3d5efbe9e8c4a8c79 use std::str::FromStr; use crate::passes::parse::{Def, Expr, Lit, Op, Param}; use crate::passes::parse::PrgParsed; @@ -933,51 +933,51 @@ mod __parse__Program { ) -> Option { match *__token { - Token(3, _) if true => Some(0), - Token(4, _) if true => Some(1), - Token(5, _) if true => Some(2), - Token(6, _) if true => Some(3), - Token(7, _) if true => Some(4), - Token(8, _) if true => Some(5), - Token(9, _) if true => Some(6), - Token(10, _) if true => Some(7), - Token(11, _) if true => Some(8), - Token(12, _) if true => Some(9), - Token(13, _) if true => Some(10), - Token(14, _) if true => Some(11), - Token(15, _) if true => Some(12), - Token(16, _) if true => Some(13), - Token(17, _) if true => Some(14), - Token(18, _) if true => Some(15), - Token(19, _) if true => Some(16), - Token(20, _) if true => Some(17), - Token(21, _) if true => Some(18), - Token(22, _) if true => Some(19), - Token(23, _) if true => Some(20), - Token(24, _) if true => Some(21), - Token(25, _) if true => Some(22), - Token(26, _) if true => Some(23), - Token(27, _) if true => Some(24), - Token(28, _) if true => Some(25), - Token(29, _) if true => Some(26), - Token(30, _) if true => Some(27), - Token(31, _) if true => Some(28), - Token(32, _) if true => Some(29), - Token(33, _) if true => Some(30), - Token(34, _) if true => Some(31), - Token(35, _) if true => Some(32), - Token(36, _) if true => Some(33), - Token(37, _) if true => Some(34), - Token(38, _) if true => Some(35), - Token(39, _) if true => Some(36), - Token(40, _) if true => Some(37), - Token(41, _) if true => Some(38), - Token(42, _) if true => Some(39), - Token(43, _) if true => Some(40), - Token(44, _) if true => Some(41), - Token(45, _) if true => Some(42), - Token(0, _) if true => Some(43), - Token(1, _) if true => Some(44), + Token(5, _) if true => Some(0), + Token(6, _) if true => Some(1), + Token(7, _) if true => Some(2), + Token(8, _) if true => Some(3), + Token(9, _) if true => Some(4), + Token(10, _) if true => Some(5), + Token(11, _) if true => Some(6), + Token(12, _) if true => Some(7), + Token(13, _) if true => Some(8), + Token(14, _) if true => Some(9), + Token(15, _) if true => Some(10), + Token(16, _) if true => Some(11), + Token(17, _) if true => Some(12), + Token(18, _) if true => Some(13), + Token(19, _) if true => Some(14), + Token(20, _) if true => Some(15), + Token(21, _) if true => Some(16), + Token(22, _) if true => Some(17), + Token(23, _) if true => Some(18), + Token(24, _) if true => Some(19), + Token(25, _) if true => Some(20), + Token(26, _) if true => Some(21), + Token(27, _) if true => Some(22), + Token(28, _) if true => Some(23), + Token(29, _) if true => Some(24), + Token(30, _) if true => Some(25), + Token(31, _) if true => Some(26), + Token(32, _) if true => Some(27), + Token(33, _) if true => Some(28), + Token(34, _) if true => Some(29), + Token(35, _) if true => Some(30), + Token(36, _) if true => Some(31), + Token(37, _) if true => Some(32), + Token(38, _) if true => Some(33), + Token(39, _) if true => Some(34), + Token(40, _) if true => Some(35), + Token(41, _) if true => Some(36), + Token(42, _) if true => Some(37), + Token(43, _) if true => Some(38), + Token(44, _) if true => Some(39), + Token(45, _) if true => Some(40), + Token(46, _) if true => Some(41), + Token(47, _) if true => Some(42), + Token(2, _) if true => Some(43), + Token(3, _) if true => Some(44), _ => None, } } @@ -991,7 +991,7 @@ mod __parse__Program { { #[allow(clippy::manual_range_patterns)]match __token_index { 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 => match __token { - Token(3, __tok0) | Token(4, __tok0) | Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(0, __tok0) | Token(1, __tok0) if true => __Symbol::Variant0(__tok0), + Token(5, __tok0) | Token(6, __tok0) | Token(7, __tok0) | Token(8, __tok0) | Token(9, __tok0) | Token(10, __tok0) | Token(11, __tok0) | Token(12, __tok0) | Token(13, __tok0) | Token(14, __tok0) | Token(15, __tok0) | Token(16, __tok0) | Token(17, __tok0) | Token(18, __tok0) | Token(19, __tok0) | Token(20, __tok0) | Token(21, __tok0) | Token(22, __tok0) | Token(23, __tok0) | Token(24, __tok0) | Token(25, __tok0) | Token(26, __tok0) | Token(27, __tok0) | Token(28, __tok0) | Token(29, __tok0) | Token(30, __tok0) | Token(31, __tok0) | Token(32, __tok0) | Token(33, __tok0) | Token(34, __tok0) | Token(35, __tok0) | Token(36, __tok0) | Token(37, __tok0) | Token(38, __tok0) | Token(39, __tok0) | Token(40, __tok0) | Token(41, __tok0) | Token(42, __tok0) | Token(43, __tok0) | Token(44, __tok0) | Token(45, __tok0) | Token(46, __tok0) | Token(47, __tok0) | Token(2, __tok0) | Token(3, __tok0) if true => __Symbol::Variant0(__tok0), _ => unreachable!(), }, _ => unreachable!(), @@ -4502,6 +4502,8 @@ mod __intern_token { extern crate alloc; pub fn new_builder() -> __lalrpop_util::lexer::MatcherBuilder { let __strs: &[(&str, bool)] = &[ + ("(?:(?://)[\0-\t\u{b}-\u{10ffff}]*\n)", true), + ("(?:(?:/\\*)((?:[\0-\\)\\+-\u{10ffff}]|((?:\\*[\0-\\.0-\u{10ffff}]))))*(?:\\*/))", true), ("[0-9]+", false), ("(?:[A-Z_a-z][0-9A-Z_a-z]*)", false), ("[\t-\r \u{85}\u{a0}\u{1680}\u{2000}-\u{200a}\u{2028}\u{2029}\u{202f}\u{205f}\u{3000}]+", true), diff --git a/programs/good/comments/block_comment.test b/programs/good/comments/block_comment.test new file mode 100644 index 0000000..d257472 --- /dev/null +++ b/programs/good/comments/block_comment.test @@ -0,0 +1,8 @@ +# +# +42 +# +fn main() -> Int { + /* Return the meaning of life */ + 20 + 22 +} diff --git a/programs/good/comments/block_comment_same_line.test b/programs/good/comments/block_comment_same_line.test new file mode 100644 index 0000000..6c8d9b9 --- /dev/null +++ b/programs/good/comments/block_comment_same_line.test @@ -0,0 +1,7 @@ +# +# +42 +# +fn main() -> Int { + 20 + /* Return the meaning of life */ 22 +} diff --git a/programs/good/comments/line_comment.test b/programs/good/comments/line_comment.test new file mode 100644 index 0000000..ded15c3 --- /dev/null +++ b/programs/good/comments/line_comment.test @@ -0,0 +1,8 @@ +# +# +42 +# +fn main() -> Int { + // Return the meaning of life + 20 + 22 +} diff --git a/programs/good/comments/line_comment_same_line.test b/programs/good/comments/line_comment_same_line.test new file mode 100644 index 0000000..be40800 --- /dev/null +++ b/programs/good/comments/line_comment_same_line.test @@ -0,0 +1,7 @@ +# +# +42 +# +fn main() -> Int { + 20 + 22 // Return the meaning of life +}