diff options
| author | Georg Brandl <georg@python.org> | 2021-01-18 21:24:00 +0100 |
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2021-01-18 22:08:36 +0100 |
| commit | 2a3d3a7d5b9c60dedf6638d876161d9563faebcf (patch) | |
| tree | 809c0b4a686db98f5954afa1944404cd9652c6b2 /tests/lexers/rust/example.txt | |
| parent | f0445be718da83541ea3401aad882f3937147263 (diff) | |
| download | pygments-git-examplefiles.tar.gz | |
Move test_examplefiles to new tests/lexers scheme.examplefiles
Diffstat (limited to 'tests/lexers/rust/example.txt')
| -rw-r--r-- | tests/lexers/rust/example.txt | 7948 |
1 files changed, 7948 insertions, 0 deletions
diff --git a/tests/lexers/rust/example.txt b/tests/lexers/rust/example.txt new file mode 100644 index 00000000..f788cbeb --- /dev/null +++ b/tests/lexers/rust/example.txt @@ -0,0 +1,7948 @@ +---input--- +// ------------------------------------------------------------------------------------------------- +// Rick, a Rust intercal compiler. Save your souls! +// +// Copyright (c) 2015 Georg Brandl +// +// This program is free software; you can redistribute it and/or modify it under the terms of the +// GNU General Public License as published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without +// even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License along with this program; +// if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// ------------------------------------------------------------------------------------------------- + +/// Interprets INTERCAL source. +/// +/// The evaluator is used when rick is called with `-i`, or when the compiler generates +/// the output while compiling (in the constant-output case). + +use std::fmt::{ Debug, Display }; +use std::io::Write; +use std::u16; + +use err::{ Res, IE123, IE129, IE252, IE275, IE555, IE633, IE774, IE994 }; +use ast::{ self, Program, Stmt, StmtBody, ComeFrom, Expr, Var, VType }; +use stdops::{ Bind, Array, write_number, read_number, check_chance, check_ovf, pop_jumps, + get_random_seed, mingle, select, and_16, and_32, or_16, or_32, xor_16, xor_32 }; + + +/// Represents a value (either 16-bit or 32-bit) at runtime. +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum Val { + I16(u16), + I32(u32), +} + +impl Val { + /// Cast as a 16-bit value; returns an error if 32-bit and too big. + pub fn as_u16(&self) -> Res<u16> { + match *self { + Val::I16(v) => Ok(v), + Val::I32(v) => { + if v > (u16::MAX as u32) { + return IE275.err(); + } + Ok(v as u16) + } + } + } + + /// Cast as a 32-bit value; always succeeds. + pub fn as_u32(&self) -> u32 { + match *self { + Val::I16(v) => v as u32, + Val::I32(v) => v + } + } + + /// Cast as an usize value; always succeeds. + pub fn as_usize(&self) -> usize { + self.as_u32() as usize + } + + /// Create from a 32-bit value; will select the smallest possible type. + pub fn from_u32(v: u32) -> Val { + if v & 0xFFFF == v { + Val::I16(v as u16) + } else { + Val::I32(v) + } + } +} + +/// The state of the interpreter's evaluator. +pub struct Eval<'a> { + /// Program to execute. + program: &'a Program, + /// Stream to use for printing output. + stdout: &'a mut Write, + /// Whether to print debugging output during execution. + debug: bool, + /// Variable bindings for the four types of variables. + spot: Vec<Bind<u16>>, + twospot: Vec<Bind<u32>>, + tail: Vec<Bind<Array<u16>>>, + hybrid: Vec<Bind<Array<u32>>>, + /// The infamous NEXT stack, capable of holding 80 elements. + jumps: Vec<ast::LogLine>, + /// Abstain counter for each statement. + abstain: Vec<u32>, + /// Binary I/O "tape" state. + last_in: u8, + last_out: u8, + /// Random number generator state. + rand_st: u32, + /// Counts the number of executed statements. + stmt_ctr: usize, +} + +/// Represents the control flow effect of an executed statement. +enum StmtRes { + /// normal execution, next statement + Next, + /// jump around, from DO ... NEXT + Jump(usize), + /// jump back, from RESUME + Back(usize), + /// start from the first statement, from TRY AGAIN + FromTop, + /// end the program, from GIVE UP + End, +} + +impl<'a> Eval<'a> { + /// Construct a new evaluator. + pub fn new(program: &'a Program, stdout: &'a mut Write, debug: bool, + random: bool) -> Eval<'a> { + let abs = program.stmts.iter().map(|stmt| stmt.props.disabled as u32).collect(); + let nvars = (program.var_info.0.len(), + program.var_info.1.len(), + program.var_info.2.len(), + program.var_info.3.len()); + Eval { + program: program, + stdout: stdout, + debug: debug, + spot: vec![Bind::new(0); nvars.0], + twospot: vec![Bind::new(0); nvars.1], + tail: vec![Bind::new(Array::empty()); nvars.2], + hybrid: vec![Bind::new(Array::empty()); nvars.3], + jumps: Vec::with_capacity(80), + rand_st: if random { get_random_seed() } else { 0 }, + abstain: abs, + last_in: 0, + last_out: 0, + stmt_ctr: 0, + } + } + + /// Interpret the program. Returns either the number of executed statements, + /// or an error (RtError). + pub fn eval(&mut self) -> Res<usize> { + let mut pctr = 0; // index of current statement + let program = self.program.clone(); + let nstmts = program.stmts.len(); + loop { + // check for falling off the end + if pctr >= nstmts { + // if the last statement was a TRY AGAIN, falling off the end is fine + if let StmtBody::TryAgain = program.stmts[program.stmts.len() - 1].body { + break; + } + return IE633.err(); + } + self.stmt_ctr += 1; + let stmt = &program.stmts[pctr]; + // execute statement if not abstained + if self.abstain[pctr] == 0 { + // check execution chance + let (passed, rand_st) = check_chance(stmt.props.chance, self.rand_st); + self.rand_st = rand_st; + if passed { + // try to eval this statement + let res = match self.eval_stmt(stmt) { + // on error, set the correct line number and bubble up + Err(mut err) => { + err.set_line(stmt.props.onthewayto); + // special treatment for NEXT + if let StmtBody::DoNext(n) = stmt.body { + if let Some(i) = program.labels.get(&n) { + err.set_line(program.stmts[*i as usize].props.srcline); + } + } + return Err(err); + } + Ok(res) => res + }; + // handle control flow effects + match res { + StmtRes::Next => { } + StmtRes::Jump(n) => { + self.jumps.push(pctr as u16); // push the line with the NEXT + pctr = n; + continue; // do not increment or check for COME FROMs + } + StmtRes::Back(n) => { + pctr = n; // will be incremented below after COME FROM check + } + StmtRes::FromTop => { + pctr = 0; // start from the beginning, do not push any stack + continue; + } + StmtRes::End => break, + } + } + } + // if we are on the line with the compiler bug, error out + if pctr == self.program.bugline as usize { + return IE774.err_with(None, stmt.props.onthewayto); + } + // try to determine if we have to go to a COME FROM statement + // (note: in general, program.stmts[pctr] != stmt) + // + // the static COME FROM is always a possibility + let mut maybe_next = program.stmts[pctr].comefrom; + // the complicated case: evaluate all computed-come-from expressions + let my_label = program.stmts[pctr].props.label; + if program.uses_complex_comefrom && my_label > 0 { + for (i, stmt) in program.stmts.iter().enumerate() { + if let StmtBody::ComeFrom(ComeFrom::Expr(ref e)) = stmt.body { + let v = try!(try!(self.eval_expr(e)).as_u16()); + if v == my_label { + // as soon as we have multiple candidates, we can bail out + if maybe_next.is_some() { + return IE555.err(); + } + maybe_next = Some(i as u16); + } + } + } + } + // check for COME FROMs from this line + if let Some(next) = maybe_next { + let next = next as usize; + // check for abstained COME FROM + if self.abstain[next] == 0 { + // the COME FROM can also have a % chance + let (passed, rand_st) = check_chance(program.stmts[next].props.chance, + self.rand_st); + self.rand_st = rand_st; + if passed { + pctr = next; + continue; + } + } + } + // no COME FROM, normal execution + pctr += 1; + } + Ok(self.stmt_ctr) + } + + /// Interpret a single statement. + fn eval_stmt(&mut self, stmt: &Stmt) -> Res<StmtRes> { + if self.debug { + println!("\nExecuting Stmt #{} (state before following)", self.stmt_ctr); + self.dump_state(); + println!("{}", stmt); + } + match stmt.body { + StmtBody::Calc(ref var, ref expr) => { + let val = try!(self.eval_expr(expr)); + try!(self.assign(var, val)); + Ok(StmtRes::Next) + } + StmtBody::Dim(ref var, ref exprs) => { + try!(self.array_dim(var, exprs)); + Ok(StmtRes::Next) + } + StmtBody::DoNext(n) => { + match self.program.labels.get(&n) { + // too many jumps on stack already? + Some(_) if self.jumps.len() >= 80 => IE123.err(), + Some(i) => Ok(StmtRes::Jump(*i as usize)), + None => IE129.err(), + } + } + StmtBody::ComeFrom(_) => { + // nothing to do here at runtime + Ok(StmtRes::Next) + } + StmtBody::Resume(ref expr) => { + let n = try!(self.eval_expr(expr)).as_u32(); + // this expect() is safe: if the third arg is true, there will + // be no Ok(None) returns + let next = try!(pop_jumps(&mut self.jumps, n, true, 0)) + .expect("https://xkcd.com/378/ ?!"); + Ok(StmtRes::Back(next as usize)) + } + StmtBody::Forget(ref expr) => { + let n = try!(self.eval_expr(expr)).as_u32(); + try!(pop_jumps(&mut self.jumps, n, false, 0)); + Ok(StmtRes::Next) + } + StmtBody::Ignore(ref vars) => { + for var in vars { + self.set_rw(var, false); + } + Ok(StmtRes::Next) + } + StmtBody::Remember(ref vars) => { + for var in vars { + self.set_rw(var, true); + } + Ok(StmtRes::Next) + } + StmtBody::Stash(ref vars) => { + for var in vars { + self.stash(var); + } + Ok(StmtRes::Next) + } + StmtBody::Retrieve(ref vars) => { + for var in vars { + try!(self.retrieve(var)); + } + Ok(StmtRes::Next) + } + StmtBody::Abstain(ref expr, ref whats) => { + let f: Box<Fn(u32) -> u32> = if let Some(ref e) = *expr { + let n = try!(self.eval_expr(e)).as_u32(); + box move |v: u32| v.saturating_add(n) + } else { + box |_| 1 + }; + for what in whats { + self.abstain(what, &*f); + } + Ok(StmtRes::Next) + } + StmtBody::Reinstate(ref whats) => { + for what in whats { + self.abstain(what, &|v: u32| v.saturating_sub(1)); + } + Ok(StmtRes::Next) + } + StmtBody::ReadOut(ref vars) => { + for var in vars { + match *var { + // read out whole array + Expr::Var(ref var) if var.is_dim() => { + try!(self.array_readout(var)); + } + // read out single var or array element + Expr::Var(ref var) => { + let varval = try!(self.lookup(var)); + try!(write_number(self.stdout, varval.as_u32(), 0)); + } + // read out constant + Expr::Num(_, v) => try!(write_number(self.stdout, v, 0)), + // others will not be generated + _ => return IE994.err(), + }; + } + Ok(StmtRes::Next) + } + StmtBody::WriteIn(ref vars) => { + for var in vars { + if var.is_dim() { + // write in whole array + try!(self.array_writein(var)); + } else { + // write in single var or array element + let n = try!(read_number(0)); + try!(self.assign(var, Val::from_u32(n))); + } + } + Ok(StmtRes::Next) + } + // this one is only generated by the constant-program optimizer + StmtBody::Print(ref s) => { + if let Err(_) = self.stdout.write(&s) { + return IE252.err(); + } + Ok(StmtRes::Next) + } + StmtBody::TryAgain => Ok(StmtRes::FromTop), + StmtBody::GiveUp => Ok(StmtRes::End), + StmtBody::Error(ref e) => Err((*e).clone()), + } + } + + /// Evaluate an expression to a value. + fn eval_expr(&self, expr: &Expr) -> Res<Val> { + match *expr { + Expr::Num(vtype, v) => match vtype { + VType::I16 => Ok(Val::I16(v as u16)), + VType::I32 => Ok(Val::I32(v)), + }, + Expr::Var(ref var) => self.lookup(var), + Expr::Mingle(ref vx, ref wx) => { + let v = try!(self.eval_expr(vx)).as_u32(); + let w = try!(self.eval_expr(wx)).as_u32(); + let v = try!(check_ovf(v, 0)); + let w = try!(check_ovf(w, 0)); + Ok(Val::I32(mingle(v, w))) + } + Expr::Select(vtype, ref vx, ref wx) => { + let v = try!(self.eval_expr(vx)); + let w = try!(self.eval_expr(wx)); + if vtype == VType::I16 { + Ok(Val::I16(select(v.as_u32(), try!(w.as_u16()) as u32) as u16)) + } else { + Ok(Val::I32(select(v.as_u32(), w.as_u32()))) + } + } + Expr::And(vtype, ref vx) => { + let v = try!(self.eval_expr(vx)); + match vtype { + VType::I16 => Ok(Val::I16(and_16(try!(v.as_u16()) as u32) as u16)), + VType::I32 => Ok(Val::I32(and_32(v.as_u32()))), + } + } + Expr::Or(vtype, ref vx) => { + let v = try!(self.eval_expr(vx)); + match vtype { + VType::I16 => Ok(Val::I16(or_16(try!(v.as_u16()) as u32) as u16)), + VType::I32 => Ok(Val::I32(or_32(v.as_u32()))), + } + } + Expr::Xor(vtype, ref vx) => { + let v = try!(self.eval_expr(vx)); + match vtype { + VType::I16 => Ok(Val::I16(xor_16(try!(v.as_u16()) as u32) as u16)), + VType::I32 => Ok(Val::I32(xor_32(v.as_u32()))), + } + } + Expr::RsNot(ref vx) => { + let v = try!(self.eval_expr(vx)); + Ok(Val::I32(!v.as_u32())) + } + Expr::RsAnd(ref vx, ref wx) => { + let v = try!(self.eval_expr(vx)); + let w = try!(self.eval_expr(wx)); + Ok(Val::I32(v.as_u32() & w.as_u32())) + } + Expr::RsOr(ref vx, ref wx) => { + let v = try!(self.eval_expr(vx)); + let w = try!(self.eval_expr(wx)); + Ok(Val::I32(v.as_u32() | w.as_u32())) + } + Expr::RsXor(ref vx, ref wx) => { + let v = try!(self.eval_expr(vx)); + let w = try!(self.eval_expr(wx)); + Ok(Val::I32(v.as_u32() ^ w.as_u32())) + } + Expr::RsRshift(ref vx, ref wx) => { + let v = try!(self.eval_expr(vx)); + let w = try!(self.eval_expr(wx)); + Ok(Val::I32(v.as_u32() >> w.as_u32())) + } + Expr::RsLshift(ref vx, ref wx) => { + let v = try!(self.eval_expr(vx)); + let w = try!(self.eval_expr(wx)); + Ok(Val::I32(v.as_u32() << w.as_u32())) + } + // Expr::RsEqual(ref vx, ref wx) => { + // let v = try!(self.eval_expr(vx)); + // let w = try!(self.eval_expr(wx)); + // Ok(Val::I32((v.as_u32() == w.as_u32()) as u32)) + // } + Expr::RsNotEqual(ref vx, ref wx) => { + let v = try!(self.eval_expr(vx)); + let w = try!(self.eval_expr(wx)); + Ok(Val::I32((v.as_u32() != w.as_u32()) as u32)) + } + Expr::RsPlus(ref vx, ref wx) => { + let v = try!(self.eval_expr(vx)); + let w = try!(self.eval_expr(wx)); + Ok(Val::I32(v.as_u32() + w.as_u32())) + } + Expr::RsMinus(ref vx, ref wx) => { + let v = try!(self.eval_expr(vx)); + let w = try!(self.eval_expr(wx)); + Ok(Val::I32(v.as_u32() - w.as_u32())) + } + } + } + + #[inline] + fn eval_subs(&self, subs: &Vec<Expr>) -> Res<Vec<usize>> { + subs.iter().map(|v| self.eval_expr(v).map(|w| w.as_usize())).collect() + } + + /// Dimension an array. + fn array_dim(&mut self, var: &Var, dims: &Vec<Expr>) -> Res<()> { + let dims = try!(self.eval_subs(dims)); + match *var { + Var::A16(n, _) => self.tail[n].dimension(dims, 0), + Var::A32(n, _) => self.hybrid[n].dimension(dims, 0), + _ => return IE994.err(), + } + } + + /// Assign to a variable. + fn assign(&mut self, var: &Var, val: Val) -> Res<()> { + match *var { + Var::I16(n) => Ok(self.spot[n].assign(try!(val.as_u16()))), + Var::I32(n) => Ok(self.twospot[n].assign(val.as_u32())), + Var::A16(n, ref subs) => { + let subs = try!(self.eval_subs(subs)); + self.tail[n].set_md(subs, try!(val.as_u16()), 0) + } + Var::A32(n, ref subs) => { + let subs = try!(self.eval_subs(subs)); + self.hybrid[n].set_md(subs, val.as_u32(), 0) + } + } + } + + /// Look up the value of a variable. + fn lookup(&self, var: &Var) -> Res<Val> { + match *var { + Var::I16(n) => Ok(Val::I16(self.spot[n].val)), + Var::I32(n) => Ok(Val::I32(self.twospot[n].val)), + Var::A16(n, ref subs) => { + let subs = try!(self.eval_subs(subs)); + self.tail[n].get_md(subs, 0).map(Val::I16) + } + Var::A32(n, ref subs) => { + let subs = try!(self.eval_subs(subs)); + self.hybrid[n].get_md(subs, 0).map(Val::I32) + } + } + } + + /// Process a STASH statement. + fn stash(&mut self, var: &Var) { + match *var { + Var::I16(n) => self.spot[n].stash(), + Var::I32(n) => self.twospot[n].stash(), + Var::A16(n, _) => self.tail[n].stash(), + Var::A32(n, _) => self.hybrid[n].stash(), + } + } + + /// Process a RETRIEVE statement. + fn retrieve(&mut self, var: &Var) -> Res<()> { + match *var { + Var::I16(n) => self.spot[n].retrieve(0), + Var::I32(n) => self.twospot[n].retrieve(0), + Var::A16(n, _) => self.tail[n].retrieve(0), + Var::A32(n, _) => self.hybrid[n].retrieve(0), + } + } + + /// Process an IGNORE or REMEMBER statement. Cannot fail. + fn set_rw(&mut self, var: &Var, rw: bool) { + match *var { + Var::I16(n) => self.spot[n].rw = rw, + Var::I32(n) => self.twospot[n].rw = rw, + Var::A16(n, _) => self.tail[n].rw = rw, + Var::A32(n, _) => self.hybrid[n].rw = rw, + } + } + + /// P()rocess an ABSTAIN or REINSTATE statement. Cannot fail. + fn abstain(&mut self, what: &ast::Abstain, f: &Fn(u32) -> u32) { + if let &ast::Abstain::Label(lbl) = what { + let idx = self.program.labels[&lbl] as usize; + if self.program.stmts[idx].body != StmtBody::GiveUp { + self.abstain[idx] = f(self.abstain[idx]); + } + } else { + for (i, stype) in self.program.stmt_types.iter().enumerate() { + if stype == what { + self.abstain[i] = f(self.abstain[i]); + } + } + } + } + + /// Array readout helper. + fn array_readout(&mut self, var: &Var) -> Res<()> { + let state = &mut self.last_out; + match *var { + Var::A16(n, _) => self.tail[n].readout(self.stdout, state, 0), + Var::A32(n, _) => self.hybrid[n].readout(self.stdout, state, 0), + _ => return IE994.err(), + } + } + + /// Array writein helper. + fn array_writein(&mut self, var: &Var) -> Res<()> { + let state = &mut self.last_in; + match *var { + Var::A16(n, _) => self.tail[n].writein(state, 0), + Var::A32(n, _) => self.hybrid[n].writein(state, 0), + _ => return IE994.err(), + } + } + + /// Debug helpers. + fn dump_state(&self) { + self.dump_state_one(&self.spot, "."); + self.dump_state_one(&self.twospot, ":"); + self.dump_state_one(&self.tail, ","); + self.dump_state_one(&self.hybrid, ";"); + if self.jumps.len() > 0 { + println!("Next stack: {:?}", self.jumps); + } + //println!("Abstained: {:?}", self.abstain); + } + + fn dump_state_one<T: Debug + Display>(&self, vec: &Vec<Bind<T>>, sigil: &str) { + if vec.len() > 0 { + for (i, v) in vec.iter().enumerate() { + print!("{}{} = {}, ", sigil, i, v); + } + println!(""); + } + } +} + +---tokens--- +'// -------------------------------------------------------------------------------------------------\n' Comment.Single + +'// Rick, a Rust intercal compiler. Save your souls!\n' Comment.Single + +'//\n' Comment.Single + +'// Copyright (c) 2015 Georg Brandl\n' Comment.Single + +'//\n' Comment.Single + +'// This program is free software; you can redistribute it and/or modify it under the terms of the\n' Comment.Single + +'// GNU General Public License as published by the Free Software Foundation; either version 2 of the\n' Comment.Single + +'// License, or (at your option) any later version.\n' Comment.Single + +'//\n' Comment.Single + +'// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without\n' Comment.Single + +'// even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n' Comment.Single + +'// General Public License for more details.\n' Comment.Single + +'//\n' Comment.Single + +'// You should have received a copy of the GNU General Public License along with this program;\n' Comment.Single + +'// if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n' Comment.Single + +'// -------------------------------------------------------------------------------------------------\n' Comment.Single + +'\n' Text.Whitespace + +'/// Interprets INTERCAL source.\n' Literal.String.Doc + +'///\n' Literal.String.Doc + +'/// The evaluator is used when rick is called with `-i`, or when the compiler generates\n' Literal.String.Doc + +'/// the output while compiling (in the constant-output case).\n' Literal.String.Doc + +'\n' Text.Whitespace + +'use' Keyword +' ' Text.Whitespace +'std' Name +'::' Text +'fmt' Name +':' Text +':' Text +'{' Punctuation +' ' Text.Whitespace +'Debug' Name +',' Punctuation +' ' Text.Whitespace +'Display' Name +' ' Text.Whitespace +'}' Punctuation +';' Punctuation +'\n' Text.Whitespace + +'use' Keyword +' ' Text.Whitespace +'std' Name +'::' Text +'io' Name +'::' Text +'Write' Name +';' Punctuation +'\n' Text.Whitespace + +'use' Keyword +' ' Text.Whitespace +'std' Name +'::' Text +'u16' Keyword.Type +';' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +'use' Keyword +' ' Text.Whitespace +'err' Name +':' Text +':' Text +'{' Punctuation +' ' Text.Whitespace +'Res' Name +',' Punctuation +' ' Text.Whitespace +'IE123' Name +',' Punctuation +' ' Text.Whitespace +'IE129' Name +',' Punctuation +' ' Text.Whitespace +'IE252' Name +',' Punctuation +' ' Text.Whitespace +'IE275' Name +',' Punctuation +' ' Text.Whitespace +'IE555' Name +',' Punctuation +' ' Text.Whitespace +'IE633' Name +',' Punctuation +' ' Text.Whitespace +'IE774' Name +',' Punctuation +' ' Text.Whitespace +'IE994' Name +' ' Text.Whitespace +'}' Punctuation +';' Punctuation +'\n' Text.Whitespace + +'use' Keyword +' ' Text.Whitespace +'ast' Name +':' Text +':' Text +'{' Punctuation +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +',' Punctuation +' ' Text.Whitespace +'Program' Name +',' Punctuation +' ' Text.Whitespace +'Stmt' Name +',' Punctuation +' ' Text.Whitespace +'StmtBody' Name +',' Punctuation +' ' Text.Whitespace +'ComeFrom' Name +',' Punctuation +' ' Text.Whitespace +'Expr' Name +',' Punctuation +' ' Text.Whitespace +'Var' Name +',' Punctuation +' ' Text.Whitespace +'VType' Name +' ' Text.Whitespace +'}' Punctuation +';' Punctuation +'\n' Text.Whitespace + +'use' Keyword +' ' Text.Whitespace +'stdops' Name +':' Text +':' Text +'{' Punctuation +' ' Text.Whitespace +'Bind' Name +',' Punctuation +' ' Text.Whitespace +'Array' Name +',' Punctuation +' ' Text.Whitespace +'write_number' Name +',' Punctuation +' ' Text.Whitespace +'read_number' Name +',' Punctuation +' ' Text.Whitespace +'check_chance' Name +',' Punctuation +' ' Text.Whitespace +'check_ovf' Name +',' Punctuation +' ' Text.Whitespace +'pop_jumps' Name +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'get_random_seed' Name +',' Punctuation +' ' Text.Whitespace +'mingle' Name +',' Punctuation +' ' Text.Whitespace +'select' Name +',' Punctuation +' ' Text.Whitespace +'and_16' Name +',' Punctuation +' ' Text.Whitespace +'and_32' Name +',' Punctuation +' ' Text.Whitespace +'or_16' Name +',' Punctuation +' ' Text.Whitespace +'or_32' Name +',' Punctuation +' ' Text.Whitespace +'xor_16' Name +',' Punctuation +' ' Text.Whitespace +'xor_32' Name +' ' Text.Whitespace +'}' Punctuation +';' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +'\n' Text.Whitespace + +'/// Represents a value (either 16-bit or 32-bit) at runtime.\n' Literal.String.Doc + +'#[' Comment.Preproc +'derive(Clone, PartialEq, Eq, Debug)' Comment.Preproc +']' Comment.Preproc +'\n' Text.Whitespace + +'pub' Keyword +' ' Text.Whitespace +'enum' Keyword +' ' Text +'Val' Name.Class +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'I16' Name +'(' Punctuation +'u16' Keyword.Type +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'I32' Name +'(' Punctuation +'u32' Keyword.Type +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +'impl' Keyword +' ' Text.Whitespace +'Val' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Cast as a 16-bit value; returns an error if 32-bit and too big.\n' Literal.String.Doc + +' ' Text.Whitespace +'pub' Keyword +' ' Text.Whitespace +'fn' Keyword +' ' Text +'as_u16' Name.Function +'(' Punctuation +'&' Operator +'self' Name.Builtin.Pseudo +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'Res' Name.Class +'<' Operator +'u16' Keyword.Type +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'*' Operator +'self' Name.Builtin.Pseudo +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Val' Name +'::' Text +'I16' Name +'(' Punctuation +'v' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'v' Name +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'v' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'>' Operator +' ' Text.Whitespace +'(' Punctuation +'u16' Keyword.Type +'::' Text +'MAX' Name +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u32' Keyword.Type +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'return' Keyword +' ' Text.Whitespace +'IE275' Name +'.' Punctuation +'err' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'v' Name +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u16' Keyword.Type +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Cast as a 32-bit value; always succeeds.\n' Literal.String.Doc + +' ' Text.Whitespace +'pub' Keyword +' ' Text.Whitespace +'fn' Keyword +' ' Text +'as_u32' Name.Function +'(' Punctuation +'&' Operator +'self' Name.Builtin.Pseudo +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'u32' Keyword.Type +' ' Text +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'*' Operator +'self' Name.Builtin.Pseudo +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Val' Name +'::' Text +'I16' Name +'(' Punctuation +'v' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u32' Keyword.Type +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'v' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'v' Name +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Cast as an usize value; always succeeds.\n' Literal.String.Doc + +' ' Text.Whitespace +'pub' Keyword +' ' Text.Whitespace +'fn' Keyword +' ' Text +'as_usize' Name.Function +'(' Punctuation +'&' Operator +'self' Name.Builtin.Pseudo +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'usize' Keyword.Type +' ' Text +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'usize' Keyword.Type +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Create from a 32-bit value; will select the smallest possible type.\n' Literal.String.Doc + +' ' Text.Whitespace +'pub' Keyword +' ' Text.Whitespace +'fn' Keyword +' ' Text +'from_u32' Name.Function +'(' Punctuation +'v' Name +':' Text +' ' Text +'u32' Keyword.Type +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'Val' Name.Class +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'&' Operator +' ' Text.Whitespace +'0xFFFF' Literal.Number.Hex +' ' Text.Whitespace +'=' Operator +'=' Operator +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Val' Name +'::' Text +'I16' Name +'(' Punctuation +'v' Name +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u16' Keyword.Type +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +' ' Text.Whitespace +'else' Keyword +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'v' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +"/// The state of the interpreter's evaluator.\n" Literal.String.Doc + +'pub' Keyword +' ' Text.Whitespace +'struct' Keyword +' ' Text +'Eval' Name.Class +'<' Operator +"'" Operator +'a' Name.Attribute +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Program to execute.\n' Literal.String.Doc + +' ' Text.Whitespace +'program' Name +':' Text +' ' Text +'&' Keyword.Pseudo +"'" Operator +'a' Name.Attribute +' ' Text +'Program' Name.Class +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Stream to use for printing output.\n' Literal.String.Doc + +' ' Text.Whitespace +'stdout' Name +':' Text +' ' Text +'&' Keyword.Pseudo +"'" Operator +'a' Name.Attribute +' ' Text +'mut' Name.Class +' ' Text.Whitespace +'Write' Name +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Whether to print debugging output during execution.\n' Literal.String.Doc + +' ' Text.Whitespace +'debug' Name +':' Text +' ' Text +'bool' Keyword.Type +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Variable bindings for the four types of variables.\n' Literal.String.Doc + +' ' Text.Whitespace +'spot' Name +':' Text +' ' Text +'Vec' Name.Builtin +'<' Operator +'Bind' Name +'<' Operator +'u16' Keyword.Type +'>' Operator +'>' Operator +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'twospot' Name +':' Text +' ' Text +'Vec' Name.Builtin +'<' Operator +'Bind' Name +'<' Operator +'u32' Keyword.Type +'>' Operator +'>' Operator +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'tail' Name +':' Text +' ' Text +'Vec' Name.Builtin +'<' Operator +'Bind' Name +'<' Operator +'Array' Name +'<' Operator +'u16' Keyword.Type +'>' Operator +'>' Operator +'>' Operator +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'hybrid' Name +':' Text +' ' Text +'Vec' Name.Builtin +'<' Operator +'Bind' Name +'<' Operator +'Array' Name +'<' Operator +'u32' Keyword.Type +'>' Operator +'>' Operator +'>' Operator +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// The infamous NEXT stack, capable of holding 80 elements.\n' Literal.String.Doc + +' ' Text.Whitespace +'jumps' Name +':' Text +' ' Text +'Vec' Name.Builtin +'<' Operator +'ast' Name +'::' Text +'LogLine' Name +'>' Operator +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Abstain counter for each statement.\n' Literal.String.Doc + +' ' Text.Whitespace +'abstain' Name +':' Text +' ' Text +'Vec' Name.Builtin +'<' Operator +'u32' Keyword.Type +'>' Operator +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Binary I/O "tape" state.\n' Literal.String.Doc + +' ' Text.Whitespace +'last_in' Name +':' Text +' ' Text +'u8' Keyword.Type +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'last_out' Name +':' Text +' ' Text +'u8' Keyword.Type +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Random number generator state.\n' Literal.String.Doc + +' ' Text.Whitespace +'rand_st' Name +':' Text +' ' Text +'u32' Keyword.Type +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Counts the number of executed statements.\n' Literal.String.Doc + +' ' Text.Whitespace +'stmt_ctr' Name +':' Text +' ' Text +'usize' Keyword.Type +',' Punctuation +'\n' Text.Whitespace + +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +'/// Represents the control flow effect of an executed statement.\n' Literal.String.Doc + +'enum' Keyword +' ' Text +'StmtRes' Name.Class +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// normal execution, next statement\n' Literal.String.Doc + +' ' Text.Whitespace +'Next' Name +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// jump around, from DO ... NEXT\n' Literal.String.Doc + +' ' Text.Whitespace +'Jump' Name +'(' Punctuation +'usize' Keyword.Type +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// jump back, from RESUME\n' Literal.String.Doc + +' ' Text.Whitespace +'Back' Name +'(' Punctuation +'usize' Keyword.Type +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// start from the first statement, from TRY AGAIN\n' Literal.String.Doc + +' ' Text.Whitespace +'FromTop' Name +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// end the program, from GIVE UP\n' Literal.String.Doc + +' ' Text.Whitespace +'End' Name +',' Punctuation +'\n' Text.Whitespace + +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +'impl' Keyword +'<' Operator +"'" Operator +'a' Name.Attribute +'>' Operator +' ' Text.Whitespace +'Eval' Name +'<' Operator +"'" Operator +'a' Name.Attribute +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Construct a new evaluator.\n' Literal.String.Doc + +' ' Text.Whitespace +'pub' Keyword +' ' Text.Whitespace +'fn' Keyword +' ' Text +'new' Name.Function +'(' Punctuation +'program' Name +':' Text +' ' Text +'&' Keyword.Pseudo +"'" Operator +'a' Name.Attribute +' ' Text +'Program' Name.Class +',' Punctuation +' ' Text.Whitespace +'stdout' Name +':' Text +' ' Text +'&' Keyword.Pseudo +"'" Operator +'a' Name.Attribute +' ' Text +'mut' Name.Class +' ' Text.Whitespace +'Write' Name +',' Punctuation +' ' Text.Whitespace +'debug' Name +':' Text +' ' Text +'bool' Keyword.Type +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'random' Name +':' Text +' ' Text +'bool' Keyword.Type +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'Eval' Name.Class +'<' Operator +"'" Operator +'a' Name.Attribute +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'abs' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'program' Name +'.' Punctuation +'stmts' Name +'.' Punctuation +'iter' Name +'(' Punctuation +')' Punctuation +'.' Punctuation +'map' Name +'(' Punctuation +'|' Operator +'stmt' Name +'|' Operator +' ' Text.Whitespace +'stmt' Name +'.' Punctuation +'props' Name +'.' Punctuation +'disabled' Name +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u32' Keyword.Type +')' Punctuation +'.' Punctuation +'collect' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'nvars' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'(' Punctuation +'program' Name +'.' Punctuation +'var_info' Name +'.' Punctuation +'0.' Literal.Number.Float +'len' Name +'(' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'program' Name +'.' Punctuation +'var_info' Name +'.' Punctuation +'1.' Literal.Number.Float +'len' Name +'(' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'program' Name +'.' Punctuation +'var_info' Name +'.' Punctuation +'2.' Literal.Number.Float +'len' Name +'(' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'program' Name +'.' Punctuation +'var_info' Name +'.' Punctuation +'3.' Literal.Number.Float +'len' Name +'(' Punctuation +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Eval' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'program' Name +':' Text +' ' Text +'program' Name.Class +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'stdout' Name +':' Text +' ' Text +'stdout' Name.Class +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'debug' Name +':' Text +' ' Text +'debug' Name.Class +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'spot' Name +':' Text +' ' Text +'vec' Name.Class +'!' Operator +'[' Punctuation +'Bind' Name +'::' Text +'new' Name +'(' Punctuation +'0' Literal.Number.Integer +')' Punctuation +';' Punctuation +' ' Text.Whitespace +'nvars' Name +'.' Punctuation +'0' Literal.Number.Integer +']' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'twospot' Name +':' Text +' ' Text +'vec' Name.Class +'!' Operator +'[' Punctuation +'Bind' Name +'::' Text +'new' Name +'(' Punctuation +'0' Literal.Number.Integer +')' Punctuation +';' Punctuation +' ' Text.Whitespace +'nvars' Name +'.' Punctuation +'1' Literal.Number.Integer +']' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'tail' Name +':' Text +' ' Text +'vec' Name.Class +'!' Operator +'[' Punctuation +'Bind' Name +'::' Text +'new' Name +'(' Punctuation +'Array' Name +'::' Text +'empty' Name +'(' Punctuation +')' Punctuation +')' Punctuation +';' Punctuation +' ' Text.Whitespace +'nvars' Name +'.' Punctuation +'2' Literal.Number.Integer +']' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'hybrid' Name +':' Text +' ' Text +'vec' Name.Class +'!' Operator +'[' Punctuation +'Bind' Name +'::' Text +'new' Name +'(' Punctuation +'Array' Name +'::' Text +'empty' Name +'(' Punctuation +')' Punctuation +')' Punctuation +';' Punctuation +' ' Text.Whitespace +'nvars' Name +'.' Punctuation +'3' Literal.Number.Integer +']' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'jumps' Name +':' Text +' ' Text +'Vec' Name.Builtin +'::' Text +'with_capacity' Name +'(' Punctuation +'80' Literal.Number.Integer +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'rand_st' Name +':' Text +' ' Text +'if' Name.Class +' ' Text.Whitespace +'random' Name +' ' Text.Whitespace +'{' Punctuation +' ' Text.Whitespace +'get_random_seed' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'}' Punctuation +' ' Text.Whitespace +'else' Keyword +' ' Text.Whitespace +'{' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +' ' Text.Whitespace +'}' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'abstain' Name +':' Text +' ' Text +'abs' Name.Class +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'last_in' Name +':' Text +' ' Text +'0' Literal.Number.Integer +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'last_out' Name +':' Text +' ' Text +'0' Literal.Number.Integer +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'stmt_ctr' Name +':' Text +' ' Text +'0' Literal.Number.Integer +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Interpret the program. Returns either the number of executed statements,\n' Literal.String.Doc + +' ' Text.Whitespace +'/// or an error (RtError).\n' Literal.String.Doc + +' ' Text.Whitespace +'pub' Keyword +' ' Text.Whitespace +'fn' Keyword +' ' Text +'eval' Name.Function +'(' Punctuation +'&' Operator +'mut' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'Res' Name.Class +'<' Operator +'usize' Keyword.Type +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'mut' Keyword +' ' Text.Whitespace +'pctr' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'0' Literal.Number.Integer +';' Punctuation +' ' Text.Whitespace +'// index of current statement\n' Comment.Single + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'program' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'program' Name +'.' Punctuation +'clone' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'nstmts' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'program' Name +'.' Punctuation +'stmts' Name +'.' Punctuation +'len' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'loop' Keyword +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// check for falling off the end\n' Comment.Single + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'pctr' Name +' ' Text.Whitespace +'>' Operator +'=' Operator +' ' Text.Whitespace +'nstmts' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// if the last statement was a TRY AGAIN, falling off the end is fine\n' Comment.Single + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'TryAgain' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'program' Name +'.' Punctuation +'stmts' Name +'[' Punctuation +'program' Name +'.' Punctuation +'stmts' Name +'.' Punctuation +'len' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'-' Operator +' ' Text.Whitespace +'1' Literal.Number.Integer +']' Punctuation +'.' Punctuation +'body' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'break' Keyword +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'return' Keyword +' ' Text.Whitespace +'IE633' Name +'.' Punctuation +'err' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'stmt_ctr' Name +' ' Text.Whitespace +'+' Operator +'=' Operator +' ' Text.Whitespace +'1' Literal.Number.Integer +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'stmt' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'&' Operator +'program' Name +'.' Punctuation +'stmts' Name +'[' Punctuation +'pctr' Name +']' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// execute statement if not abstained\n' Comment.Single + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'abstain' Name +'[' Punctuation +'pctr' Name +']' Punctuation +' ' Text.Whitespace +'=' Operator +'=' Operator +' ' Text.Whitespace +'0' Literal.Number.Integer +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// check execution chance\n' Comment.Single + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'(' Punctuation +'passed' Name +',' Punctuation +' ' Text.Whitespace +'rand_st' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'check_chance' Name +'(' Punctuation +'stmt' Name +'.' Punctuation +'props' Name +'.' Punctuation +'chance' Name +',' Punctuation +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'rand_st' Name +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'rand_st' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'rand_st' Name +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'passed' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// try to eval this statement\n' Comment.Single + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'res' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_stmt' Name +'(' Punctuation +'stmt' Name +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// on error, set the correct line number and bubble up\n' Comment.Single + +' ' Text.Whitespace +'Err' Name.Builtin +'(' Punctuation +'mut' Keyword +' ' Text.Whitespace +'err' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'err' Name +'.' Punctuation +'set_line' Name +'(' Punctuation +'stmt' Name +'.' Punctuation +'props' Name +'.' Punctuation +'onthewayto' Name +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// special treatment for NEXT\n' Comment.Single + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'DoNext' Name +'(' Punctuation +'n' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'stmt' Name +'.' Punctuation +'body' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'Some' Name.Builtin +'(' Punctuation +'i' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'program' Name +'.' Punctuation +'labels' Name +'.' Punctuation +'get' Name +'(' Punctuation +'&' Operator +'n' Name +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'err' Name +'.' Punctuation +'set_line' Name +'(' Punctuation +'program' Name +'.' Punctuation +'stmts' Name +'[' Punctuation +'*' Operator +'i' Name +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'usize' Keyword.Type +']' Punctuation +'.' Punctuation +'props' Name +'.' Punctuation +'srcline' Name +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'return' Keyword +' ' Text.Whitespace +'Err' Name.Builtin +'(' Punctuation +'err' Name +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'res' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'res' Name +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// handle control flow effects\n' Comment.Single + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'res' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtRes' Name +'::' Text +'Next' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtRes' Name +'::' Text +'Jump' Name +'(' Punctuation +'n' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'jumps' Name +'.' Punctuation +'push' Name +'(' Punctuation +'pctr' Name +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u16' Keyword.Type +')' Punctuation +';' Punctuation +' ' Text.Whitespace +'// push the line with the NEXT\n' Comment.Single + +' ' Text.Whitespace +'pctr' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'n' Name +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'continue' Keyword +';' Punctuation +' ' Text.Whitespace +'// do not increment or check for COME FROMs\n' Comment.Single + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtRes' Name +'::' Text +'Back' Name +'(' Punctuation +'n' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'pctr' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'n' Name +';' Punctuation +' ' Text.Whitespace +'// will be incremented below after COME FROM check\n' Comment.Single + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtRes' Name +'::' Text +'FromTop' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'pctr' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'0' Literal.Number.Integer +';' Punctuation +' ' Text.Whitespace +'// start from the beginning, do not push any stack\n' Comment.Single + +' ' Text.Whitespace +'continue' Keyword +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtRes' Name +'::' Text +'End' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'break' Keyword +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// if we are on the line with the compiler bug, error out\n' Comment.Single + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'pctr' Name +' ' Text.Whitespace +'=' Operator +'=' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'program' Name +'.' Punctuation +'bugline' Name +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'usize' Keyword.Type +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'return' Keyword +' ' Text.Whitespace +'IE774' Name +'.' Punctuation +'err_with' Name +'(' Punctuation +'None' Name.Builtin +',' Punctuation +' ' Text.Whitespace +'stmt' Name +'.' Punctuation +'props' Name +'.' Punctuation +'onthewayto' Name +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// try to determine if we have to go to a COME FROM statement\n' Comment.Single + +' ' Text.Whitespace +'// (note: in general, program.stmts[pctr] != stmt)\n' Comment.Single + +' ' Text.Whitespace +'//\n' Comment.Single + +' ' Text.Whitespace +'// the static COME FROM is always a possibility\n' Comment.Single + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'mut' Keyword +' ' Text.Whitespace +'maybe_next' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'program' Name +'.' Punctuation +'stmts' Name +'[' Punctuation +'pctr' Name +']' Punctuation +'.' Punctuation +'comefrom' Name +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// the complicated case: evaluate all computed-come-from expressions\n' Comment.Single + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'my_label' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'program' Name +'.' Punctuation +'stmts' Name +'[' Punctuation +'pctr' Name +']' Punctuation +'.' Punctuation +'props' Name +'.' Punctuation +'label' Name +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'program' Name +'.' Punctuation +'uses_complex_comefrom' Name +' ' Text.Whitespace +'&' Operator +'&' Operator +' ' Text.Whitespace +'my_label' Name +' ' Text.Whitespace +'>' Operator +' ' Text.Whitespace +'0' Literal.Number.Integer +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'for' Keyword +' ' Text.Whitespace +'(' Punctuation +'i' Name +',' Punctuation +' ' Text.Whitespace +'stmt' Name +')' Punctuation +' ' Text.Whitespace +'in' Keyword +' ' Text.Whitespace +'program' Name +'.' Punctuation +'stmts' Name +'.' Punctuation +'iter' Name +'(' Punctuation +')' Punctuation +'.' Punctuation +'enumerate' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'ComeFrom' Name +'(' Punctuation +'ComeFrom' Name +'::' Text +'Expr' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'e' Name +')' Punctuation +')' Punctuation +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'stmt' Name +'.' Punctuation +'body' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'e' Name +')' Punctuation +')' Punctuation +'.' Punctuation +'as_u16' Name +'(' Punctuation +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +'=' Operator +' ' Text.Whitespace +'my_label' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// as soon as we have multiple candidates, we can bail out\n' Comment.Single + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'maybe_next' Name +'.' Punctuation +'is_some' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'return' Keyword +' ' Text.Whitespace +'IE555' Name +'.' Punctuation +'err' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'maybe_next' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'Some' Name.Builtin +'(' Punctuation +'i' Name +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u16' Keyword.Type +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// check for COME FROMs from this line\n' Comment.Single + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'Some' Name.Builtin +'(' Punctuation +'next' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'maybe_next' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'next' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'next' Name +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'usize' Keyword.Type +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// check for abstained COME FROM\n' Comment.Single + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'abstain' Name +'[' Punctuation +'next' Name +']' Punctuation +' ' Text.Whitespace +'=' Operator +'=' Operator +' ' Text.Whitespace +'0' Literal.Number.Integer +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// the COME FROM can also have a % chance\n' Comment.Single + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'(' Punctuation +'passed' Name +',' Punctuation +' ' Text.Whitespace +'rand_st' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'check_chance' Name +'(' Punctuation +'program' Name +'.' Punctuation +'stmts' Name +'[' Punctuation +'next' Name +']' Punctuation +'.' Punctuation +'props' Name +'.' Punctuation +'chance' Name +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'rand_st' Name +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'rand_st' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'rand_st' Name +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'passed' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'pctr' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'next' Name +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'continue' Keyword +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// no COME FROM, normal execution\n' Comment.Single + +' ' Text.Whitespace +'pctr' Name +' ' Text.Whitespace +'+' Operator +'=' Operator +' ' Text.Whitespace +'1' Literal.Number.Integer +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'stmt_ctr' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Interpret a single statement.\n' Literal.String.Doc + +' ' Text.Whitespace +'fn' Keyword +' ' Text +'eval_stmt' Name.Function +'(' Punctuation +'&' Operator +'mut' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +',' Punctuation +' ' Text.Whitespace +'stmt' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'Stmt' Name.Class +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'Res' Name.Class +'<' Operator +'StmtRes' Name +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'debug' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'println!' Name.Function.Magic +'(' Punctuation +'"' Literal.String +'\\n' Literal.String.Escape +'Executing Stmt #{} (state before following)' Literal.String +'"' Literal.String +',' Punctuation +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'stmt_ctr' Name +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'dump_state' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'println!' Name.Function.Magic +'(' Punctuation +'"' Literal.String +'{}' Literal.String +'"' Literal.String +',' Punctuation +' ' Text.Whitespace +'stmt' Name +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'stmt' Name +'.' Punctuation +'body' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'Calc' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'var' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'expr' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'val' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'expr' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'assign' Name +'(' Punctuation +'var' Name +',' Punctuation +' ' Text.Whitespace +'val' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'Next' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'Dim' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'var' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'exprs' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'array_dim' Name +'(' Punctuation +'var' Name +',' Punctuation +' ' Text.Whitespace +'exprs' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'Next' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'DoNext' Name +'(' Punctuation +'n' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'program' Name +'.' Punctuation +'labels' Name +'.' Punctuation +'get' Name +'(' Punctuation +'&' Operator +'n' Name +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// too many jumps on stack already?\n' Comment.Single + +' ' Text.Whitespace +'Some' Name.Builtin +'(' Punctuation +'_' Name +')' Punctuation +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'jumps' Name +'.' Punctuation +'len' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'>' Operator +'=' Operator +' ' Text.Whitespace +'80' Literal.Number.Integer +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'IE123' Name +'.' Punctuation +'err' Name +'(' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Some' Name.Builtin +'(' Punctuation +'i' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'Jump' Name +'(' Punctuation +'*' Operator +'i' Name +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'usize' Keyword.Type +')' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'None' Name.Builtin +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'IE129' Name +'.' Punctuation +'err' Name +'(' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'ComeFrom' Name +'(' Punctuation +'_' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// nothing to do here at runtime\n' Comment.Single + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'Next' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'Resume' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'expr' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'n' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'expr' Name +')' Punctuation +')' Punctuation +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// this expect() is safe: if the third arg is true, there will\n' Comment.Single + +' ' Text.Whitespace +'// be no Ok(None) returns\n' Comment.Single + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'next' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'pop_jumps' Name +'(' Punctuation +'&' Operator +'mut' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'jumps' Name +',' Punctuation +' ' Text.Whitespace +'n' Name +',' Punctuation +' ' Text.Whitespace +'true' Keyword.Constant +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'.' Punctuation +'expect' Name +'(' Punctuation +'"' Literal.String +'https://xkcd.com/378/ ?!' Literal.String +'"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'Back' Name +'(' Punctuation +'next' Name +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'usize' Keyword.Type +')' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'Forget' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'expr' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'n' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'expr' Name +')' Punctuation +')' Punctuation +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'pop_jumps' Name +'(' Punctuation +'&' Operator +'mut' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'jumps' Name +',' Punctuation +' ' Text.Whitespace +'n' Name +',' Punctuation +' ' Text.Whitespace +'false' Keyword.Constant +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'Next' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'Ignore' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vars' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'for' Keyword +' ' Text.Whitespace +'var' Name +' ' Text.Whitespace +'in' Keyword +' ' Text.Whitespace +'vars' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'set_rw' Name +'(' Punctuation +'var' Name +',' Punctuation +' ' Text.Whitespace +'false' Keyword.Constant +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'Next' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'Remember' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vars' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'for' Keyword +' ' Text.Whitespace +'var' Name +' ' Text.Whitespace +'in' Keyword +' ' Text.Whitespace +'vars' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'set_rw' Name +'(' Punctuation +'var' Name +',' Punctuation +' ' Text.Whitespace +'true' Keyword.Constant +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'Next' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'Stash' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vars' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'for' Keyword +' ' Text.Whitespace +'var' Name +' ' Text.Whitespace +'in' Keyword +' ' Text.Whitespace +'vars' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'stash' Name +'(' Punctuation +'var' Name +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'Next' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'Retrieve' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vars' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'for' Keyword +' ' Text.Whitespace +'var' Name +' ' Text.Whitespace +'in' Keyword +' ' Text.Whitespace +'vars' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'retrieve' Name +'(' Punctuation +'var' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'Next' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'Abstain' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'expr' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'whats' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'f' Name +':' Text +' ' Text +'Box' Name.Builtin +'<' Operator +'Fn' Name.Builtin +'(' Punctuation +'u32' Keyword.Type +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'u32' Keyword.Type +'>' Operator +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'Some' Name.Builtin +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'e' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'*' Operator +'expr' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'n' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'e' Name +')' Punctuation +')' Punctuation +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'box' Keyword +' ' Text.Whitespace +'move' Keyword +' ' Text.Whitespace +'|' Operator +'v' Name +':' Text +' ' Text +'u32' Keyword.Type +'|' Operator +' ' Text.Whitespace +'v' Name +'.' Punctuation +'saturating_add' Name +'(' Punctuation +'n' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +' ' Text.Whitespace +'else' Keyword +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'box' Keyword +' ' Text.Whitespace +'|' Operator +'_' Name +'|' Operator +' ' Text.Whitespace +'1' Literal.Number.Integer +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'for' Keyword +' ' Text.Whitespace +'what' Name +' ' Text.Whitespace +'in' Keyword +' ' Text.Whitespace +'whats' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'abstain' Name +'(' Punctuation +'what' Name +',' Punctuation +' ' Text.Whitespace +'&' Operator +'*' Operator +'f' Name +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'Next' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'Reinstate' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'whats' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'for' Keyword +' ' Text.Whitespace +'what' Name +' ' Text.Whitespace +'in' Keyword +' ' Text.Whitespace +'whats' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'abstain' Name +'(' Punctuation +'what' Name +',' Punctuation +' ' Text.Whitespace +'&' Operator +'|' Operator +'v' Name +':' Text +' ' Text +'u32' Keyword.Type +'|' Operator +' ' Text.Whitespace +'v' Name +'.' Punctuation +'saturating_sub' Name +'(' Punctuation +'1' Literal.Number.Integer +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'Next' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'ReadOut' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vars' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'for' Keyword +' ' Text.Whitespace +'var' Name +' ' Text.Whitespace +'in' Keyword +' ' Text.Whitespace +'vars' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'*' Operator +'var' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// read out whole array\n' Comment.Single + +' ' Text.Whitespace +'Expr' Name +'::' Text +'Var' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'var' Name +')' Punctuation +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'var' Name +'.' Punctuation +'is_dim' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'array_readout' Name +'(' Punctuation +'var' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// read out single var or array element\n' Comment.Single + +' ' Text.Whitespace +'Expr' Name +'::' Text +'Var' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'var' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'varval' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'lookup' Name +'(' Punctuation +'var' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'write_number' Name +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'stdout' Name +',' Punctuation +' ' Text.Whitespace +'varval' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// read out constant\n' Comment.Single + +' ' Text.Whitespace +'Expr' Name +'::' Text +'Num' Name +'(' Punctuation +'_' Name +',' Punctuation +' ' Text.Whitespace +'v' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'write_number' Name +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'stdout' Name +',' Punctuation +' ' Text.Whitespace +'v' Name +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// others will not be generated\n' Comment.Single + +' ' Text.Whitespace +'_' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'return' Keyword +' ' Text.Whitespace +'IE994' Name +'.' Punctuation +'err' Name +'(' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'Next' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'WriteIn' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vars' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'for' Keyword +' ' Text.Whitespace +'var' Name +' ' Text.Whitespace +'in' Keyword +' ' Text.Whitespace +'vars' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'var' Name +'.' Punctuation +'is_dim' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// write in whole array\n' Comment.Single + +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'array_writein' Name +'(' Punctuation +'var' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +' ' Text.Whitespace +'else' Keyword +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// write in single var or array element\n' Comment.Single + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'n' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'read_number' Name +'(' Punctuation +'0' Literal.Number.Integer +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'assign' Name +'(' Punctuation +'var' Name +',' Punctuation +' ' Text.Whitespace +'Val' Name +'::' Text +'from_u32' Name +'(' Punctuation +'n' Name +')' Punctuation +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'Next' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// this one is only generated by the constant-program optimizer\n' Comment.Single + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'Print' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'s' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'Err' Name.Builtin +'(' Punctuation +'_' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'stdout' Name +'.' Punctuation +'write' Name +'(' Punctuation +'&' Operator +'s' Name +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'return' Keyword +' ' Text.Whitespace +'IE252' Name +'.' Punctuation +'err' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'Next' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'TryAgain' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'FromTop' Name +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'GiveUp' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'StmtRes' Name +'::' Text +'End' Name +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'Error' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'e' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Err' Name.Builtin +'(' Punctuation +'(' Punctuation +'*' Operator +'e' Name +')' Punctuation +'.' Punctuation +'clone' Name +'(' Punctuation +')' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Evaluate an expression to a value.\n' Literal.String.Doc + +' ' Text.Whitespace +'fn' Keyword +' ' Text +'eval_expr' Name.Function +'(' Punctuation +'&' Operator +'self' Name.Builtin.Pseudo +',' Punctuation +' ' Text.Whitespace +'expr' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'Expr' Name.Class +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'Res' Name.Class +'<' Operator +'Val' Name +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'*' Operator +'expr' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Expr' Name +'::' Text +'Num' Name +'(' Punctuation +'vtype' Name +',' Punctuation +' ' Text.Whitespace +'v' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'vtype' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'VType' Name +'::' Text +'I16' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I16' Name +'(' Punctuation +'v' Name +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u16' Keyword.Type +')' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'VType' Name +'::' Text +'I32' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'v' Name +')' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Expr' Name +'::' Text +'Var' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'var' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'lookup' Name +'(' Punctuation +'var' Name +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Expr' Name +'::' Text +'Mingle' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vx' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'wx' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'vx' Name +')' Punctuation +')' Punctuation +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'w' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'wx' Name +')' Punctuation +')' Punctuation +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'check_ovf' Name +'(' Punctuation +'v' Name +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'w' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'check_ovf' Name +'(' Punctuation +'w' Name +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'mingle' Name +'(' Punctuation +'v' Name +',' Punctuation +' ' Text.Whitespace +'w' Name +')' Punctuation +')' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Expr' Name +'::' Text +'Select' Name +'(' Punctuation +'vtype' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'vx' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'wx' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'vx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'w' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'wx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'vtype' Name +' ' Text.Whitespace +'=' Operator +'=' Operator +' ' Text.Whitespace +'VType' Name +'::' Text +'I16' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I16' Name +'(' Punctuation +'select' Name +'(' Punctuation +'v' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +',' Punctuation +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'w' Name +'.' Punctuation +'as_u16' Name +'(' Punctuation +')' Punctuation +')' Punctuation +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u32' Keyword.Type +')' Punctuation +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u16' Keyword.Type +')' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +' ' Text.Whitespace +'else' Keyword +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'select' Name +'(' Punctuation +'v' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +',' Punctuation +' ' Text.Whitespace +'w' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Expr' Name +'::' Text +'And' Name +'(' Punctuation +'vtype' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'vx' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'vx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'vtype' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'VType' Name +'::' Text +'I16' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I16' Name +'(' Punctuation +'and_16' Name +'(' Punctuation +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'v' Name +'.' Punctuation +'as_u16' Name +'(' Punctuation +')' Punctuation +')' Punctuation +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u32' Keyword.Type +')' Punctuation +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u16' Keyword.Type +')' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'VType' Name +'::' Text +'I32' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'and_32' Name +'(' Punctuation +'v' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Expr' Name +'::' Text +'Or' Name +'(' Punctuation +'vtype' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'vx' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'vx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'vtype' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'VType' Name +'::' Text +'I16' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I16' Name +'(' Punctuation +'or_16' Name +'(' Punctuation +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'v' Name +'.' Punctuation +'as_u16' Name +'(' Punctuation +')' Punctuation +')' Punctuation +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u32' Keyword.Type +')' Punctuation +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u16' Keyword.Type +')' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'VType' Name +'::' Text +'I32' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'or_32' Name +'(' Punctuation +'v' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Expr' Name +'::' Text +'Xor' Name +'(' Punctuation +'vtype' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'vx' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'vx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'vtype' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'VType' Name +'::' Text +'I16' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I16' Name +'(' Punctuation +'xor_16' Name +'(' Punctuation +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'v' Name +'.' Punctuation +'as_u16' Name +'(' Punctuation +')' Punctuation +')' Punctuation +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u32' Keyword.Type +')' Punctuation +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u16' Keyword.Type +')' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'VType' Name +'::' Text +'I32' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'xor_32' Name +'(' Punctuation +'v' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Expr' Name +'::' Text +'RsNot' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vx' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'vx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'!' Operator +'v' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Expr' Name +'::' Text +'RsAnd' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vx' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'wx' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'vx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'w' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'wx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'v' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'&' Operator +' ' Text.Whitespace +'w' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Expr' Name +'::' Text +'RsOr' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vx' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'wx' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'vx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'w' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'wx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'v' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'|' Operator +' ' Text.Whitespace +'w' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Expr' Name +'::' Text +'RsXor' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vx' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'wx' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'vx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'w' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'wx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'v' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'^' Operator +' ' Text.Whitespace +'w' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Expr' Name +'::' Text +'RsRshift' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vx' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'wx' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'vx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'w' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'wx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'v' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'>' Operator +'>' Operator +' ' Text.Whitespace +'w' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Expr' Name +'::' Text +'RsLshift' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vx' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'wx' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'vx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'w' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'wx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'v' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'<' Operator +'<' Operator +' ' Text.Whitespace +'w' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'// Expr::RsEqual(ref vx, ref wx) => {\n' Comment.Single + +' ' Text.Whitespace +'// let v = try!(self.eval_expr(vx));\n' Comment.Single + +' ' Text.Whitespace +'// let w = try!(self.eval_expr(wx));\n' Comment.Single + +' ' Text.Whitespace +'// Ok(Val::I32((v.as_u32() == w.as_u32()) as u32))\n' Comment.Single + +' ' Text.Whitespace +'// }\n' Comment.Single + +' ' Text.Whitespace +'Expr' Name +'::' Text +'RsNotEqual' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vx' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'wx' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'vx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'w' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'wx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'(' Punctuation +'v' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'!' Operator +'=' Operator +' ' Text.Whitespace +'w' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +')' Punctuation +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'u32' Keyword.Type +')' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Expr' Name +'::' Text +'RsPlus' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vx' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'wx' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'vx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'w' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'wx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'v' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'+' Operator +' ' Text.Whitespace +'w' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Expr' Name +'::' Text +'RsMinus' Name +'(' Punctuation +'ref' Keyword +' ' Text.Whitespace +'vx' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'wx' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'v' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'vx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'w' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'wx' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'v' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'-' Operator +' ' Text.Whitespace +'w' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'#[' Comment.Preproc +'inline' Comment.Preproc +']' Comment.Preproc +'\n' Text.Whitespace + +' ' Text.Whitespace +'fn' Keyword +' ' Text +'eval_subs' Name.Function +'(' Punctuation +'&' Operator +'self' Name.Builtin.Pseudo +',' Punctuation +' ' Text.Whitespace +'subs' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'Vec' Name.Builtin +'<' Operator +'Expr' Name +'>' Operator +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'Res' Name.Class +'<' Operator +'Vec' Name.Builtin +'<' Operator +'usize' Keyword.Type +'>' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'subs' Name +'.' Punctuation +'iter' Name +'(' Punctuation +')' Punctuation +'.' Punctuation +'map' Name +'(' Punctuation +'|' Operator +'v' Name +'|' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_expr' Name +'(' Punctuation +'v' Name +')' Punctuation +'.' Punctuation +'map' Name +'(' Punctuation +'|' Operator +'w' Name +'|' Operator +' ' Text.Whitespace +'w' Name +'.' Punctuation +'as_usize' Name +'(' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +'.' Punctuation +'collect' Name +'(' Punctuation +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Dimension an array.\n' Literal.String.Doc + +' ' Text.Whitespace +'fn' Keyword +' ' Text +'array_dim' Name.Function +'(' Punctuation +'&' Operator +'mut' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +',' Punctuation +' ' Text.Whitespace +'var' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'Var' Name.Class +',' Punctuation +' ' Text.Whitespace +'dims' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'Vec' Name.Builtin +'<' Operator +'Expr' Name +'>' Operator +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'Res' Name.Class +'<' Operator +'(' Punctuation +')' Punctuation +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'dims' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_subs' Name +'(' Punctuation +'dims' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'*' Operator +'var' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A16' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'_' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'tail' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'dimension' Name +'(' Punctuation +'dims' Name +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A32' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'_' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'hybrid' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'dimension' Name +'(' Punctuation +'dims' Name +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'_' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'return' Keyword +' ' Text.Whitespace +'IE994' Name +'.' Punctuation +'err' Name +'(' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Assign to a variable.\n' Literal.String.Doc + +' ' Text.Whitespace +'fn' Keyword +' ' Text +'assign' Name.Function +'(' Punctuation +'&' Operator +'mut' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +',' Punctuation +' ' Text.Whitespace +'var' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'Var' Name.Class +',' Punctuation +' ' Text.Whitespace +'val' Name +':' Text +' ' Text +'Val' Name.Class +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'Res' Name.Class +'<' Operator +'(' Punctuation +')' Punctuation +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'*' Operator +'var' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'I16' Name +'(' Punctuation +'n' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'spot' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'assign' Name +'(' Punctuation +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'val' Name +'.' Punctuation +'as_u16' Name +'(' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'I32' Name +'(' Punctuation +'n' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'twospot' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'assign' Name +'(' Punctuation +'val' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +')' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A16' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'subs' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'subs' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_subs' Name +'(' Punctuation +'subs' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'tail' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'set_md' Name +'(' Punctuation +'subs' Name +',' Punctuation +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'val' Name +'.' Punctuation +'as_u16' Name +'(' Punctuation +')' Punctuation +')' Punctuation +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A32' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'subs' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'subs' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_subs' Name +'(' Punctuation +'subs' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'hybrid' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'set_md' Name +'(' Punctuation +'subs' Name +',' Punctuation +' ' Text.Whitespace +'val' Name +'.' Punctuation +'as_u32' Name +'(' Punctuation +')' Punctuation +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Look up the value of a variable.\n' Literal.String.Doc + +' ' Text.Whitespace +'fn' Keyword +' ' Text +'lookup' Name.Function +'(' Punctuation +'&' Operator +'self' Name.Builtin.Pseudo +',' Punctuation +' ' Text.Whitespace +'var' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'Var' Name.Class +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'Res' Name.Class +'<' Operator +'Val' Name +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'*' Operator +'var' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'I16' Name +'(' Punctuation +'n' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I16' Name +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'spot' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'val' Name +')' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'I32' Name +'(' Punctuation +'n' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'Ok' Name.Builtin +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'twospot' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'val' Name +')' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A16' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'subs' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'subs' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_subs' Name +'(' Punctuation +'subs' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'tail' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'get_md' Name +'(' Punctuation +'subs' Name +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +'.' Punctuation +'map' Name +'(' Punctuation +'Val' Name +'::' Text +'I16' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A32' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'ref' Keyword +' ' Text.Whitespace +'subs' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'subs' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'try' Keyword.Reserved +'!' Operator +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'eval_subs' Name +'(' Punctuation +'subs' Name +')' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'hybrid' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'get_md' Name +'(' Punctuation +'subs' Name +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +'.' Punctuation +'map' Name +'(' Punctuation +'Val' Name +'::' Text +'I32' Name +')' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Process a STASH statement.\n' Literal.String.Doc + +' ' Text.Whitespace +'fn' Keyword +' ' Text +'stash' Name.Function +'(' Punctuation +'&' Operator +'mut' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +',' Punctuation +' ' Text.Whitespace +'var' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'Var' Name.Class +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'*' Operator +'var' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'I16' Name +'(' Punctuation +'n' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'spot' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'stash' Name +'(' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'I32' Name +'(' Punctuation +'n' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'twospot' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'stash' Name +'(' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A16' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'_' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'tail' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'stash' Name +'(' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A32' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'_' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'hybrid' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'stash' Name +'(' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Process a RETRIEVE statement.\n' Literal.String.Doc + +' ' Text.Whitespace +'fn' Keyword +' ' Text +'retrieve' Name.Function +'(' Punctuation +'&' Operator +'mut' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +',' Punctuation +' ' Text.Whitespace +'var' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'Var' Name.Class +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'Res' Name.Class +'<' Operator +'(' Punctuation +')' Punctuation +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'*' Operator +'var' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'I16' Name +'(' Punctuation +'n' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'spot' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'retrieve' Name +'(' Punctuation +'0' Literal.Number.Integer +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'I32' Name +'(' Punctuation +'n' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'twospot' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'retrieve' Name +'(' Punctuation +'0' Literal.Number.Integer +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A16' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'_' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'tail' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'retrieve' Name +'(' Punctuation +'0' Literal.Number.Integer +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A32' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'_' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'hybrid' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'retrieve' Name +'(' Punctuation +'0' Literal.Number.Integer +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Process an IGNORE or REMEMBER statement. Cannot fail.\n' Literal.String.Doc + +' ' Text.Whitespace +'fn' Keyword +' ' Text +'set_rw' Name.Function +'(' Punctuation +'&' Operator +'mut' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +',' Punctuation +' ' Text.Whitespace +'var' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'Var' Name.Class +',' Punctuation +' ' Text.Whitespace +'rw' Name +':' Text +' ' Text +'bool' Keyword.Type +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'*' Operator +'var' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'I16' Name +'(' Punctuation +'n' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'spot' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'rw' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'rw' Name +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'I32' Name +'(' Punctuation +'n' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'twospot' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'rw' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'rw' Name +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A16' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'_' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'tail' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'rw' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'rw' Name +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A32' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'_' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'hybrid' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'rw' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'rw' Name +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// P()rocess an ABSTAIN or REINSTATE statement. Cannot fail.\n' Literal.String.Doc + +' ' Text.Whitespace +'fn' Keyword +' ' Text +'abstain' Name.Function +'(' Punctuation +'&' Operator +'mut' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +',' Punctuation +' ' Text.Whitespace +'what' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'ast' Name.Class +'::' Text +'Abstain' Name +',' Punctuation +' ' Text.Whitespace +'f' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'Fn' Name.Builtin +'(' Punctuation +'u32' Keyword.Type +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'u32' Keyword.Type +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'&' Operator +'ast' Name +'::' Text +'Abstain' Name +'::' Text +'Label' Name +'(' Punctuation +'lbl' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'what' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'idx' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'program' Name +'.' Punctuation +'labels' Name +'[' Punctuation +'&' Operator +'lbl' Name +']' Punctuation +' ' Text.Whitespace +'as' Keyword +' ' Text.Whitespace +'usize' Keyword.Type +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'program' Name +'.' Punctuation +'stmts' Name +'[' Punctuation +'idx' Name +']' Punctuation +'.' Punctuation +'body' Name +' ' Text.Whitespace +'!' Operator +'=' Operator +' ' Text.Whitespace +'StmtBody' Name +'::' Text +'GiveUp' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'abstain' Name +'[' Punctuation +'idx' Name +']' Punctuation +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'f' Name +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'abstain' Name +'[' Punctuation +'idx' Name +']' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +' ' Text.Whitespace +'else' Keyword +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'for' Keyword +' ' Text.Whitespace +'(' Punctuation +'i' Name +',' Punctuation +' ' Text.Whitespace +'stype' Name +')' Punctuation +' ' Text.Whitespace +'in' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'program' Name +'.' Punctuation +'stmt_types' Name +'.' Punctuation +'iter' Name +'(' Punctuation +')' Punctuation +'.' Punctuation +'enumerate' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'stype' Name +' ' Text.Whitespace +'=' Operator +'=' Operator +' ' Text.Whitespace +'what' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'abstain' Name +'[' Punctuation +'i' Name +']' Punctuation +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'f' Name +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'abstain' Name +'[' Punctuation +'i' Name +']' Punctuation +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Array readout helper.\n' Literal.String.Doc + +' ' Text.Whitespace +'fn' Keyword +' ' Text +'array_readout' Name.Function +'(' Punctuation +'&' Operator +'mut' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +',' Punctuation +' ' Text.Whitespace +'var' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'Var' Name.Class +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'Res' Name.Class +'<' Operator +'(' Punctuation +')' Punctuation +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'state' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'&' Operator +'mut' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'last_out' Name +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'*' Operator +'var' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A16' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'_' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'tail' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'readout' Name +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'stdout' Name +',' Punctuation +' ' Text.Whitespace +'state' Name +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A32' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'_' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'hybrid' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'readout' Name +'(' Punctuation +'self' Name.Builtin.Pseudo +'.' Punctuation +'stdout' Name +',' Punctuation +' ' Text.Whitespace +'state' Name +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'_' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'return' Keyword +' ' Text.Whitespace +'IE994' Name +'.' Punctuation +'err' Name +'(' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Array writein helper.\n' Literal.String.Doc + +' ' Text.Whitespace +'fn' Keyword +' ' Text +'array_writein' Name.Function +'(' Punctuation +'&' Operator +'mut' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +',' Punctuation +' ' Text.Whitespace +'var' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'Var' Name.Class +')' Punctuation +' ' Text.Whitespace +'->' Text +' ' Text +'Res' Name.Class +'<' Operator +'(' Punctuation +')' Punctuation +'>' Operator +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'let' Keyword.Declaration +' ' Text.Whitespace +'state' Name +' ' Text.Whitespace +'=' Operator +' ' Text.Whitespace +'&' Operator +'mut' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'last_in' Name +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'match' Keyword +' ' Text.Whitespace +'*' Operator +'var' Name +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A16' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'_' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'tail' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'writein' Name +'(' Punctuation +'state' Name +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'Var' Name +'::' Text +'A32' Name +'(' Punctuation +'n' Name +',' Punctuation +' ' Text.Whitespace +'_' Name +')' Punctuation +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'hybrid' Name +'[' Punctuation +'n' Name +']' Punctuation +'.' Punctuation +'writein' Name +'(' Punctuation +'state' Name +',' Punctuation +' ' Text.Whitespace +'0' Literal.Number.Integer +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'_' Name +' ' Text.Whitespace +'=' Operator +'>' Operator +' ' Text.Whitespace +'return' Keyword +' ' Text.Whitespace +'IE994' Name +'.' Punctuation +'err' Name +'(' Punctuation +')' Punctuation +',' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'/// Debug helpers.\n' Literal.String.Doc + +' ' Text.Whitespace +'fn' Keyword +' ' Text +'dump_state' Name.Function +'(' Punctuation +'&' Operator +'self' Name.Builtin.Pseudo +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'dump_state_one' Name +'(' Punctuation +'&' Operator +'self' Name.Builtin.Pseudo +'.' Punctuation +'spot' Name +',' Punctuation +' ' Text.Whitespace +'"' Literal.String +'.' Literal.String +'"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'dump_state_one' Name +'(' Punctuation +'&' Operator +'self' Name.Builtin.Pseudo +'.' Punctuation +'twospot' Name +',' Punctuation +' ' Text.Whitespace +'"' Literal.String +':' Literal.String +'"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'dump_state_one' Name +'(' Punctuation +'&' Operator +'self' Name.Builtin.Pseudo +'.' Punctuation +'tail' Name +',' Punctuation +' ' Text.Whitespace +'"' Literal.String +',' Literal.String +'"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'dump_state_one' Name +'(' Punctuation +'&' Operator +'self' Name.Builtin.Pseudo +'.' Punctuation +'hybrid' Name +',' Punctuation +' ' Text.Whitespace +'"' Literal.String +';' Literal.String +'"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'jumps' Name +'.' Punctuation +'len' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'>' Operator +' ' Text.Whitespace +'0' Literal.Number.Integer +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'println!' Name.Function.Magic +'(' Punctuation +'"' Literal.String +'Next stack: {:?}' Literal.String +'"' Literal.String +',' Punctuation +' ' Text.Whitespace +'self' Name.Builtin.Pseudo +'.' Punctuation +'jumps' Name +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'//println!("Abstained: {:?}", self.abstain);\n' Comment.Single + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'\n' Text.Whitespace + +' ' Text.Whitespace +'fn' Keyword +' ' Text +'dump_state_one' Name.Function +'<' Operator +'T' Name +':' Text +' ' Text +'Debug' Name.Class +' ' Text.Whitespace +'+' Operator +' ' Text.Whitespace +'Display' Name +'>' Operator +'(' Punctuation +'&' Operator +'self' Name.Builtin.Pseudo +',' Punctuation +' ' Text.Whitespace +'vec' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'Vec' Name.Builtin +'<' Operator +'Bind' Name +'<' Operator +'T' Name +'>' Operator +'>' Operator +',' Punctuation +' ' Text.Whitespace +'sigil' Name +':' Text +' ' Text +'&' Keyword.Pseudo +'str' Keyword.Type +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'if' Keyword +' ' Text.Whitespace +'vec' Name +'.' Punctuation +'len' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'>' Operator +' ' Text.Whitespace +'0' Literal.Number.Integer +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'for' Keyword +' ' Text.Whitespace +'(' Punctuation +'i' Name +',' Punctuation +' ' Text.Whitespace +'v' Name +')' Punctuation +' ' Text.Whitespace +'in' Keyword +' ' Text.Whitespace +'vec' Name +'.' Punctuation +'iter' Name +'(' Punctuation +')' Punctuation +'.' Punctuation +'enumerate' Name +'(' Punctuation +')' Punctuation +' ' Text.Whitespace +'{' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'print!' Name.Function.Magic +'(' Punctuation +'"' Literal.String +'{}{} = {}, ' Literal.String +'"' Literal.String +',' Punctuation +' ' Text.Whitespace +'sigil' Name +',' Punctuation +' ' Text.Whitespace +'i' Name +',' Punctuation +' ' Text.Whitespace +'v' Name +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'println!' Name.Function.Magic +'(' Punctuation +'"' Literal.String +'"' Literal.String +')' Punctuation +';' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +' ' Text.Whitespace +'}' Punctuation +'\n' Text.Whitespace + +'}' Punctuation +'\n' Text.Whitespace |
