Coerce indexing assignments into non-carts

This commit is contained in:
Alex Bethel 2021-11-05 16:18:07 -06:00
parent 5d6ac150ab
commit 6849f7f296

View file

@ -11,6 +11,7 @@ use std::{
cell::RefCell, cell::RefCell,
collections::{HashMap, VecDeque}, collections::{HashMap, VecDeque},
io::{stdin, stdout, Read, Write}, io::{stdin, stdout, Read, Write},
mem::swap,
ops::Range, ops::Range,
process::exit, process::exit,
rc::Rc, rc::Rc,
@ -266,7 +267,18 @@ impl ExecEnv {
c.insert(index, Rc::clone(&next_cell)); 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; cell = next_cell;
} }