@@ -323,24 +323,22 @@ fn ram(ctx: &mut InterpreterContext, tank: Rc<Noun>) -> Option<String> {
323 Noun::Cell { p, q, .. } => {
323 Noun::Cell { p, q, .. } => {
324 let tag = p.as_atom()?.to_bytes_le();
324 let tag = p.as_atom()?.to_bytes_le();
325 if tag == b"leaf" {
325 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()?;
327 Some(String::from(str::from_utf8_mut(&mut bytes).ok()?))
327 Some(String::from(str::from_utf8_mut(&mut bytes).ok()?))
328 } else if tag == b"palm" {
328 } else if tag == b"palm" {
329− let (mid, foo) = q.as_cell()?;
329+ let (spacers, tanks) = q.as_cell()?;
330− let (open, foo) = foo.as_cell()?;
330+ let (mid, open, flat_open, close) = spacers.tuple_4()?;
331− let (flat_open, foo) = foo.as_cell()?;
332− let (close, tanks) = foo.as_cell()?;
334− let mut mid = mid.as_bytes()?;
332+ let mut mid = crip(ctx, mid.clone()).ok()?.as_bytes()?;
335 let mid = String::from(str::from_utf8_mut(&mut mid).ok()?);
333 let mid = String::from(str::from_utf8_mut(&mut mid).ok()?);
337− let mut open = open.as_bytes()?;
335+ let mut open = crip(ctx, open.clone()).ok()?.as_bytes()?;
338 let open = String::from(str::from_utf8_mut(&mut open).ok()?);
336 let open = String::from(str::from_utf8_mut(&mut open).ok()?);
340− let mut flat_open = flat_open.as_bytes()?;
338+ let mut flat_open = crip(ctx, flat_open.clone()).ok()?.as_bytes()?;
341 let flat_open = String::from(str::from_utf8_mut(&mut flat_open).ok()?);
339 let flat_open = String::from(str::from_utf8_mut(&mut flat_open).ok()?);
343− let mut close = close.as_bytes()?;
341+ let mut close = crip(ctx, close.clone()).ok()?.as_bytes()?;
344 let close = String::from(str::from_utf8_mut(&mut close).ok()?);
342 let close = String::from(str::from_utf8_mut(&mut close).ok()?);
346 let mut target = String::new();
344 let mut target = String::new();
@@ -363,17 +361,16 @@ fn ram(ctx: &mut InterpreterContext, tank: Rc<Noun>) -> Option<String> {
364 Some(target)
362 Some(target)
365 } else if tag == b"rose" {
363 } else if tag == b"rose" {
366− let (mid, foo) = q.as_cell()?;
364+ let (spacers, tanks) = q.as_cell()?;
367− let (open, foo) = foo.as_cell()?;
365+ let (mid, open, close) = spacers.tuple_3()?;
368− let (close, tanks) = foo.as_cell()?;
370− let mut mid = mid.as_bytes()?;
367+ let mut mid = crip(ctx, mid.clone()).ok()?.as_bytes()?;
371 let mid = String::from(str::from_utf8_mut(&mut mid).ok()?);
368 let mid = String::from(str::from_utf8_mut(&mut mid).ok()?);
373− let mut open = open.as_bytes()?;
370+ let mut open = crip(ctx, open.clone()).ok()?.as_bytes()?;
374 let open = String::from(str::from_utf8_mut(&mut open).ok()?);
371 let open = String::from(str::from_utf8_mut(&mut open).ok()?);
376− let mut close = close.as_bytes()?;
373+ let mut close = crip(ctx, close.clone()).ok()?.as_bytes()?;
377 let close = String::from(str::from_utf8_mut(&mut close).ok()?);
374 let close = String::from(str::from_utf8_mut(&mut close).ok()?);
379 let mut target = String::new();
376 let mut target = String::new();
@@ -417,9 +414,13 @@ pub fn ram_ttank(ctx: &mut InterpreterContext, ttank: TTank) -> String {
417 let tank = match tar(ctx, subj.clone(), &q) {
414 let tank = match tar(ctx, subj.clone(), &q) {
418 Ok(gate) => match eval_pulled_gate(ctx, gate) {
415 Ok(gate) => match eval_pulled_gate(ctx, gate) {
419 Ok(tank) => tank,
416 Ok(tank) => tank,
420− Err(_) => return String::new(),
418+ return String::new();
422− Err(_) => return String::new(),
422+ return String::new();
424 ram(ctx, tank).unwrap_or(String::new())
425 ram(ctx, tank).unwrap_or(String::new())