@@ -8,7 +8,7 @@ use std::{
10use crate::{
10use crate::{
11− interpreter::{slam_pulled_gate, InterpreterContext, Tanks},
11+ interpreter::{slam_pulled_gate, InterpreterContext, TTanks},
12 noun::{self, cell, Atom, Edge, Hair, Nail, Noun},
12 noun::{self, cell, Atom, Edge, Hair, Nail, Noun},
@@ -110,15 +110,15 @@ pub fn generate_jets() -> Jets {
113−pub type Jet = fn(ctx: &mut InterpreterContext, &Rc<Noun>) -> Result<Rc<Noun>, Tanks>;
113+pub type Jet = fn(ctx: &mut InterpreterContext, &Rc<Noun>) -> Result<Rc<Noun>, TTanks>;
114pub type DoubleJet = fn(ctx: &mut InterpreterContext, &Rc<Noun>, &Rc<Noun>) -> Option<Rc<Noun>>;
114pub type DoubleJet = fn(ctx: &mut InterpreterContext, &Rc<Noun>, &Rc<Noun>) -> Option<Rc<Noun>>;
116−static BINARY_ATOM: fn(&Rc<Noun>, fn(&Atom, &Atom) -> Atom) -> Result<Rc<Noun>, Tanks> =
116+static BINARY_ATOM: fn(&Rc<Noun>, fn(&Atom, &Atom) -> Atom) -> Result<Rc<Noun>, TTanks> =
117 |n: &Rc<Noun>, f: fn(&Atom, &Atom) -> Atom| {
117 |n: &Rc<Noun>, f: fn(&Atom, &Atom) -> Atom| {
118− let (p, q) = n.as_cell().ok_or(Tanks::new())?;
118+ let (p, q) = n.as_cell().ok_or(TTanks::new())?;
119 Ok(Rc::new(Noun::Atom(f(
119 Ok(Rc::new(Noun::Atom(f(
120− p.as_atom().ok_or(Tanks::new())?,
120+ p.as_atom().ok_or(TTanks::new())?,
121− q.as_atom().ok_or(Tanks::new())?,
121+ q.as_atom().ok_or(TTanks::new())?,
@@ -126,13 +126,13 @@ static BINARY_ATOM_LOOB: fn(
126 &InterpreterContext,
126 &InterpreterContext,
127 &Rc<Noun>,
127 &Rc<Noun>,
128 fn(&Atom, &Atom) -> bool,
128 fn(&Atom, &Atom) -> bool,
129−) -> Result<Rc<Noun>, Tanks> =
129+) -> Result<Rc<Noun>, TTanks> =
130 |ctx: &InterpreterContext, n: &Rc<Noun>, f: fn(&Atom, &Atom) -> bool| {
130 |ctx: &InterpreterContext, n: &Rc<Noun>, f: fn(&Atom, &Atom) -> bool| {
131− let (p, q) = n.as_cell().ok_or(Tanks::new())?;
131+ let (p, q) = n.as_cell().ok_or(TTanks::new())?;
134− p.as_atom().ok_or(Tanks::new())?,
134+ p.as_atom().ok_or(TTanks::new())?,
135− q.as_atom().ok_or(Tanks::new())?,
135+ q.as_atom().ok_or(TTanks::new())?,
137 Ok(ctx.nouns.sig.clone())
137 Ok(ctx.nouns.sig.clone())
@@ -143,18 +143,22 @@ static BINARY_ATOM_LOOB: fn(
143static BINARY_ATOM_PAIR: fn(
143static BINARY_ATOM_PAIR: fn(
144 &Rc<Noun>,
144 &Rc<Noun>,
145 fn(&Atom, &Atom) -> (Atom, Atom),
145 fn(&Atom, &Atom) -> (Atom, Atom),
146−) -> Result<Rc<Noun>, Tanks> = |n: &Rc<Noun>, f: fn(&Atom, &Atom) -> (Atom, Atom)| {
146+) -> Result<Rc<Noun>, TTanks> = |n: &Rc<Noun>, f: fn(&Atom, &Atom) -> (Atom, Atom)| {
147− let (p, q) = n.as_cell().ok_or(Tanks::new())?;
147+ let (p, q) = n.as_cell().ok_or(TTanks::new())?;
149 let (a, b) = f(
149 let (a, b) = f(
150− p.as_atom().ok_or(Tanks::new())?,
150+ p.as_atom().ok_or(TTanks::new())?,
151− q.as_atom().ok_or(Tanks::new())?,
151+ q.as_atom().ok_or(TTanks::new())?,
153 Ok(cell(&Rc::new(Noun::Atom(a)), &Rc::new(Noun::Atom(b))))
153 Ok(cell(&Rc::new(Noun::Atom(a)), &Rc::new(Noun::Atom(b))))
156static ADD: Jet = |_ctx, n| BINARY_ATOM(n, |a, b| a + b);
156static ADD: Jet = |_ctx, n| BINARY_ATOM(n, |a, b| a + b);
157+static DEC: Jet = |_ctx, n| {
158+ Ok(Rc::new(Noun::Atom(
157−static DEC: Jet = |_ctx, n| Ok(Rc::new(Noun::Atom(n.as_atom().ok_or(Tanks::new())? - 1u32)));
159+ n.as_atom().ok_or(TTanks::new())? - 1u32,
158static DVR: Jet = |_ctx, n| BINARY_ATOM_PAIR(n, |a, b| a.div_rem(&b));
162static DVR: Jet = |_ctx, n| BINARY_ATOM_PAIR(n, |a, b| a.div_rem(&b));
159static DIV: Jet = |_ctx, n| BINARY_ATOM(n, |a, b| a / b);
163static DIV: Jet = |_ctx, n| BINARY_ATOM(n, |a, b| a / b);
160static GTE: Jet = |ctx, n| BINARY_ATOM_LOOB(ctx, n, |a, b| a >= b);
164static GTE: Jet = |ctx, n| BINARY_ATOM_LOOB(ctx, n, |a, b| a >= b);
@@ -168,30 +172,30 @@ static MUL: Jet = |_ctx, n| BINARY_ATOM(n, |a, b| a * b);
168static SUB: Jet = |_ctx, n| BINARY_ATOM(n, |a, b| a - b);
172static SUB: Jet = |_ctx, n| BINARY_ATOM(n, |a, b| a - b);
170static CAP: Jet = |ctx, n| {
174static CAP: Jet = |ctx, n| {
171− let n = n.as_atom().ok_or(Tanks::new())?;
175+ let n = n.as_atom().ok_or(TTanks::new())?;
172 CAP_ATOM(ctx, n.clone())
176 CAP_ATOM(ctx, n.clone())
175−static CAP_ATOM: fn(&InterpreterContext, Atom) -> Result<Rc<Noun>, Tanks> = |ctx, n: Atom| {
179+static CAP_ATOM: fn(&InterpreterContext, Atom) -> Result<Rc<Noun>, TTanks> = |ctx, n: Atom| {
176 let mut n_iter = n.iter_u32_digits();
180 let mut n_iter = n.iter_u32_digits();
178 match n_iter.len() {
182 match n_iter.len() {
179− 0 => Err(Tanks::new()),
183+ 0 => Err(TTanks::new()),
180 1 => CAP_U32(ctx, n_iter.next().unwrap()),
184 1 => CAP_U32(ctx, n_iter.next().unwrap()),
181 _ => CAP_ATOM(ctx, n >> 1),
185 _ => CAP_ATOM(ctx, n >> 1),
184−static CAP_U32: fn(ctx: &InterpreterContext, u32) -> Result<Rc<Noun>, Tanks> = |ctx, n| match n {
188+static CAP_U32: fn(ctx: &InterpreterContext, u32) -> Result<Rc<Noun>, TTanks> = |ctx, n| match n {
185− 0 | 1 => Err(Tanks::new()),
189+ 0 | 1 => Err(TTanks::new()),
186 2 => Ok(ctx.nouns.two.clone()),
190 2 => Ok(ctx.nouns.two.clone()),
187 3 => Ok(ctx.nouns.three.clone()),
191 3 => Ok(ctx.nouns.three.clone()),
188 n => CAP_U32(ctx, n >> 1),
192 n => CAP_U32(ctx, n >> 1),
191static MAS: Jet = |ctx, n| {
195static MAS: Jet = |ctx, n| {
192− let n = n.as_atom().ok_or(Tanks::new())?;
196+ let n = n.as_atom().ok_or(TTanks::new())?;
193 Ok(Rc::new(Noun::Atom(
197 Ok(Rc::new(Noun::Atom(
194− MAS_ATOM(ctx, n.clone()).ok_or(Tanks::new())?,
198+ MAS_ATOM(ctx, n.clone()).ok_or(TTanks::new())?,
197static MAS_ATOM: fn(&InterpreterContext, Atom) -> Option<Atom> = |ctx, n| {
201static MAS_ATOM: fn(&InterpreterContext, Atom) -> Option<Atom> = |ctx, n| {
@@ -213,22 +217,22 @@ static MAS_U32: fn(u32) -> u32 = |n| match n {
215static PEG: Jet = |ctx, n| {
219static PEG: Jet = |ctx, n| {
216− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
220+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
218− let a = a.as_atom().ok_or(Tanks::new())?;
222+ let a = a.as_atom().ok_or(TTanks::new())?;
219− let b = b.as_atom().ok_or(Tanks::new())?;
223+ let b = b.as_atom().ok_or(TTanks::new())?;
221 if *a == Atom::ZERO {
225 if *a == Atom::ZERO {
222− return Err(Tanks::new());
226+ return Err(TTanks::new());
225 Ok(Rc::new(Noun::Atom(PEG_ATOM(ctx, a, b.clone())?)))
229 Ok(Rc::new(Noun::Atom(PEG_ATOM(ctx, a, b.clone())?)))
227−static PEG_ATOM: fn(&InterpreterContext, &Atom, Atom) -> Result<Atom, Tanks> = |ctx, a, b| {
231+static PEG_ATOM: fn(&InterpreterContext, &Atom, Atom) -> Result<Atom, TTanks> = |ctx, a, b| {
228 let mut b_iter = b.iter_u32_digits();
232 let mut b_iter = b.iter_u32_digits();
230 match b_iter.len() {
234 match b_iter.len() {
231− 0 => Err(Tanks::new()),
235+ 0 => Err(TTanks::new()),
232 1 => Ok(PEG_U32(a, b_iter.next().unwrap())),
236 1 => Ok(PEG_U32(a, b_iter.next().unwrap())),
233 _ => Ok((&b & &ctx.big_uints.one) + (PEG_ATOM(ctx, a, b >> 1)? << 1)),
237 _ => Ok((&b & &ctx.big_uints.one) + (PEG_ATOM(ctx, a, b >> 1)? << 1)),
@@ -242,7 +246,7 @@ static PEG_U32: fn(&Atom, u32) -> Atom = |a, b| match b {
244static FAND: Jet = |ctx, n| {
248static FAND: Jet = |ctx, n| {
245− let (nedl, hstk) = n.as_cell().ok_or(Tanks::new())?;
249+ let (nedl, hstk) = n.as_cell().ok_or(TTanks::new())?;
246 if nedl.is_sig() || hstk.is_sig() {
250 if nedl.is_sig() || hstk.is_sig() {
247 return Ok(ctx.nouns.sig.clone());
251 return Ok(ctx.nouns.sig.clone());
@@ -272,7 +276,7 @@ static FAND: Jet = |ctx, n| {
274static FIND: Jet = |ctx, n| {
278static FIND: Jet = |ctx, n| {
275− let (nedl, hstk) = n.as_cell().ok_or(Tanks::new())?;
279+ let (nedl, hstk) = n.as_cell().ok_or(TTanks::new())?;
276 if nedl.is_sig() || hstk.is_sig() {
280 if nedl.is_sig() || hstk.is_sig() {
277 return Ok(ctx.nouns.sig.clone());
281 return Ok(ctx.nouns.sig.clone());
@@ -305,13 +309,13 @@ static FLOP: Jet = |ctx, n| {
307static GULF: Jet = |_ctx, n| {
311static GULF: Jet = |_ctx, n| {
308− let (from, to) = n.as_cell().ok_or(Tanks::new())?;
312+ let (from, to) = n.as_cell().ok_or(TTanks::new())?;
310− let mut from = (*from.as_atom().ok_or(Tanks::new())?).clone();
314+ let mut from = (*from.as_atom().ok_or(TTanks::new())?).clone();
311− let to = to.as_atom().ok_or(Tanks::new())?.clone();
315+ let to = to.as_atom().ok_or(TTanks::new())?.clone();
313 if from > to {
317 if from > to {
314− return Err(Tanks::new());
318+ return Err(TTanks::new());
317 let mut tmp = Vec::new();
321 let mut tmp = Vec::new();
@@ -325,10 +329,10 @@ static GULF: Jet = |_ctx, n| {
327static INTO: Jet = |_ctx, n| {
331static INTO: Jet = |_ctx, n| {
328− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
332+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
329− let (b, c) = b.as_cell().ok_or(Tanks::new())?;
333+ let (b, c) = b.as_cell().ok_or(TTanks::new())?;
331− let mut b_iter = b.as_atom().ok_or(Tanks::new())?.iter_u32_digits();
335+ let mut b_iter = b.as_atom().ok_or(TTanks::new())?.iter_u32_digits();
333 match b_iter.len() {
337 match b_iter.len() {
334 0 => Ok(cell(&c, &a)),
338 0 => Ok(cell(&c, &a)),
@@ -358,7 +362,7 @@ static INTO: Jet = |_ctx, n| {
360static JOIN: Jet = |_ctx, n| {
364static JOIN: Jet = |_ctx, n| {
361− let (sep, list) = n.as_cell().ok_or(Tanks::new())?;
365+ let (sep, list) = n.as_cell().ok_or(TTanks::new())?;
362 Ok(Noun::list_refs(
366 Ok(Noun::list_refs(
363 list.list_iter()
367 list.list_iter()
364 .intersperse(sep)
368 .intersperse(sep)
@@ -376,7 +380,7 @@ static LENT: Jet = |_ctx, n| {
378static LEVY: Jet = |ctx, n| {
382static LEVY: Jet = |ctx, n| {
379− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
383+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
380 if traverse_iter_result(a.list_iter().map(|n| slam_pulled_gate(ctx, b, n)))?
384 if traverse_iter_result(a.list_iter().map(|n| slam_pulled_gate(ctx, b, n)))?
382 .all(|x| x.is_y())
386 .all(|x| x.is_y())
@@ -388,7 +392,7 @@ static LEVY: Jet = |ctx, n| {
390static LIEN: Jet = |ctx, n| {
394static LIEN: Jet = |ctx, n| {
391− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
395+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
392 if traverse_iter_result(a.list_iter().map(|n| slam_pulled_gate(ctx, b, n)))?
396 if traverse_iter_result(a.list_iter().map(|n| slam_pulled_gate(ctx, b, n)))?
394 .any(|x| x.is_y())
398 .any(|x| x.is_y())
@@ -400,7 +404,7 @@ static LIEN: Jet = |ctx, n| {
402static MURN: Jet = |ctx, n| {
406static MURN: Jet = |ctx, n| {
403− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
407+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
405 Ok(Noun::list_refs(
409 Ok(Noun::list_refs(
406 traverse_iter_result(
410 traverse_iter_result(
@@ -413,7 +417,7 @@ static MURN: Jet = |ctx, n| {
415static REAP: Jet = |_ctx, n| {
419static REAP: Jet = |_ctx, n| {
416− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
420+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
418 Ok(Noun::list_refs(repeat_n(
422 Ok(Noun::list_refs(repeat_n(
419 b.clone(),
423 b.clone(),
@@ -421,17 +425,17 @@ static REAP: Jet = |_ctx, n| {
424−static REAR: Jet = |_ctx, n| n.list_iter().last().ok_or(Tanks::new()).cloned();
428+static REAR: Jet = |_ctx, n| n.list_iter().last().ok_or(TTanks::new()).cloned();
426static REEL: Jet = |ctx, n| {
430static REEL: Jet = |ctx, n| {
427− let (list, gate) = n.as_cell().ok_or(Tanks::new())?;
431+ let (list, gate) = n.as_cell().ok_or(TTanks::new())?;
429 list.list_iter().collect::<Vec<_>>().iter().rfold(
433 list.list_iter().collect::<Vec<_>>().iter().rfold(
431 .gate_sample()
435 .gate_sample()
432− .ok_or(Tanks::new())?
436+ .ok_or(TTanks::new())?
433 .as_cell()
437 .as_cell()
434− .ok_or(Tanks::new())?
438+ .ok_or(TTanks::new())?
436 .clone()),
440 .clone()),
437 |acc, next| {
441 |acc, next| {
@@ -442,15 +446,15 @@ static REEL: Jet = |ctx, n| {
444static ROLL: Jet = |ctx, n| {
448static ROLL: Jet = |ctx, n| {
445− let (list, gate) = n.as_cell().ok_or(Tanks::new())?;
449+ let (list, gate) = n.as_cell().ok_or(TTanks::new())?;
447 list.list_iter().fold(
451 list.list_iter().fold(
450 .gate_sample()
454 .gate_sample()
451− .ok_or(Tanks::new())?
455+ .ok_or(TTanks::new())?
452 .as_cell()
456 .as_cell()
453− .ok_or(Tanks::new())?
457+ .ok_or(TTanks::new())?
455 .clone()),
459 .clone()),
456 |acc, next| {
460 |acc, next| {
@@ -461,7 +465,7 @@ static ROLL: Jet = |ctx, n| {
463static SCAG: Jet = |_ctx, n| {
467static SCAG: Jet = |_ctx, n| {
464− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
468+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
466 Ok(Noun::list_refs(
470 Ok(Noun::list_refs(
467 b.list_iter()
471 b.list_iter()
@@ -474,7 +478,7 @@ static SCAG: Jet = |_ctx, n| {
476static SKID: Jet = |ctx, n| {
480static SKID: Jet = |ctx, n| {
477− let (list, gate) = n.as_cell().ok_or(Tanks::new())?;
481+ let (list, gate) = n.as_cell().ok_or(TTanks::new())?;
479 let slammed_n = traverse_iter_result(
483 let slammed_n = traverse_iter_result(
480 list.list_iter()
484 list.list_iter()
@@ -489,7 +493,7 @@ static SKID: Jet = |ctx, n| {
491static SKIM: Jet = |ctx, n| {
495static SKIM: Jet = |ctx, n| {
492− let (list, gate) = n.as_cell().ok_or(Tanks::new())?;
496+ let (list, gate) = n.as_cell().ok_or(TTanks::new())?;
494 Ok(Noun::list_refs(
498 Ok(Noun::list_refs(
495 traverse_iter_result(
499 traverse_iter_result(
@@ -503,7 +507,7 @@ static SKIM: Jet = |ctx, n| {
505static SKIP: Jet = |ctx, n| {
509static SKIP: Jet = |ctx, n| {
506− let (list, gate) = n.as_cell().ok_or(Tanks::new())?;
510+ let (list, gate) = n.as_cell().ok_or(TTanks::new())?;
508 Ok(Noun::list_refs(
512 Ok(Noun::list_refs(
509 traverse_iter_result(
513 traverse_iter_result(
@@ -517,9 +521,9 @@ static SKIP: Jet = |ctx, n| {
519static SLAG: Jet = |ctx, n| {
523static SLAG: Jet = |ctx, n| {
520− let (a, list) = n.as_cell().ok_or(Tanks::new())?;
524+ let (a, list) = n.as_cell().ok_or(TTanks::new())?;
522− let mut a_iter = a.as_atom().ok_or(Tanks::new())?.iter_u32_digits();
526+ let mut a_iter = a.as_atom().ok_or(TTanks::new())?.iter_u32_digits();
524 match a_iter.len() {
528 match a_iter.len() {
525 0 => Ok(list.clone()),
529 0 => Ok(list.clone()),
@@ -536,12 +540,12 @@ static SLAG: Jet = |ctx, n| {
538static SNAG: Jet = |_ctx, n| {
542static SNAG: Jet = |_ctx, n| {
539− let (a, list) = n.as_cell().ok_or(Tanks::new())?;
543+ let (a, list) = n.as_cell().ok_or(TTanks::new())?;
541 list.list_iter()
545 list.list_iter()
542 .nth(a.as_u32().unwrap() as usize)
546 .nth(a.as_u32().unwrap() as usize)
543 .cloned()
547 .cloned()
544− .ok_or(Tanks::new())
548+ .ok_or(TTanks::new())
547static SNIP: Jet = |_ctx, n| {
551static SNIP: Jet = |_ctx, n| {
@@ -558,7 +562,7 @@ static SNIP: Jet = |_ctx, n| {
560static SNOC: Jet = |_ctx, n| {
564static SNOC: Jet = |_ctx, n| {
561− let (list, b) = n.as_cell().ok_or(Tanks::new())?;
565+ let (list, b) = n.as_cell().ok_or(TTanks::new())?;
563 Ok(Noun::list_refs(
567 Ok(Noun::list_refs(
564 list.list_iter()
568 list.list_iter()
@@ -589,15 +593,15 @@ static SNOC: Jet = |_ctx, n| {
591static SPIN: Jet = |ctx, n| {
595static SPIN: Jet = |ctx, n| {
592− let (list, b) = n.as_cell().ok_or(Tanks::new())?;
596+ let (list, b) = n.as_cell().ok_or(TTanks::new())?;
593− let (acc, gate) = b.as_cell().ok_or(Tanks::new())?;
597+ let (acc, gate) = b.as_cell().ok_or(TTanks::new())?;
595 let mut res = Vec::new();
599 let mut res = Vec::new();
596 let mut acc = acc.clone();
600 let mut acc = acc.clone();
598 for n in list.list_iter() {
602 for n in list.list_iter() {
599 let foo = slam_pulled_gate(ctx, gate, &cell(&n, &acc))?;
603 let foo = slam_pulled_gate(ctx, gate, &cell(&n, &acc))?;
600− let (el, new_acc) = foo.as_cell().ok_or(Tanks::new())?;
604+ let (el, new_acc) = foo.as_cell().ok_or(TTanks::new())?;
601 acc = new_acc.clone();
605 acc = new_acc.clone();
602 res.push(el.clone());
606 res.push(el.clone());
@@ -606,20 +610,20 @@ static SPIN: Jet = |ctx, n| {
608static SPUN: Jet = |ctx, n| {
612static SPUN: Jet = |ctx, n| {
609− let (list, gate) = n.as_cell().ok_or(Tanks::new())?;
613+ let (list, gate) = n.as_cell().ok_or(TTanks::new())?;
611 let mut res = Vec::new();
615 let mut res = Vec::new();
612 let mut acc = gate
616 let mut acc = gate
613 .gate_sample()
617 .gate_sample()
614− .ok_or(Tanks::new())?
618+ .ok_or(TTanks::new())?
615 .as_cell()
619 .as_cell()
616− .ok_or(Tanks::new())?
620+ .ok_or(TTanks::new())?
618 .clone();
622 .clone();
620 for n in list.list_iter() {
624 for n in list.list_iter() {
621 let foo = slam_pulled_gate(ctx, gate, &cell(&n, &acc))?;
625 let foo = slam_pulled_gate(ctx, gate, &cell(&n, &acc))?;
622− let (el, new_acc) = foo.as_cell().ok_or(Tanks::new())?;
626+ let (el, new_acc) = foo.as_cell().ok_or(TTanks::new())?;
623 acc = new_acc.clone();
627 acc = new_acc.clone();
624 res.push(el.clone());
628 res.push(el.clone());
@@ -628,7 +632,7 @@ static SPUN: Jet = |ctx, n| {
630static TURN: Jet = |ctx, n| {
634static TURN: Jet = |ctx, n| {
631− let (list, gate) = n.as_cell().ok_or(Tanks::new())?;
635+ let (list, gate) = n.as_cell().ok_or(TTanks::new())?;
632 Ok(Noun::list_refs(
636 Ok(Noun::list_refs(
633 traverse_iter_result(list.list_iter().map(|x| slam_pulled_gate(ctx, gate, x)))?
637 traverse_iter_result(list.list_iter().map(|x| slam_pulled_gate(ctx, gate, x)))?
@@ -637,7 +641,7 @@ static TURN: Jet = |ctx, n| {
639static WELD: Jet = |_ctx, n| {
643static WELD: Jet = |_ctx, n| {
640− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
644+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
642 Ok(Noun::list_refs(
646 Ok(Noun::list_refs(
643 a.list_iter()
647 a.list_iter()
@@ -670,18 +674,20 @@ static BEX: Jet = |ctx, n| {
672static END: Jet = |ctx, n| {
676static END: Jet = |ctx, n| {
673− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
677+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
674 let bite = a.as_bite();
678 let bite = a.as_bite();
676 let bits = bite.bits();
680 let bits = bite.bits();
678 let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
682 let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
684+ Ok(Rc::new(Noun::Atom(
680− Ok(Rc::new(Noun::Atom(mask & b.as_atom().ok_or(Tanks::new())?)))
685+ mask & b.as_atom().ok_or(TTanks::new())?,
683static CAN: Jet = |ctx, n| {
689static CAN: Jet = |ctx, n| {
684− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
690+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
685 let bloq = a.as_u32().unwrap();
691 let bloq = a.as_u32().unwrap();
686 let bloq_ = 2u32.pow(bloq);
692 let bloq_ = 2u32.pow(bloq);
@@ -696,16 +702,16 @@ static CAN: Jet = |ctx, n| {
696 Some((acc? << bits) | (mask & q.as_atom()?))
702 Some((acc? << bits) | (mask & q.as_atom()?))
699− Ok(Rc::new(Noun::Atom(atom.ok_or(Tanks::new())?)))
705+ Ok(Rc::new(Noun::Atom(atom.ok_or(TTanks::new())?)))
702static CAT: Jet = |_ctx, n| {
708static CAT: Jet = |_ctx, n| {
703− let (bloq, b) = n.as_cell().ok_or(Tanks::new())?;
709+ let (bloq, b) = n.as_cell().ok_or(TTanks::new())?;
704− let (b, c) = b.as_cell().ok_or(Tanks::new())?;
710+ let (b, c) = b.as_cell().ok_or(TTanks::new())?;
706− let bloq = bloq.as_u32().ok_or(Tanks::new())?;
712+ let bloq = bloq.as_u32().ok_or(TTanks::new())?;
707− let b = b.as_atom().ok_or(Tanks::new())?;
713+ let b = b.as_atom().ok_or(TTanks::new())?;
708− let c = c.as_atom().ok_or(Tanks::new())?;
714+ let c = c.as_atom().ok_or(TTanks::new())?;
710 Ok(Rc::new(Noun::Atom(
716 Ok(Rc::new(Noun::Atom(
711 (c << (met(bloq, &b) * 2u32.pow(bloq))) | b,
717 (c << (met(bloq, &b) * 2u32.pow(bloq))) | b,
@@ -713,8 +719,8 @@ static CAT: Jet = |_ctx, n| {
715static MET: Jet = |_ctx, n| {
721static MET: Jet = |_ctx, n| {
716− let (bloq, b) = n.as_cell().ok_or(Tanks::new())?;
722+ let (bloq, b) = n.as_cell().ok_or(TTanks::new())?;
717− let b: Atom = b.as_atom().ok_or(Tanks::new())?.clone();
723+ let b: Atom = b.as_atom().ok_or(TTanks::new())?.clone();
718 let bloq = bloq.as_u32().unwrap();
724 let bloq = bloq.as_u32().unwrap();
720 Ok(Rc::new(Noun::from_u32(met(bloq, &b))))
726 Ok(Rc::new(Noun::from_u32(met(bloq, &b))))
@@ -725,28 +731,28 @@ fn met(bloq: u32, a: &Atom) -> u32 {
727static CUT: Jet = |ctx, n| {
733static CUT: Jet = |ctx, n| {
728− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
734+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
729− let (b, d) = b.as_cell().ok_or(Tanks::new())?;
735+ let (b, d) = b.as_cell().ok_or(TTanks::new())?;
730− let (b, c) = b.as_cell().ok_or(Tanks::new())?;
736+ let (b, c) = b.as_cell().ok_or(TTanks::new())?;
732 let bits = 2u32.pow(a.as_u32().unwrap());
738 let bits = 2u32.pow(a.as_u32().unwrap());
734 let mask = (&ctx.big_uints.one << (bits * c.as_u32().unwrap())) - &ctx.big_uints.one;
740 let mask = (&ctx.big_uints.one << (bits * c.as_u32().unwrap())) - &ctx.big_uints.one;
736 Ok(Rc::new(Noun::Atom(
742 Ok(Rc::new(Noun::Atom(
737− (d.as_atom().ok_or(Tanks::new())? >> (bits * b.as_u32().unwrap())) & mask,
743+ (d.as_atom().ok_or(TTanks::new())? >> (bits * b.as_u32().unwrap())) & mask,
741static FIL: Jet = |ctx, n| {
747static FIL: Jet = |ctx, n| {
742− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
748+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
743− let (b, c) = b.as_cell().ok_or(Tanks::new())?;
749+ let (b, c) = b.as_cell().ok_or(TTanks::new())?;
745 let bits = 2u32.pow(a.as_u32().unwrap());
751 let bits = 2u32.pow(a.as_u32().unwrap());
747 let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
753 let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
749− let src = c.as_atom().ok_or(Tanks::new())? & mask;
755+ let src = c.as_atom().ok_or(TTanks::new())? & mask;
751 let mut target = ctx.big_uints.zero.clone();
757 let mut target = ctx.big_uints.zero.clone();
@@ -758,30 +764,30 @@ static FIL: Jet = |ctx, n| {
760static LSH: Jet = |_ctx, n| {
766static LSH: Jet = |_ctx, n| {
761− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
767+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
762 let a = a.as_bite();
768 let a = a.as_bite();
763− let b = b.as_atom().ok_or(Tanks::new())?;
769+ let b = b.as_atom().ok_or(TTanks::new())?;
765 Ok(Rc::new(Noun::Atom(b << a.bits())))
771 Ok(Rc::new(Noun::Atom(b << a.bits())))
768static RSH: Jet = |_ctx, n| {
774static RSH: Jet = |_ctx, n| {
769− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
775+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
770 let a = a.as_bite();
776 let a = a.as_bite();
771− let b = b.as_atom().ok_or(Tanks::new())?;
777+ let b = b.as_atom().ok_or(TTanks::new())?;
773 Ok(Rc::new(Noun::Atom(b >> a.bits())))
779 Ok(Rc::new(Noun::Atom(b >> a.bits())))
776−static RAP: Jet = |ctx, n| {
782+pub static RAP: Jet = |ctx, n| {
777− let (bloq, b) = n.as_cell().ok_or(Tanks::new())?;
783+ let (bloq, b) = n.as_cell().ok_or(TTanks::new())?;
778 let bloq = bloq.as_u32().unwrap();
784 let bloq = bloq.as_u32().unwrap();
779 let bits = 2u32.pow(bloq);
785 let bits = 2u32.pow(bloq);
781 let mut target = ctx.big_uints.zero.clone();
787 let mut target = ctx.big_uints.zero.clone();
783 for el in b.list_iter().collect::<Vec<_>>().iter().rev() {
789 for el in b.list_iter().collect::<Vec<_>>().iter().rev() {
784− let el = el.as_atom().ok_or(Tanks::new())?;
790+ let el = el.as_atom().ok_or(TTanks::new())?;
785 if el != &ctx.big_uints.zero {
791 if el != &ctx.big_uints.zero {
786 target = (target << (bits * met(bloq, &el))) | el;
792 target = (target << (bits * met(bloq, &el))) | el;
@@ -791,7 +797,7 @@ static RAP: Jet = |ctx, n| {
793static REP: Jet = |ctx, n| {
799static REP: Jet = |ctx, n| {
794− let (bite, b) = n.as_cell().ok_or(Tanks::new())?;
800+ let (bite, b) = n.as_cell().ok_or(TTanks::new())?;
795 let bite = bite.as_bite();
801 let bite = bite.as_bite();
797 let bits = bite.bits();
803 let bits = bite.bits();
@@ -800,18 +806,18 @@ static REP: Jet = |ctx, n| {
800 let mut target = ctx.big_uints.zero.clone();
806 let mut target = ctx.big_uints.zero.clone();
802 for el in b.list_iter().collect::<Vec<_>>().iter().rev() {
808 for el in b.list_iter().collect::<Vec<_>>().iter().rev() {
803− target = (target << bits) | (el.as_atom().ok_or(Tanks::new())? & &mask);
809+ target = (target << bits) | (el.as_atom().ok_or(TTanks::new())? & &mask);
806 Ok(Rc::new(Noun::Atom(target)))
812 Ok(Rc::new(Noun::Atom(target)))
809static REV: Jet = |ctx, n| {
815static REV: Jet = |ctx, n| {
810− let (bloq, b) = n.as_cell().ok_or(Tanks::new())?;
816+ let (bloq, b) = n.as_cell().ok_or(TTanks::new())?;
811− let (len, dat) = b.as_cell().ok_or(Tanks::new())?;
817+ let (len, dat) = b.as_cell().ok_or(TTanks::new())?;
812 let bloq = bloq.as_u32().unwrap();
818 let bloq = bloq.as_u32().unwrap();
813 let len = len.as_u32().unwrap();
819 let len = len.as_u32().unwrap();
814− let mut dat: Atom = dat.as_atom().ok_or(Tanks::new())?.clone();
820+ let mut dat: Atom = dat.as_atom().ok_or(TTanks::new())?.clone();
816 let bits = 2u32.pow(bloq);
822 let bits = 2u32.pow(bloq);
817 let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
823 let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
@@ -827,9 +833,9 @@ static REV: Jet = |ctx, n| {
829static RIP: Jet = |ctx, n| {
835static RIP: Jet = |ctx, n| {
830− let (bite, b) = n.as_cell().ok_or(Tanks::new())?;
836+ let (bite, b) = n.as_cell().ok_or(TTanks::new())?;
831 let bite = bite.as_bite();
837 let bite = bite.as_bite();
832− let mut b: Atom = b.as_atom().ok_or(Tanks::new())?.clone();
838+ let mut b: Atom = b.as_atom().ok_or(TTanks::new())?.clone();
834 let bits = bite.bits();
840 let bits = bite.bits();
835 let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
841 let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
@@ -845,11 +851,11 @@ static RIP: Jet = |ctx, n| {
847static RUN: Jet = |ctx, n| {
853static RUN: Jet = |ctx, n| {
848− let (bite, b) = n.as_cell().ok_or(Tanks::new())?;
854+ let (bite, b) = n.as_cell().ok_or(TTanks::new())?;
849− let (b, gate) = b.as_cell().ok_or(Tanks::new())?;
855+ let (b, gate) = b.as_cell().ok_or(TTanks::new())?;
851 let bite = bite.as_bite();
857 let bite = bite.as_bite();
852− let mut b: Atom = b.as_atom().ok_or(Tanks::new())?.clone();
858+ let mut b: Atom = b.as_atom().ok_or(TTanks::new())?.clone();
854 let bits = bite.bits();
860 let bits = bite.bits();
855 let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
861 let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
@@ -860,7 +866,7 @@ static RUN: Jet = |ctx, n| {
860 target = (target << bits)
866 target = (target << bits)
861 | ((*slam_pulled_gate(ctx, gate, &Rc::new(Noun::Atom(&mask & &b)))?)
867 | ((*slam_pulled_gate(ctx, gate, &Rc::new(Noun::Atom(&mask & &b)))?)
862 .as_atom()
868 .as_atom()
863− .ok_or(Tanks::new())?
869+ .ok_or(TTanks::new())?
864 & &mask);
870 & &mask);
865 b = b >> bits;
871 b = b >> bits;
@@ -869,11 +875,11 @@ static RUN: Jet = |ctx, n| {
871static RUT: Jet = |ctx, n| {
877static RUT: Jet = |ctx, n| {
872− let (bite, b) = n.as_cell().ok_or(Tanks::new())?;
878+ let (bite, b) = n.as_cell().ok_or(TTanks::new())?;
873− let (b, gate) = b.as_cell().ok_or(Tanks::new())?;
879+ let (b, gate) = b.as_cell().ok_or(TTanks::new())?;
875 let bite = bite.as_bite();
881 let bite = bite.as_bite();
876− let mut b: Atom = b.as_atom().ok_or(Tanks::new())?.clone();
882+ let mut b: Atom = b.as_atom().ok_or(TTanks::new())?.clone();
878 let bits = bite.bits();
884 let bits = bite.bits();
879 let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
885 let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
@@ -884,7 +890,7 @@ static RUT: Jet = |ctx, n| {
884 target.push(
890 target.push(
885 (*slam_pulled_gate(ctx, gate, &Rc::new(Noun::Atom(&mask & &b)))?)
891 (*slam_pulled_gate(ctx, gate, &Rc::new(Noun::Atom(&mask & &b)))?)
886 .as_atom()
892 .as_atom()
887− .ok_or(Tanks::new())?
893+ .ok_or(TTanks::new())?
890 b = b >> bits;
896 b = b >> bits;
@@ -894,12 +900,12 @@ static RUT: Jet = |ctx, n| {
896static SEW: Jet = |ctx, n| {
902static SEW: Jet = |ctx, n| {
897− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
903+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
898− let (b, recipient) = b.as_cell().ok_or(Tanks::new())?;
904+ let (b, recipient) = b.as_cell().ok_or(TTanks::new())?;
899− let (sew_start, c) = b.as_cell().ok_or(Tanks::new())?;
905+ let (sew_start, c) = b.as_cell().ok_or(TTanks::new())?;
900− let (number_of_blocks, donor) = c.as_cell().ok_or(Tanks::new())?;
906+ let (number_of_blocks, donor) = c.as_cell().ok_or(TTanks::new())?;
901− let recipient = recipient.as_atom().ok_or(Tanks::new())?;
907+ let recipient = recipient.as_atom().ok_or(TTanks::new())?;
902− let donor = donor.as_atom().ok_or(Tanks::new())?;
908+ let donor = donor.as_atom().ok_or(TTanks::new())?;
904 let bloq = a.as_u32().unwrap();
910 let bloq = a.as_u32().unwrap();
905 let bits = 2u32.pow(bloq);
911 let bits = 2u32.pow(bloq);
@@ -915,12 +921,12 @@ static SEW: Jet = |ctx, n| {
917static SWP: Jet = |ctx, n| {
923static SWP: Jet = |ctx, n| {
918− let (bloq, b) = n.as_cell().ok_or(Tanks::new())?;
924+ let (bloq, b) = n.as_cell().ok_or(TTanks::new())?;
919 let bloq = bloq.as_u32().unwrap();
925 let bloq = bloq.as_u32().unwrap();
920 let bits = 2u32.pow(bloq);
926 let bits = 2u32.pow(bloq);
921 let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
927 let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
923− let mut source = b.as_atom().ok_or(Tanks::new())?.clone();
929+ let mut source = b.as_atom().ok_or(TTanks::new())?.clone();
924 let mut target = ctx.big_uints.zero.clone();
930 let mut target = ctx.big_uints.zero.clone();
926 while source > ctx.big_uints.zero {
932 while source > ctx.big_uints.zero {
@@ -932,7 +938,7 @@ static SWP: Jet = |ctx, n| {
934static XEB: Jet = |_ctx, n| {
940static XEB: Jet = |_ctx, n| {
935− let mut a = n.as_atom().ok_or(Tanks::new())?.clone();
941+ let mut a = n.as_atom().ok_or(TTanks::new())?.clone();
937 let mut c = 0;
943 let mut c = 0;
@@ -949,22 +955,22 @@ static DIS: Jet = |_ctx, n| BINARY_ATOM(n, |a, b| a & b);
949static MIX: Jet = |_ctx, n| BINARY_ATOM(n, |a, b| a ^ b);
955static MIX: Jet = |_ctx, n| BINARY_ATOM(n, |a, b| a ^ b);
951static NOT: Jet = |ctx, n| {
957static NOT: Jet = |ctx, n| {
952− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
958+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
953− let (b, c) = b.as_cell().ok_or(Tanks::new())?;
959+ let (b, c) = b.as_cell().ok_or(TTanks::new())?;
955 let bloq = a.as_u32().unwrap();
961 let bloq = a.as_u32().unwrap();
956 let bits = 2u32.pow(bloq);
962 let bits = 2u32.pow(bloq);
957 let mask = (&ctx.big_uints.one << (bits * b.as_u32().unwrap())) - &ctx.big_uints.one;
963 let mask = (&ctx.big_uints.one << (bits * b.as_u32().unwrap())) - &ctx.big_uints.one;
959− let target = c.as_atom().ok_or(Tanks::new())? ^ &mask;
965+ let target = c.as_atom().ok_or(TTanks::new())? ^ &mask;
961 Ok(Rc::new(Noun::Atom(target)))
967 Ok(Rc::new(Noun::Atom(target)))
964static LAST: Jet = |_ctx, n| {
970static LAST: Jet = |_ctx, n| {
965− let (a, b) = n.as_cell().ok_or(Tanks::new())?;
971+ let (a, b) = n.as_cell().ok_or(TTanks::new())?;
966− let a = a.as_hair().ok_or(Tanks::new())?;
972+ let a = a.as_hair().ok_or(TTanks::new())?;
967− let b = b.as_hair().ok_or(Tanks::new())?;
973+ let b = b.as_hair().ok_or(TTanks::new())?;
968 Ok(Noun::from_hair(last(&a, &b)))
974 Ok(Noun::from_hair(last(&a, &b)))
@@ -985,18 +991,18 @@ fn last<'a>(a: &'a Hair, b: &'a Hair) -> &'a Hair {
987static TRIP: Jet = |_ctx, n| {
993static TRIP: Jet = |_ctx, n| {
988− let a = n.as_atom().ok_or(Tanks::new())?;
994+ let a = n.as_atom().ok_or(TTanks::new())?;
989 Ok(Noun::list(
995 Ok(Noun::list(
990 a.to_bytes_le().iter().map(|b| Noun::from_u32(*b as u32)),
996 a.to_bytes_le().iter().map(|b| Noun::from_u32(*b as u32)),
994static MUK: Jet = |_ctx, n| {
1000static MUK: Jet = |_ctx, n| {
995− let (seed, len) = n.as_cell().ok_or(Tanks::new())?;
1001+ let (seed, len) = n.as_cell().ok_or(TTanks::new())?;
996− let (len, key) = len.as_cell().ok_or(Tanks::new())?;
1002+ let (len, key) = len.as_cell().ok_or(TTanks::new())?;
997− let seed = seed.as_u32().ok_or(Tanks::new())?;
1003+ let seed = seed.as_u32().ok_or(TTanks::new())?;
998− let len = len.as_u32().ok_or(Tanks::new())?;
1004+ let len = len.as_u32().ok_or(TTanks::new())?;
999− let key = key.as_atom().ok_or(Tanks::new())?;
1005+ let key = key.as_atom().ok_or(TTanks::new())?;
1001 Ok(Rc::new(Noun::from_u32(muk(seed, len, key))))
1007 Ok(Rc::new(Noun::from_u32(muk(seed, len, key))))