Rewrite io.write_line built-in; Fix memory bug

This commit is contained in:
Jeff 2024-04-27 05:45:39 -04:00
parent 2b546e7b63
commit 70f55c85f4
3 changed files with 15 additions and 5 deletions

View File

@ -1,4 +1,8 @@
use std::{io::stdin, thread, time::Duration}; use std::{
io::{stdin, stdout, Write},
thread,
time::Duration,
};
use crate::{ use crate::{
abstract_tree::{Action, Type}, abstract_tree::{Action, Type},
@ -47,7 +51,9 @@ impl AbstractNode for BuiltInFunctionCall {
stdin().read_line(&mut buffer)?; 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) => { BuiltInFunctionCall::Sleep(expression) => {
let action = expression.clone().run(context, _manage_memory)?; 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() { 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) Ok(Action::None)

View File

@ -28,7 +28,7 @@ impl AbstractNode for MapIndex {
(&self.collection, &self.index) (&self.collection, &self.index)
{ {
let collection = let collection =
if let Some(collection) = context.use_value(&collection_identifier.item)? { if let Some(collection) = context.get_value(&collection_identifier.item)? {
collection collection
} else { } else {
return Err(ValidationError::VariableNotFound { return Err(ValidationError::VariableNotFound {

View File

@ -62,7 +62,7 @@ pub fn parser<'src>(
Token::Boolean(boolean) => ValueNode::Boolean(boolean), Token::Boolean(boolean) => ValueNode::Boolean(boolean),
Token::Float(float) => ValueNode::Float(float), Token::Float(float) => ValueNode::Float(float),
Token::Integer(integer) => ValueNode::Integer(integer), 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()))); .map_with(|value, state| Expression::Value(value.with_position(state.span())));