fix recursive runtime drop impl

This commit is contained in:
Evan Almloff 2023-08-04 14:14:56 -07:00
parent cb4c46154d
commit b09e528aaa
2 changed files with 6 additions and 9 deletions

View file

@ -49,13 +49,6 @@ pub struct Runtime {
pub(crate) scope_stack: RefCell<Vec<ScopeId>>,
}
impl Drop for Runtime {
fn drop(&mut self) {
// todo: do this better
pop_runtime();
}
}
impl Runtime {
pub(crate) fn new(scheduler: Rc<Scheduler>) -> Rc<Self> {
let runtime = Rc::new(Self {
@ -65,7 +58,6 @@ impl Runtime {
scope_stack: Default::default(),
});
push_runtime(runtime.clone());
runtime
}

View file

@ -9,7 +9,7 @@ use crate::{
mutations::Mutation,
nodes::RenderReturn,
nodes::{Template, TemplateId},
runtime::Runtime,
runtime::{pop_runtime, push_runtime, Runtime},
scopes::{ScopeId, ScopeState},
AttributeValue, Element, Event, Scope,
};
@ -275,6 +275,9 @@ impl VirtualDom {
// the root element is always given element ID 0 since it's the container for the entire tree
dom.elements.insert(ElementRef::none());
// Set this as the current runtime
push_runtime(dom.runtime.clone());
dom
}
@ -648,5 +651,7 @@ impl Drop for VirtualDom {
fn drop(&mut self) {
// Simply drop this scope which drops all of its children
self.drop_scope(ScopeId(0), true);
// remove the current runtime
pop_runtime();
}
}