Rewrite io.write_line built-in; Fix memory bug
This commit is contained in:
parent
2b546e7b63
commit
70f55c85f4
@ -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)
|
||||||
|
@ -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 {
|
||||||
|
@ -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())));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user