I dunno
This commit is contained in:
parent
a08134a747
commit
97df2fa344
@ -11,7 +11,7 @@ use typechecking::TypeContext;
|
|||||||
|
|
||||||
pub struct State<'a> {
|
pub struct State<'a> {
|
||||||
values: StateStack<'a, Rc<String>, ValueEntry>,
|
values: StateStack<'a, Rc<String>, ValueEntry>,
|
||||||
type_context_handle: Option<Rc<RefCell<TypeContext>>>,
|
type_context_handle: Rc<RefCell<TypeContext>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! builtin_binding {
|
macro_rules! builtin_binding {
|
||||||
@ -21,7 +21,7 @@ macro_rules! builtin_binding {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> State<'a> {
|
impl<'a> State<'a> {
|
||||||
pub fn new(type_context_handle: Option<Rc<RefCell<TypeContext>>>) -> State<'a> {
|
pub fn new(type_context_handle: Rc<RefCell<TypeContext>>) -> State<'a> {
|
||||||
let mut values = StateStack::new(Some(format!("global")));
|
let mut values = StateStack::new(Some(format!("global")));
|
||||||
builtin_binding!("print", values);
|
builtin_binding!("print", values);
|
||||||
builtin_binding!("println", values);
|
builtin_binding!("println", values);
|
||||||
@ -261,6 +261,10 @@ impl<'a> State<'a> {
|
|||||||
use self::ValueEntry::*;
|
use self::ValueEntry::*;
|
||||||
//TODO add a layer of indirection here to talk to the symbol table first, and only then look up
|
//TODO add a layer of indirection here to talk to the symbol table first, and only then look up
|
||||||
//in the values table
|
//in the values table
|
||||||
|
|
||||||
|
let type_context = self.type_context_handle.borrow();
|
||||||
|
type_context.symbol_table
|
||||||
|
|
||||||
match self.values.lookup(&name) {
|
match self.values.lookup(&name) {
|
||||||
None => return Err(format!("Value {} not found", *name)),
|
None => return Err(format!("Value {} not found", *name)),
|
||||||
Some(lookup) => match lookup {
|
Some(lookup) => match lookup {
|
||||||
|
@ -42,7 +42,7 @@ impl Schala {
|
|||||||
let type_context = Rc::new(RefCell::new(typechecking::TypeContext::new()));
|
let type_context = Rc::new(RefCell::new(typechecking::TypeContext::new()));
|
||||||
Schala {
|
Schala {
|
||||||
type_context: type_context.clone(),
|
type_context: type_context.clone(),
|
||||||
state: eval::State::new(Some(type_context)),
|
state: eval::State::new(type_context),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ use parsing;
|
|||||||
pub struct TypeContext {
|
pub struct TypeContext {
|
||||||
type_var_count: u64,
|
type_var_count: u64,
|
||||||
bindings: HashMap<Rc<String>, Type>,
|
bindings: HashMap<Rc<String>, Type>,
|
||||||
symbol_table: SymbolTable
|
pub symbol_table: SymbolTable
|
||||||
}
|
}
|
||||||
|
|
||||||
//cf. p. 150 or so of Language Implementation Patterns
|
//cf. p. 150 or so of Language Implementation Patterns
|
||||||
|
Loading…
Reference in New Issue
Block a user