1
0

Improve Map interface; Clean up

This commit is contained in:
Jeff 2023-12-29 14:52:51 -05:00
parent 37a9a37c72
commit 3c729bea6e
4 changed files with 14 additions and 17 deletions

View File

@ -27,9 +27,9 @@ impl AbstractTree for Use {
fn run(&self, _source: &str, context: &Map) -> Result<Value> {
let file_contents = read_to_string(&self.path)?;
let mut file_context = Map::new();
let file_context = Map::new();
interpret_with_context(&file_contents, &mut file_context)?;
interpret_with_context(&file_contents, file_context.clone())?;
for (key, (value, r#type)) in file_context.variables()?.iter() {
context.set(key.clone(), value.clone(), Some(r#type.clone()))?;

View File

@ -18,9 +18,7 @@ use crate::{language, AbstractTree, Error, Map, Result, Root, Value};
/// assert_eq!(interpret("1 + 2 + 3"), Ok(Value::Integer(6)));
/// ```
pub fn interpret(source: &str) -> Result<Value> {
let mut context = Map::new();
interpret_with_context(source, &mut context)
interpret_with_context(source, Map::new())
}
/// Interpret the given source code with the given context.
@ -29,7 +27,7 @@ pub fn interpret(source: &str) -> Result<Value> {
///
/// ```rust
/// # use dust_lang::*;
/// let mut context = Map::new();
/// let context = Map::new();
///
/// context.set("one".into(), 1.into(), None);
/// context.set("two".into(), 2.into(), None);
@ -38,11 +36,11 @@ pub fn interpret(source: &str) -> Result<Value> {
/// let dust_code = "four = 4 one + two + three + four";
///
/// assert_eq!(
/// interpret_with_context(dust_code, &mut context),
/// interpret_with_context(dust_code, context),
/// Ok(Value::Integer(10))
/// );
/// ```
pub fn interpret_with_context(source: &str, context: &mut Map) -> Result<Value> {
pub fn interpret_with_context(source: &str, context: Map) -> Result<Value> {
let mut parser = Parser::new();
parser.set_language(language())?;
@ -53,16 +51,16 @@ pub fn interpret_with_context(source: &str, context: &mut Map) -> Result<Value>
}
/// A source code interpreter for the Dust language.
pub struct Interpreter<'c, 's> {
pub struct Interpreter<'s> {
parser: Parser,
context: &'c mut Map,
context: Map,
source: &'s str,
syntax_tree: Option<TSTree>,
abstract_tree: Option<Root>,
}
impl<'c, 's> Interpreter<'c, 's> {
pub fn new(context: &'c mut Map, source: &'s str) -> Result<Self> {
impl<'s> Interpreter<'s> {
pub fn new(context: Map, source: &'s str) -> Result<Self> {
let mut parser = Parser::new();
parser.set_language(language())?;

View File

@ -57,7 +57,7 @@ fn main() {
"".to_string()
};
let mut context = Map::new();
let context = Map::new();
if let Some(input) = args.input {
context
@ -76,7 +76,7 @@ fn main() {
let mut parser = TSParser::new();
parser.set_language(language()).unwrap();
let mut interpreter = Interpreter::new(&mut context, &source).unwrap();
let mut interpreter = Interpreter::new(context, &source).unwrap();
if args.interactive {
loop {
@ -180,7 +180,7 @@ impl Highlighter for DustReadline {
}
fn run_cli_shell() {
let mut context = Map::new();
let context = Map::new();
let mut rl: Editor<DustReadline, DefaultHistory> = Editor::new().unwrap();
rl.set_helper(Some(DustReadline::new()));
@ -197,7 +197,7 @@ fn run_cli_shell() {
rl.add_history_entry(line).unwrap();
let eval_result = interpret_with_context(line, &mut context);
let eval_result = interpret_with_context(line, context.clone());
match eval_result {
Ok(value) => println!("{value}"),

View File

@ -1 +0,0 @@