on master help sign in
Actually fix slog
commitf6a4944ea002d82deb991028971ee0d63ae5a528 authoriko <mail@iko.soy> dateThu 14 Nov 2024, 11:51 (2 years ago) parent7b56ca8
4 files changed+79−27
nock/src/interpreter.rs+18−17 nock/src/noun.rs+46 nock/wock.hoon+15−10 wock.nock
nock/src/interpreter.rs+18−17
@@ -323,24 +323,22 @@ fn ram(ctx: &mut InterpreterContext, tank: Rc<Noun>) -> Option<String> {
323323 Noun::Cell { p, q, .. } => {
324324 let tag = p.as_atom()?.to_bytes_le();
325325 if tag == b"leaf" {
326− let mut bytes = crip(ctx, q.clone()).ok()?.as_atom()?.to_bytes_le();
326+ let mut bytes = crip(ctx, q.clone()).ok()?.as_bytes()?;
327327 Some(String::from(str::from_utf8_mut(&mut bytes).ok()?))
328328 } else if tag == b"palm" {
329− let (mid, foo) = q.as_cell()?;
330− let (open, foo) = foo.as_cell()?;
331− let (flat_open, foo) = foo.as_cell()?;
332− let (close, tanks) = foo.as_cell()?;
329+ let (spacers, tanks) = q.as_cell()?;
330+ let (mid, open, flat_open, close) = spacers.tuple_4()?;
333331
334− let mut mid = mid.as_bytes()?;
332+ let mut mid = crip(ctx, mid.clone()).ok()?.as_bytes()?;
335333 let mid = String::from(str::from_utf8_mut(&mut mid).ok()?);
336334
337− let mut open = open.as_bytes()?;
335+ let mut open = crip(ctx, open.clone()).ok()?.as_bytes()?;
338336 let open = String::from(str::from_utf8_mut(&mut open).ok()?);
339337
340− let mut flat_open = flat_open.as_bytes()?;
338+ let mut flat_open = crip(ctx, flat_open.clone()).ok()?.as_bytes()?;
341339 let flat_open = String::from(str::from_utf8_mut(&mut flat_open).ok()?);
342340
343− let mut close = close.as_bytes()?;
341+ let mut close = crip(ctx, close.clone()).ok()?.as_bytes()?;
344342 let close = String::from(str::from_utf8_mut(&mut close).ok()?);
345343
346344 let mut target = String::new();
@@ -363,17 +361,16 @@ fn ram(ctx: &mut InterpreterContext, tank: Rc<Noun>) -> Option<String> {
363361
364362 Some(target)
365363 } else if tag == b"rose" {
366− let (mid, foo) = q.as_cell()?;
367− let (open, foo) = foo.as_cell()?;
368− let (close, tanks) = foo.as_cell()?;
364+ let (spacers, tanks) = q.as_cell()?;
365+ let (mid, open, close) = spacers.tuple_3()?;
369366
370− let mut mid = mid.as_bytes()?;
367+ let mut mid = crip(ctx, mid.clone()).ok()?.as_bytes()?;
371368 let mid = String::from(str::from_utf8_mut(&mut mid).ok()?);
372369
373− let mut open = open.as_bytes()?;
370+ let mut open = crip(ctx, open.clone()).ok()?.as_bytes()?;
374371 let open = String::from(str::from_utf8_mut(&mut open).ok()?);
375372
376− let mut close = close.as_bytes()?;
373+ let mut close = crip(ctx, close.clone()).ok()?.as_bytes()?;
377374 let close = String::from(str::from_utf8_mut(&mut close).ok()?);
378375
379376 let mut target = String::new();
@@ -417,9 +414,13 @@ pub fn ram_ttank(ctx: &mut InterpreterContext, ttank: TTank) -> String {
417414 let tank = match tar(ctx, subj.clone(), &q) {
418415 Ok(gate) => match eval_pulled_gate(ctx, gate) {
419416 Ok(tank) => tank,
420− Err(_) => return String::new(),
417+ Err(_) => {
418+ return String::new();
419+ }
421420 },
422− Err(_) => return String::new(),
421+ Err(_) => {
422+ return String::new();
423+ }
423424 };
424425 ram(ctx, tank).unwrap_or(String::new())
425426}
nock/src/noun.rs+46
@@ -111,6 +111,52 @@ impl<'a> Noun {
111111 }
112112 }
113113
114+ pub fn tuple_2(self: &Self) -> Option<(&Rc<Noun>, &Rc<Noun>)> {
115+ self.as_cell()
116+ }
117+
118+ pub fn tuple_3(self: &Self) -> Option<(&Rc<Noun>, &Rc<Noun>, &Rc<Noun>)> {
119+ let (a, b) = self.as_cell()?;
120+ let (b, c) = b.as_cell()?;
121+
122+ Some((a, b, c))
123+ }
124+ pub fn tuple_4(self: &Self) -> Option<(&Rc<Noun>, &Rc<Noun>, &Rc<Noun>, &Rc<Noun>)> {
125+ let (a, b) = self.as_cell()?;
126+ let (b, c) = b.as_cell()?;
127+ let (c, d) = c.as_cell()?;
128+
129+ Some((a, b, c, d))
130+ }
131+
132+ pub fn tuple_5(self: &Self) -> Option<(&Rc<Noun>, &Rc<Noun>, &Rc<Noun>, &Rc<Noun>, &Rc<Noun>)> {
133+ let (a, b) = self.as_cell()?;
134+ let (b, c) = b.as_cell()?;
135+ let (c, d) = c.as_cell()?;
136+ let (d, e) = d.as_cell()?;
137+
138+ Some((a, b, c, d, e))
139+ }
140+
141+ pub fn tuple_6(
142+ self: &Self,
143+ ) -> Option<(
144+ &Rc<Noun>,
145+ &Rc<Noun>,
146+ &Rc<Noun>,
147+ &Rc<Noun>,
148+ &Rc<Noun>,
149+ &Rc<Noun>,
150+ )> {
151+ let (a, b) = self.as_cell()?;
152+ let (b, c) = b.as_cell()?;
153+ let (c, d) = c.as_cell()?;
154+ let (d, e) = d.as_cell()?;
155+ let (e, f) = e.as_cell()?;
156+
157+ Some((a, b, c, d, e, f))
158+ }
159+
114160 pub fn is_sig(self: &Self) -> bool {
115161 match self {
116162 Noun::Atom(n) if *n == Atom::ZERO => true,
nock/wock.hoon+15−10
@@ -1,16 +1,21 @@
11=>
22|%
3+++ hop
4+ |$ step
5+ $%
6+ [%fetch request:http]
7+ ==
38++ wock-app
4− |$ [model event]
9+ |$ [model step]
510 $_ ^?
611 |%
712 ++ init *model
813 ++ view |~ model *manx
9− ++ move |~ [model event] *model
14+ ++ move |~ [model step] *model
1015 --
1116++ app
12− |* [model=mold event=mold]
13− |= app=(wock-app model event)
17+ |* [model=mold step=mold]
18+ |= app=(wock-app model step)
1419 |= [cmd=@tas args=*]
1520 ?+ cmd !!
1621 %init
@@ -18,19 +23,19 @@
1823 %view
1924 (view.app (model args))
2025 %move
21− =/ [=model event-tape=tape payload=*] (,[model tape *] args)
22− (move.app [model (event [(crip event-tape) payload])])
26+ =/ [=model step-tape=tape payload=*] (,[model tape *] args)
27+ (move.app [model (step [(crip step-tape) payload])])
2328 ==
2429--
2530=>
2631|%
27−+$ event
32++$ step
2833 $%
2934 [%inc ~]
3035 [%dec ~]
3136 ==
3237--
33−%- (app @ud event)
38+%- (app @ud step)
3439|%
3540++ view
3641 |= count=@ud
@@ -40,9 +45,9 @@
4045 ;button(on-click "inc"): +
4146 ;button(on-click "dec"): -
4247 ==
43−++ init 8
48+++ init 11
4449++ move
45− |= [model=@ud step=event]
50+ |= [model=@ud step=step]
4651 ^- @ud
4752 ?- -.step
4853 %inc +(model)
wock.nock

Binary file not shown.