Coerce indexing assignments into non-carts

This commit is contained in:
Alex Bethel 2021-11-05 16:18:07 -06:00
parent 9712d58962
commit 99f84dfd5b

View file

@ -11,6 +11,7 @@ use std::{
cell::RefCell,
collections::{HashMap, VecDeque},
io::{stdin, stdout, Read, Write},
mem::swap,
ops::Range,
process::exit,
rc::Rc,
@ -266,7 +267,18 @@ impl ExecEnv {
c.insert(index, Rc::clone(&next_cell));
}
}
_ => todo!(),
x => {
// Annoying borrow checker dance
// to move *x.
let mut tmp = Value::Nul;
swap(&mut tmp, x);
let mut c = tmp.into_cart();
next_cell =
Rc::new(RefCell::new(Value::Cart(Default::default())));
c.insert(index, Rc::clone(&next_cell));
*x = Value::Cart(c);
}
}
cell = next_cell;
}