From 19fffd50634bd1d70db49a61ba1bfb084b8145c6 Mon Sep 17 00:00:00 2001 From: greg Date: Wed, 20 Jan 2016 03:52:11 -0800 Subject: [PATCH] Variable binding infrastructure --- src/eval.rs | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/eval.rs b/src/eval.rs index ac778fc..0098fde 100644 --- a/src/eval.rs +++ b/src/eval.rs @@ -1,13 +1,32 @@ +use std::collections::HashMap; use parser::{AST, ASTNode, Expression}; +struct Varmap { + map: HashMap +} + +impl Varmap { + fn new() -> Varmap { + Varmap { map: HashMap::new() } + } + + fn add_binding(&mut self, var: String, value: Expression) { + self.map.insert(var, value); + } + + fn lookup_binding(&mut self, var: String) -> Option<&Expression> { + self.map.get(&var) + } +} + pub struct Evaluator { - data: bool, + varmap: Varmap } impl Evaluator { pub fn new() -> Evaluator { - Evaluator { data: false } + Evaluator { varmap: Varmap::new() } } pub fn run(&mut self, ast: AST) -> Vec {