From 4c6b249c10b8ba5716a333156a83cc03fd5002e2 Mon Sep 17 00:00:00 2001 From: Andrew Morris Date: Mon, 14 Aug 2023 09:13:11 +1000 Subject: [PATCH] VsFunctionMetadata --- valuescript_vm/src/bytecode_decoder.rs | 6 +++++- valuescript_vm/src/lib.rs | 1 + valuescript_vm/src/operations.rs | 4 ++-- valuescript_vm/src/vs_function.rs | 5 +++-- valuescript_vm/src/vs_function_metadata.rs | 7 +++++++ 5 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 valuescript_vm/src/vs_function_metadata.rs diff --git a/valuescript_vm/src/bytecode_decoder.rs b/valuescript_vm/src/bytecode_decoder.rs index 5318e8a..e563e7f 100644 --- a/valuescript_vm/src/bytecode_decoder.rs +++ b/valuescript_vm/src/bytecode_decoder.rs @@ -10,6 +10,7 @@ use crate::builtins::BUILTIN_VALS; use crate::bytecode::Bytecode; use crate::vs_class::VsClass; use crate::vs_function::VsFunction; +use crate::vs_function_metadata::VsFunctionMetadata; use crate::vs_object::VsObject; use crate::vs_symbol::VsSymbol; use crate::vs_value::ToVal; @@ -292,7 +293,10 @@ impl BytecodeDecoder { VsFunction { bytecode: self.bytecode.clone(), - hash, + metadata: VsFunctionMetadata { + name: Rc::from(""), + hash, + }, is_generator, register_count, parameter_count, diff --git a/valuescript_vm/src/lib.rs b/valuescript_vm/src/lib.rs index 2682080..211bd56 100644 --- a/valuescript_vm/src/lib.rs +++ b/valuescript_vm/src/lib.rs @@ -23,6 +23,7 @@ mod virtual_machine; pub mod vs_array; pub mod vs_class; mod vs_function; +mod vs_function_metadata; pub mod vs_object; mod vs_symbol; pub mod vs_value; diff --git a/valuescript_vm/src/operations.rs b/valuescript_vm/src/operations.rs index 2741d49..b7e5b9a 100644 --- a/valuescript_vm/src/operations.rs +++ b/valuescript_vm/src/operations.rs @@ -194,7 +194,7 @@ pub fn op_eq_impl(left: &Val, right: &Val) -> Result { } } - left.hash == right.hash + left.metadata.hash == right.metadata.hash } _ => { if left.is_truthy() != right.is_truthy() { @@ -316,7 +316,7 @@ pub fn op_triple_eq_impl(left: &Val, right: &Val) -> Result { } } - left.hash == right.hash + left.metadata.hash == right.metadata.hash } #[allow(clippy::vtable_address_comparisons)] // TODO: Is this ok? (Val::Static(left), Val::Static(right)) => std::ptr::eq(&**left, &**right), diff --git a/valuescript_vm/src/vs_function.rs b/valuescript_vm/src/vs_function.rs index 2d198d1..898154d 100644 --- a/valuescript_vm/src/vs_function.rs +++ b/valuescript_vm/src/vs_function.rs @@ -2,6 +2,7 @@ use std::rc::Rc; use crate::bytecode::Bytecode; use crate::make_generator_frame::MakeGeneratorFrame; +use crate::vs_function_metadata::VsFunctionMetadata; use crate::vs_value::ToVal; use super::bytecode_decoder::BytecodeDecoder; @@ -12,7 +13,7 @@ use super::vs_value::Val; #[derive(Debug, Clone)] pub struct VsFunction { pub bytecode: Rc, - pub hash: [u8; 32], + pub metadata: VsFunctionMetadata, pub is_generator: bool, pub register_count: usize, pub parameter_count: usize, @@ -30,7 +31,7 @@ impl VsFunction { VsFunction { bytecode: self.bytecode.clone(), - hash: self.hash, + metadata: self.metadata.clone(), is_generator: self.is_generator, register_count: self.register_count, parameter_count: self.parameter_count, diff --git a/valuescript_vm/src/vs_function_metadata.rs b/valuescript_vm/src/vs_function_metadata.rs new file mode 100644 index 0000000..60e74e9 --- /dev/null +++ b/valuescript_vm/src/vs_function_metadata.rs @@ -0,0 +1,7 @@ +use std::rc::Rc; + +#[derive(Clone, Debug)] +pub struct VsFunctionMetadata { + pub name: Rc, + pub hash: [u8; 32], +}