Continue built-in function revision

This commit is contained in:
Jeff 2024-04-21 18:22:59 -04:00
parent dbbb912b82
commit 4726288b9a
3 changed files with 22 additions and 17 deletions

View File

@ -40,8 +40,8 @@ impl AbstractNode for BuiltInFunctionCall {
Ok(Action::Return(Value::string(buffer))) Ok(Action::Return(Value::string(buffer)))
} }
BuiltInFunctionCall::Sleep(expression) => { BuiltInFunctionCall::Sleep(expression) => {
let expression_run = expression.clone().run(context)?; let action = expression.clone().run(context)?;
let expression_value = if let Action::Return(value) = expression_run { let value = if let Action::Return(value) = action {
value value
} else { } else {
return Err(RuntimeError::ValidationFailure( return Err(RuntimeError::ValidationFailure(
@ -49,15 +49,28 @@ impl AbstractNode for BuiltInFunctionCall {
)); ));
}; };
if let ValueInner::Integer(milliseconds) = expression_value.inner().as_ref() { if let ValueInner::Integer(milliseconds) = value.inner().as_ref() {
thread::sleep(Duration::from_millis(*milliseconds as u64)); thread::sleep(Duration::from_millis(*milliseconds as u64));
}
Ok(Action::None) Ok(Action::None)
}
BuiltInFunctionCall::WriteLine(expression) => {
let action = expression.clone().run(context)?;
let value = if let Action::Return(value) = action {
value
} else { } else {
panic!("Expected an integer."); return Err(RuntimeError::ValidationFailure(
ValidationError::InterpreterExpectedReturn(expression.position()),
));
};
if let ValueInner::String(output) = value.inner().as_ref() {
println!("{output}");
}
Ok(Action::None)
} }
}
BuiltInFunctionCall::WriteLine(_) => todo!(),
} }
} }
} }

View File

@ -109,6 +109,7 @@ impl AbstractTree {
match run { match run {
Ok(action) => match action { Ok(action) => match action {
Action::Return(value) => previous_value = Some(value), Action::Return(value) => previous_value = Some(value),
Action::None => previous_value = None,
_ => {} _ => {}
}, },
Err(runtime_error) => { Err(runtime_error) => {

View File

@ -160,9 +160,6 @@ impl Display for Value {
write!(f, "): {} {:?}", return_type.node, body.node) write!(f, "): {} {:?}", return_type.node, body.node)
} }
ValueInner::Function(function) => {
write!(f, "{function}")
}
ValueInner::Structure { name, fields } => { ValueInner::Structure { name, fields } => {
let mut table = create_table(); let mut table = create_table();
@ -329,9 +326,3 @@ impl Function {
self.body.node.run(&context) self.body.node.run(&context)
} }
} }
impl Display for Function {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
todo!()
}
}