1
0
Эх сурвалжийг харах

fix recursive runtime drop impl

Evan Almloff 1 жил өмнө
parent
commit
b09e528aaa

+ 0 - 8
packages/core/src/runtime.rs

@@ -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
     }
 

+ 6 - 1
packages/core/src/virtual_dom.rs

@@ -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();
     }
 }