diff --git a/dust-lang/src/abstract_tree/built_in_function_call.rs b/dust-lang/src/abstract_tree/built_in_function_call.rs index e710d52..0c5145b 100644 --- a/dust-lang/src/abstract_tree/built_in_function_call.rs +++ b/dust-lang/src/abstract_tree/built_in_function_call.rs @@ -1,4 +1,8 @@ -use std::{io::stdin, thread, time::Duration}; +use std::{ + io::{stdin, stdout, Write}, + thread, + time::Duration, +}; use crate::{ abstract_tree::{Action, Type}, @@ -47,7 +51,9 @@ impl AbstractNode for BuiltInFunctionCall { stdin().read_line(&mut buffer)?; - Ok(Action::Return(Value::string(buffer))) + Ok(Action::Return(Value::string( + buffer.strip_suffix('\n').unwrap_or(&buffer), + ))) } BuiltInFunctionCall::Sleep(expression) => { let action = expression.clone().run(context, _manage_memory)?; @@ -76,7 +82,11 @@ impl AbstractNode for BuiltInFunctionCall { }; if let ValueInner::String(output) = value.inner().as_ref() { - println!("{output}"); + let mut stdout = stdout(); + + stdout.write_all(output.as_bytes())?; + stdout.write(b"\n")?; + stdout.flush()?; } Ok(Action::None) diff --git a/dust-lang/src/abstract_tree/map_index.rs b/dust-lang/src/abstract_tree/map_index.rs index 79c7dfe..aadd398 100644 --- a/dust-lang/src/abstract_tree/map_index.rs +++ b/dust-lang/src/abstract_tree/map_index.rs @@ -28,7 +28,7 @@ impl AbstractNode for MapIndex { (&self.collection, &self.index) { let collection = - if let Some(collection) = context.use_value(&collection_identifier.item)? { + if let Some(collection) = context.get_value(&collection_identifier.item)? { collection } else { return Err(ValidationError::VariableNotFound { diff --git a/dust-lang/src/parser.rs b/dust-lang/src/parser.rs index cf4a78b..9b2cff2 100644 --- a/dust-lang/src/parser.rs +++ b/dust-lang/src/parser.rs @@ -62,7 +62,7 @@ pub fn parser<'src>( Token::Boolean(boolean) => ValueNode::Boolean(boolean), Token::Float(float) => ValueNode::Float(float), Token::Integer(integer) => ValueNode::Integer(integer), - Token::String(string) => ValueNode::String(string.to_string()), + Token::String(text) => ValueNode::String(text.to_string()), } .map_with(|value, state| Expression::Value(value.with_position(state.span())));