From bb1b0515981b8afef82807f353dea5ec09ceadfb Mon Sep 17 00:00:00 2001 From: Snorre Ettrup Altschul Date: Mon, 24 Feb 2025 03:09:04 +0100 Subject: [PATCH] fixed a few bugs --- src/cli-repl.rs | 21 +++++++++++++++++++++ src/lib/node/constant.rs | 2 +- src/lib/node/if_else.rs | 2 +- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/cli-repl.rs b/src/cli-repl.rs index 4841567..86ee31b 100644 --- a/src/cli-repl.rs +++ b/src/cli-repl.rs @@ -9,8 +9,10 @@ use libopenbirch::node::closure::Closure; use libopenbirch::node::constant::Constant; use libopenbirch::node::empty::Empty; use libopenbirch::node::set::Set; +use libopenbirch::node::string_node::StringNode; use libopenbirch::node::{Node, NodeEnum}; use libopenbirch::parser::{Lexer, LexerError, Parser, ParserError}; +use raylib::ease::elastic_in; #[cfg(feature = "async")] use termion::AsyncReader; use termion::color; @@ -362,6 +364,24 @@ fn length(args: &Vec>, env: &mut Environment) -> Result>, env: &mut Environment) -> Result, String> { + if args.len() != 1 { + Err(format!("Expected 1 argument but got {}", args.len()))? + } + + use std::time::Instant; + let now = Instant::now(); + + let result = Call::new(args.first().unwrap().clone(), vec![]).evaluate(env)?; + + let elapsed = now.elapsed(); + + let time_str = StringNode::new(elapsed.as_secs_f64().to_string()).into(); + let time_const = Rc::new(Constant::new_from_float(elapsed.as_secs_f64(), &env).into()); + + Ok(Set::new(vec![time_str, time_const, result])) +} + fn main() -> Result<(), io::Error> { let mut input = Input::new(); @@ -376,6 +396,7 @@ fn main() -> Result<(), io::Error> { env.define_native_function("map", map); env.define_native_function("get", get); env.define_native_function("length", length); + env.define_native_function("benchmark", benchmark); env.define( "pi", diff --git a/src/lib/node/constant.rs b/src/lib/node/constant.rs index b007825..64f00a2 100644 --- a/src/lib/node/constant.rs +++ b/src/lib/node/constant.rs @@ -24,7 +24,7 @@ impl Node for Constant { fn as_string(&self, _env: Option<&Environment>) -> String { if self.value.is_zero() { - "0".to_string(); + return "0".to_string(); } self.value diff --git a/src/lib/node/if_else.rs b/src/lib/node/if_else.rs index 0f6a3a1..0d689c6 100644 --- a/src/lib/node/if_else.rs +++ b/src/lib/node/if_else.rs @@ -102,7 +102,7 @@ impl Node for IfElse { .reduce(|a, b| a + "\n" + &b) .unwrap() + "end", - ElseBranchEnum::None => "end".to_owned(), + ElseBranchEnum::None => " end".to_owned(), } .as_str() )