59 lines
1.1 KiB
Rust
59 lines
1.1 KiB
Rust
use imbl::{HashMap, Vector};
|
|
use index_vec::Idx;
|
|
use std::cell::RefCell;
|
|
use std::ops::Range;
|
|
use std::rc::Rc;
|
|
|
|
struct Word(&'static str);
|
|
|
|
struct Keyword(&'static str);
|
|
|
|
struct Interned(&'static str);
|
|
|
|
enum StringPart {
|
|
Word(&'static str),
|
|
Data(&'static str),
|
|
Inline(&'static str),
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq)]
|
|
struct LBox {
|
|
name: usize,
|
|
cell: RefCell<Value>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq)]
|
|
struct Fn {
|
|
name: &'static str,
|
|
body: Vec<String>,
|
|
//...etc
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq)]
|
|
enum Value {
|
|
Nil,
|
|
Placeholder,
|
|
Boolean(bool),
|
|
Keyword(usize),
|
|
Interned(usize),
|
|
FnDecl(usize),
|
|
String(Rc<String>),
|
|
Number(f64),
|
|
Tuple(Rc<Vec<Value>>),
|
|
List(Box<Vector<Value>>),
|
|
Dict(Box<HashMap<&'static str, Value>>),
|
|
Box(Rc<LBox>),
|
|
Fn(Rc<RefCell<Fn>>),
|
|
}
|
|
|
|
fn futz() {
|
|
let foo: &'static str = "foo";
|
|
let baz: Vec<u8> = vec![];
|
|
let bar: Range<usize> = 1..3;
|
|
let quux: Vector<u8> = Vector::new();
|
|
let fuzz = Rc::new(quux);
|
|
let blah = Box::new(foo);
|
|
let val = Value::Number(12.09);
|
|
let foo: f64 = 12.0;
|
|
}
|