added captures to values

main
ondra05 2022-07-21 21:54:28 +02:00
parent fa1ffff146
commit b18667c5e8
1 changed files with 20 additions and 3 deletions

View File

@ -4,6 +4,7 @@ use std::{
borrow::Cow,
collections::BTreeMap,
fmt::{Display, Write},
rc::Rc,
};
/// A Wisp value
@ -13,7 +14,7 @@ pub enum Value<'a> {
Vector(Vec<Self>),
Map(BTreeMap<Self, Self>),
Module(Module<'a>),
Function(Function),
Function(Function<'a>),
Symbol(Symbol<'a>),
Keyword(Cow<'a, str>),
Bool(bool),
@ -24,12 +25,28 @@ pub enum Value<'a> {
#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct Module<'a> {
members: BTreeMap<u64, Value<'a>>,
members: BTreeMap<u64, Rc<Value<'a>>>,
symbol_table: BTreeMap<String, u64>,
}
#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct Function {}
pub struct Function<'a> {
// TODO: bytecode
captures: Box<[Capture<'a>]>,
symbol_table: BTreeMap<Symbol<'a>, SymbolMapping>,
}
#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub enum Capture<'a> {
Reference(Rc<Value<'a>>),
Owned(Value<'a>),
}
#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub enum SymbolMapping {
Local(u64),
Capture(u64),
}
#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub enum Symbol<'a> {