diff --git a/valuescript_vm/src/array_higher_functions/array_mapping_frame.rs b/valuescript_vm/src/array_higher_functions/array_mapping_frame.rs index 7f06ecd..d46d653 100644 --- a/valuescript_vm/src/array_higher_functions/array_mapping_frame.rs +++ b/valuescript_vm/src/array_higher_functions/array_mapping_frame.rs @@ -1,3 +1,4 @@ +use std::any::Any; use std::rc::Rc; use crate::builtins::type_error_builtin::ToTypeError; @@ -155,4 +156,12 @@ impl StackFrameTrait for ArrayMappingFrame { fn clone_to_stack_frame(&self) -> StackFrame { Box::new(self.clone()) } + + fn as_any(&self) -> &dyn Any { + self + } + + fn as_any_mut(&mut self) -> &mut dyn Any { + self + } } diff --git a/valuescript_vm/src/array_higher_functions/array_reduce.rs b/valuescript_vm/src/array_higher_functions/array_reduce.rs index afcd039..01c57a5 100644 --- a/valuescript_vm/src/array_higher_functions/array_reduce.rs +++ b/valuescript_vm/src/array_higher_functions/array_reduce.rs @@ -1,3 +1,4 @@ +use std::any::Any; use std::rc::Rc; use crate::builtins::type_error_builtin::ToTypeError; @@ -120,4 +121,12 @@ impl StackFrameTrait for ReduceFrame { fn clone_to_stack_frame(&self) -> StackFrame { Box::new(self.clone()) } + + fn as_any(&self) -> &dyn Any { + self + } + + fn as_any_mut(&mut self) -> &mut dyn Any { + self + } } diff --git a/valuescript_vm/src/array_higher_functions/array_reduce_right.rs b/valuescript_vm/src/array_higher_functions/array_reduce_right.rs index d0daadb..bb8b1f4 100644 --- a/valuescript_vm/src/array_higher_functions/array_reduce_right.rs +++ b/valuescript_vm/src/array_higher_functions/array_reduce_right.rs @@ -1,3 +1,4 @@ +use std::any::Any; use std::rc::Rc; use crate::builtins::type_error_builtin::ToTypeError; @@ -133,4 +134,12 @@ impl StackFrameTrait for ReduceRightFrame { fn clone_to_stack_frame(&self) -> StackFrame { Box::new(self.clone()) } + + fn as_any(&self) -> &dyn Any { + self + } + + fn as_any_mut(&mut self) -> &mut dyn Any { + self + } } diff --git a/valuescript_vm/src/array_higher_functions/array_sort.rs b/valuescript_vm/src/array_higher_functions/array_sort.rs index 9988e42..f24075c 100644 --- a/valuescript_vm/src/array_higher_functions/array_sort.rs +++ b/valuescript_vm/src/array_higher_functions/array_sort.rs @@ -1,3 +1,4 @@ +use std::any::Any; use std::rc::Rc; use crate::builtins::type_error_builtin::ToTypeError; @@ -314,4 +315,12 @@ impl StackFrameTrait for SortFrame { fn clone_to_stack_frame(&self) -> StackFrame { Box::new(self.clone()) } + + fn as_any(&self) -> &dyn Any { + self + } + + fn as_any_mut(&mut self) -> &mut dyn Any { + self + } } diff --git a/valuescript_vm/src/bytecode_stack_frame.rs b/valuescript_vm/src/bytecode_stack_frame.rs index 615dc7e..1c5120e 100644 --- a/valuescript_vm/src/bytecode_stack_frame.rs +++ b/valuescript_vm/src/bytecode_stack_frame.rs @@ -1,3 +1,4 @@ +use std::any::Any; use std::mem::take; use valuescript_common::InstructionByte; @@ -732,4 +733,12 @@ impl StackFrameTrait for BytecodeStackFrame { fn clone_to_stack_frame(&self) -> StackFrame { Box::new(self.clone()) } + + fn as_any(&self) -> &dyn Any { + self + } + + fn as_any_mut(&mut self) -> &mut dyn Any { + self + } } diff --git a/valuescript_vm/src/cat_stack_frame.rs b/valuescript_vm/src/cat_stack_frame.rs index ecd4646..c9ed077 100644 --- a/valuescript_vm/src/cat_stack_frame.rs +++ b/valuescript_vm/src/cat_stack_frame.rs @@ -1,4 +1,4 @@ -use std::{mem::take, rc::Rc}; +use std::{any::Any, mem::take, rc::Rc}; use crate::{ builtins::{internal_error_builtin::ToInternalError, type_error_builtin::ToTypeError}, @@ -154,4 +154,12 @@ impl StackFrameTrait for CatStackFrame { fn clone_to_stack_frame(&self) -> StackFrame { Box::new(self.clone()) } + + fn as_any(&self) -> &dyn Any { + self + } + + fn as_any_mut(&mut self) -> &mut dyn Any { + self + } } diff --git a/valuescript_vm/src/first_stack_frame.rs b/valuescript_vm/src/first_stack_frame.rs index 70544f3..cb3f035 100644 --- a/valuescript_vm/src/first_stack_frame.rs +++ b/valuescript_vm/src/first_stack_frame.rs @@ -1,3 +1,5 @@ +use std::any::Any; + use crate::stack_frame::StackFrame; use super::stack_frame::{CallResult, FrameStepResult, StackFrameTrait}; @@ -58,4 +60,12 @@ impl StackFrameTrait for FirstStackFrame { fn clone_to_stack_frame(&self) -> StackFrame { Box::new(self.clone()) } + + fn as_any(&self) -> &dyn Any { + self + } + + fn as_any_mut(&mut self) -> &mut dyn Any { + self + } } diff --git a/valuescript_vm/src/generator.rs b/valuescript_vm/src/generator.rs index 020b93d..ad4e80d 100644 --- a/valuescript_vm/src/generator.rs +++ b/valuescript_vm/src/generator.rs @@ -1,4 +1,5 @@ use std::{ + any::Any, fmt, mem::{swap, take}, rc::Rc, @@ -241,6 +242,14 @@ impl StackFrameTrait for GeneratorFrame { fn clone_to_stack_frame(&self) -> StackFrame { Box::new(self.clone()) } + + fn as_any(&self) -> &dyn Any { + self + } + + fn as_any_mut(&mut self) -> &mut dyn Any { + self + } } #[derive(Clone, Default)] @@ -356,4 +365,12 @@ impl StackFrameTrait for YieldStarFrame { fn clone_to_stack_frame(&self) -> StackFrame { Box::new(self.clone()) } + + fn as_any(&self) -> &dyn Any { + self + } + + fn as_any_mut(&mut self) -> &mut dyn Any { + self + } } diff --git a/valuescript_vm/src/make_generator_frame.rs b/valuescript_vm/src/make_generator_frame.rs index a447362..bd547f8 100644 --- a/valuescript_vm/src/make_generator_frame.rs +++ b/valuescript_vm/src/make_generator_frame.rs @@ -1,4 +1,4 @@ -use std::mem::take; +use std::{any::Any, mem::take}; use crate::{ bytecode_stack_frame::BytecodeStackFrame, @@ -61,4 +61,12 @@ impl StackFrameTrait for MakeGeneratorFrame { fn clone_to_stack_frame(&self) -> StackFrame { Box::new(self.clone()) } + + fn as_any(&self) -> &dyn Any { + self + } + + fn as_any_mut(&mut self) -> &mut dyn Any { + self + } } diff --git a/valuescript_vm/src/stack_frame.rs b/valuescript_vm/src/stack_frame.rs index 6002a77..3cea2f5 100644 --- a/valuescript_vm/src/stack_frame.rs +++ b/valuescript_vm/src/stack_frame.rs @@ -20,7 +20,7 @@ pub enum FrameStepOk { pub type FrameStepResult = Result; -pub trait StackFrameTrait: Any { +pub trait StackFrameTrait { fn write_this(&mut self, const_: bool, this: Val) -> Result<(), Val>; fn write_param(&mut self, param: Val); fn step(&mut self) -> FrameStepResult; @@ -29,6 +29,8 @@ pub trait StackFrameTrait: Any { fn can_catch_exception(&self, exception: &Val) -> bool; fn catch_exception(&mut self, exception: &mut Val); fn clone_to_stack_frame(&self) -> StackFrame; + fn as_any(&self) -> &dyn Any; + fn as_any_mut(&mut self) -> &mut dyn Any; } impl Clone for StackFrame { @@ -75,4 +77,12 @@ impl StackFrameTrait for VoidStackFrame { fn clone_to_stack_frame(&self) -> StackFrame { Box::new(self.clone()) } + + fn as_any(&self) -> &dyn Any { + self + } + + fn as_any_mut(&mut self) -> &mut dyn Any { + self + } }