From 7459a4978d3ff087499dbed915ec76e4959e087d Mon Sep 17 00:00:00 2001 From: Patric Bucher Date: Fri, 5 Jul 2024 18:40:09 +0100 Subject: [PATCH] Replacing Value printing with a Display implementation --- src/vm/value.rs | 16 ++++++++++++++++ src/vm/virtual_machine.rs | 26 +------------------------- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/src/vm/value.rs b/src/vm/value.rs index 7c0a67e..8d1fb5e 100644 --- a/src/vm/value.rs +++ b/src/vm/value.rs @@ -1,4 +1,20 @@ use crate::vm::Value; +use std::fmt::{Display, Formatter}; + +impl Display for Value { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}", + match self { + Value::Number(val) => val.to_string(), + Value::Boolean(val) => val.to_string(), + Value::String(val) => val.to_string(), + Value::Nil => "nil".to_string(), + } + ) + } +} #[macro_export] macro_rules! number { diff --git a/src/vm/virtual_machine.rs b/src/vm/virtual_machine.rs index e2be707..e197dc1 100644 --- a/src/vm/virtual_machine.rs +++ b/src/vm/virtual_machine.rs @@ -24,9 +24,7 @@ impl VirtualMachine { let start = std::time::Instant::now(); return if let Some(block) = block { let result = self.run(block); - info!("Run time: {}ms", start.elapsed().as_millis()); - result } else { Result::CompileError @@ -46,7 +44,7 @@ impl VirtualMachine { match OpCode::from_u8(block.read_u8(self.ip)) { OpCode::Return => { let value = self.pop(); - VirtualMachine::print(value); + println!("{}", value); return Result::Ok; } OpCode::Constant => { @@ -136,28 +134,6 @@ impl VirtualMachine { self.push(Value::Number(as_number!(a) / as_number!(b))); } - fn print(value: Value) { - pub(crate) fn print_nil() { - print!("nil") - } - pub(crate) fn print_string(value: String) { - print!("{}", value) - } - pub(crate) fn print_bool(value: bool) { - print!("{}", value); - } - pub(crate) fn print_number(value: f64) { - print!("{}", value); - } - - match value { - Value::Number(val) => print_number(val), - Value::Boolean(val) => print_bool(val), - Value::String(val) => print_string(val), - Value::Nil => print_nil(), - } - } - fn push(&mut self, value: Value) { self.stack.push(value); }