on master help sign in
run
commitc67f957db8d804556c9a6cd22f532bed25394096 authoriko <mail@iko.soy> dateMon 26 Aug 2024, 01:47 (2 years ago) parent969b669
1 file changed+25
nock/src/jets.rs+25
nock/src/jets.rs+25
@@ -74,6 +74,7 @@ pub fn generate_jets() -> Jets {
7474 (92956425869648916777812729456192604084, REP),
7575 (302196507237993702819920888576650809366, REV),
7676 (111192034817574564051316537756194881830, RIP),
77+ (194882429025651072335997865399571359986, RUN),
7778 ])
7879}
7980
@@ -751,3 +752,27 @@ static RIP: Jet = |ctx, n| {
751752
752753 Noun::list_refs(target.iter().cloned())
753754};
755+
756+static RUN: Jet = |ctx, n| {
757+ let (bite, b) = n.as_cell().unwrap();
758+ let (b, gate) = b.as_cell().unwrap();
759+
760+ let bite = bite.as_bite().unwrap();
761+ let mut b: Atom = b.as_atom().unwrap().clone();
762+
763+ let bits = bite.bits();
764+ let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
765+
766+ let mut target = ctx.big_uints.zero.clone();
767+
768+ while b > ctx.big_uints.zero {
769+ target = (target << bits)
770+ | ((*slam(ctx, gate.clone(), Rc::new(Noun::Atom(&mask & &b))))
771+ .as_atom()
772+ .unwrap()
773+ & &mask);
774+ b = b >> bits;
775+ }
776+
777+ Rc::new(Noun::Atom(target))
778+};