@@ -8,7 +8,7 @@ use std::{
88};
99
1010use crate::{
11− interpreter::{slam, InterpreterContext},
11+ interpreter::{slam, slam_pulled_gate, InterpreterContext},
1212 noun::{self, cell, Atom, Edge, Hair, Nail, Noun},
1313};
1414
@@ -359,7 +359,7 @@ static LENT: Jet = |_ctx, n| {
359359
360360static LEVY: Jet = |ctx, n| {
361361 let (a, b) = n.as_cell()?;
362− if traverse_iter_option(a.list_iter().map(|n| slam(ctx, b, n)))?
362+ if traverse_iter_option(a.list_iter().map(|n| slam_pulled_gate(ctx, b, n)))?
363363 .iter()
364364 .all(|x| x.is_y())
365365 {
@@ -371,7 +371,7 @@ static LEVY: Jet = |ctx, n| {
371371
372372static LIEN: Jet = |ctx, n| {
373373 let (a, b) = n.as_cell()?;
374− if traverse_iter_option(a.list_iter().map(|n| slam(ctx, b, n)))?
374+ if traverse_iter_option(a.list_iter().map(|n| slam_pulled_gate(ctx, b, n)))?
375375 .iter()
376376 .any(|x| x.is_y())
377377 {
@@ -386,7 +386,7 @@ static MURN: Jet = |ctx, n| {
386386
387387 Some(Noun::list_refs(
388388 a.list_iter()
389− .filter_map(|n| slam(ctx, b, n)?.as_unit().cloned())
389+ .filter_map(|n| slam_pulled_gate(ctx, b, n)?.as_unit().cloned())
390390 .collect::<Vec<_>>()
391391 .iter(),
392392 ))
@@ -407,7 +407,7 @@ static REEL: Jet = |ctx, n| {
407407 Some(gate.gate_sample()?.as_cell()?.1.clone()),
408408 |acc, next| {
409409 let acc = acc?;
410− slam(ctx, gate, &cell(&next, &acc))
410+ slam_pulled_gate(ctx, gate, &cell(&next, &acc))
411411 },
412412 )
413413};
@@ -419,7 +419,7 @@ static ROLL: Jet = |ctx, n| {
419419 Some(gate.clone().gate_sample()?.as_cell()?.1.clone()),
420420 |acc, next| {
421421 let acc = acc?;
422− slam(ctx, gate, &cell(&next, &acc))
422+ slam_pulled_gate(ctx, gate, &cell(&next, &acc))
423423 },
424424 )
425425};
@@ -439,7 +439,10 @@ static SCAG: Jet = |_ctx, n| {
439439static SKID: Jet = |ctx, n| {
440440 let (list, gate) = n.as_cell()?;
441441
442− let slammed_n = traverse_iter_option(list.list_iter().map(|n| Some((slam(ctx, gate, n)?, n))))?;
442+ let slammed_n = traverse_iter_option(
443+ list.list_iter()
444+ .map(|n| Some((slam_pulled_gate(ctx, gate, n)?, n))),
445+ )?;
443446 let (ys, ns): (Vec<_>, _) = slammed_n.iter().partition(|(l, _)| l.is_y());
444447
445448 Some(cell(
@@ -452,10 +455,13 @@ static SKIM: Jet = |ctx, n| {
452455 let (list, gate) = n.as_cell()?;
453456
454457 Some(Noun::list_refs(
455− traverse_iter_option(list.list_iter().map(|n| Some((slam(ctx, gate, n)?, n))))?
456− .iter()
457− .filter(|(l, _)| l.is_y())
458− .map(|(_, x)| *x),
458+ traverse_iter_option(
459+ list.list_iter()
460+ .map(|n| Some((slam_pulled_gate(ctx, gate, n)?, n))),
461+ )?
462+ .iter()
463+ .filter(|(l, _)| l.is_y())
464+ .map(|(_, x)| *x),
459465 ))
460466};
461467
@@ -463,11 +469,14 @@ static SKIP: Jet = |ctx, n| {
463469 let (list, gate) = n.as_cell()?;
464470
465471 Some(Noun::list_refs(
466− traverse_iter_option(list.list_iter().map(|n| Some((slam(ctx, gate, n)?, n))))?
467− .iter()
468− .filter(|(l, _)| l.is_y())
469− .map(|(_, x)| x)
470− .cloned(),
472+ traverse_iter_option(
473+ list.list_iter()
474+ .map(|n| Some((slam_pulled_gate(ctx, gate, n)?, n))),
475+ )?
476+ .iter()
477+ .filter(|(l, _)| l.is_y())
478+ .map(|(_, x)| x)
479+ .cloned(),
471480 ))
472481};
473482
@@ -545,7 +554,7 @@ static SPIN: Jet = |ctx, n| {
545554 let mut acc = acc.clone();
546555
547556 for n in list.list_iter() {
548− let foo = slam(ctx, gate, &cell(&n, &acc))?;
557+ let foo = slam_pulled_gate(ctx, gate, &cell(&n, &acc))?;
549558 let (el, new_acc) = foo.as_cell()?;
550559 acc = new_acc.clone();
551560 res.push(el.clone());
@@ -561,7 +570,7 @@ static SPUN: Jet = |ctx, n| {
561570 let mut acc = gate.gate_sample()?.as_cell()?.1.clone();
562571
563572 for n in list.list_iter() {
564− let foo = slam(ctx, gate, &cell(&n, &acc))?;
573+ let foo = slam_pulled_gate(ctx, gate, &cell(&n, &acc))?;
565574 let (el, new_acc) = foo.as_cell()?;
566575 acc = new_acc.clone();
567576 res.push(el.clone());
@@ -573,7 +582,7 @@ static SPUN: Jet = |ctx, n| {
573582static TURN: Jet = |ctx, n| {
574583 let (list, gate) = n.as_cell()?;
575584 Some(Noun::list_refs(
576− traverse_iter_option(list.list_iter().map(|x| slam(ctx, gate, x)))?.iter(),
585+ traverse_iter_option(list.list_iter().map(|x| slam_pulled_gate(ctx, gate, x)))?.iter(),
577586 ))
578587};
579588
@@ -797,7 +806,8 @@ static RUN: Jet = |ctx, n| {
797806
798807 while b > ctx.big_uints.zero {
799808 target = (target << bits)
800− | ((*slam(ctx, gate, &Rc::new(Noun::Atom(&mask & &b)))?).as_atom()? & &mask);
809+ | ((*slam_pulled_gate(ctx, gate, &Rc::new(Noun::Atom(&mask & &b)))?).as_atom()?
810+ & &mask);
801811 b = b >> bits;
802812 }
803813
@@ -817,7 +827,9 @@ static RUT: Jet = |ctx, n| {
817827 let mut target = Vec::new();
818828
819829 while b > ctx.big_uints.zero {
820− target.push((*slam(ctx, gate, &Rc::new(Noun::Atom(&mask & &b)))?).as_atom()? & &mask);
830+ target.push(
831+ (*slam_pulled_gate(ctx, gate, &Rc::new(Noun::Atom(&mask & &b)))?).as_atom()? & &mask,
832+ );
821833 b = b >> bits;
822834 }
823835