feat: fix compiling
This commit is contained in:
1 parent
0987760958
commit
2ce0752a9c
2 files changed
+81
-33
No files matched your search
+80
-32
@@ -14,7 +14,7 @@
|
||||
//! ### IDs for elements
|
||||
//! --------------------
|
||||
//! All nodes are addressed by their IDs. The RealDom provides an imperative interface for making changes to these nodes.
|
||||
//! We don't necessarily require that DOM changes happen instnatly during the diffing process, so the implementor may choose
|
||||
//! We don't necessarily require that DOM changes happen instantly during the diffing process, so the implementor may choose
|
||||
//! to batch nodes if it is more performant for their application. The element IDs are indicies into the internal element
|
||||
//! array. The expectation is that implemenetors will use the ID as an index into a Vec of real nodes, allowing for passive
|
||||
//! garbage collection as the VirtualDOM replaces old nodes.
|
||||
@@ -46,7 +46,7 @@
|
||||
//! Because the subtrees won't be diffed, their "real node" data will be stale (invalid), so its up to the reconciler to
|
||||
//! track nodes created in a scope and clean up all relevant data. Support for this is currently WIP and depends on comp-time
|
||||
//! hashing of the subtree from the rsx! macro. We do a very limited form of static analysis via static string pointers as
|
||||
//! a way of short-circuiting the most mem-cmp expensive checks.
|
||||
//! a way of short-circuiting the most expensive checks.
|
||||
//!
|
||||
//! ## Bloom Filter and Heuristics
|
||||
//! ------------------------------
|
||||
@@ -119,15 +119,26 @@ pub enum DiffInstruction<'a> {
|
||||
new: &'a VNode<'a>,
|
||||
},
|
||||
|
||||
Append {},
|
||||
|
||||
Replace {
|
||||
with: usize,
|
||||
DiffChildren {
|
||||
progress: usize,
|
||||
children: &'a [VNode<'a>],
|
||||
},
|
||||
|
||||
Create {
|
||||
node: &'a VNode<'a>,
|
||||
},
|
||||
CreateChildren {
|
||||
progress: usize,
|
||||
children: &'a [VNode<'a>],
|
||||
},
|
||||
|
||||
// todo: merge this into the create instruction?
|
||||
Append,
|
||||
InsertAfter,
|
||||
InsertBefore,
|
||||
Replace {
|
||||
with: usize,
|
||||
},
|
||||
}
|
||||
|
||||
impl<'bump> DiffMachine<'bump> {
|
||||
@@ -165,25 +176,49 @@ impl<'bump> DiffMachine<'bump> {
|
||||
// todo: don't move the reused instructions around
|
||||
// defer to individual functions so the compiler produces better code
|
||||
// large functions tend to be difficult for the compiler to work with
|
||||
while let Some(mut make) = self.node_stack.pop() {
|
||||
match &mut make {
|
||||
let mut should_pop = false;
|
||||
while let Some(make) = self.node_stack.last_mut() {
|
||||
should_pop = false;
|
||||
match make {
|
||||
DiffInstruction::DiffNode { old, new, .. } => {
|
||||
let (old, new) = (*old, *new);
|
||||
self.diff_node(old, new);
|
||||
}
|
||||
|
||||
DiffInstruction::DiffChildren { progress, children } => {
|
||||
//
|
||||
}
|
||||
|
||||
DiffInstruction::Create { node, .. } => {
|
||||
let node = *node;
|
||||
self.create_node(node);
|
||||
}
|
||||
DiffInstruction::CreateChildren { progress, children } => {
|
||||
if let Some(child) = (children).get(*progress) {
|
||||
*progress += 1;
|
||||
self.create_node(child);
|
||||
} else {
|
||||
should_pop = true;
|
||||
}
|
||||
}
|
||||
|
||||
DiffInstruction::Append {} => {
|
||||
let many = self.nodes_created_stack.pop().unwrap();
|
||||
self.edit_append_children(many as u32);
|
||||
}
|
||||
|
||||
DiffInstruction::Replace { with } => {
|
||||
let with = *with;
|
||||
let many = self.nodes_created_stack.pop().unwrap();
|
||||
self.edit_replace_with(*with as u32, many as u32);
|
||||
|
||||
self.edit_replace_with(with as u32, many as u32);
|
||||
}
|
||||
|
||||
DiffInstruction::Create { node, .. } => {
|
||||
self.create_node(node);
|
||||
}
|
||||
DiffInstruction::InsertAfter => todo!(),
|
||||
DiffInstruction::InsertBefore => todo!(),
|
||||
}
|
||||
if should_pop {
|
||||
self.node_stack.pop();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -397,7 +432,8 @@ impl<'bump> DiffMachine<'bump> {
|
||||
//
|
||||
// This case is rather rare (typically only in non-keyed lists)
|
||||
if new.tag_name != old.tag_name || new.namespace != old.namespace {
|
||||
self.replace_node_with_node(root, old_node, new_node);
|
||||
todo!();
|
||||
// self.replace_node_with_node(root, old_node, new_node);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -600,8 +636,11 @@ impl<'bump> DiffMachine<'bump> {
|
||||
|
||||
// Completely adding new nodes, removing any placeholder if it exists
|
||||
(IS_EMPTY, IS_NOT_EMPTY) => {
|
||||
let meta = self.create_children(new);
|
||||
self.edit_append_children(meta.added_to_stack);
|
||||
todo!();
|
||||
// let meta = todo!();
|
||||
// let meta = self.create_children(new);
|
||||
// let meta = self.create_children(new);
|
||||
// self.edit_append_children(meta.added_to_stack);
|
||||
}
|
||||
|
||||
// Completely removing old nodes and putting an anchor in its place
|
||||
@@ -628,8 +667,9 @@ impl<'bump> DiffMachine<'bump> {
|
||||
self.edit_push_root(anchor.dom_id.get().unwrap());
|
||||
let mut added = 0;
|
||||
for el in new {
|
||||
let meta = self.create_vnode(el);
|
||||
added += meta.added_to_stack;
|
||||
todo!();
|
||||
// let meta = self.create_vnode(el);
|
||||
// added += meta.added_to_stack;
|
||||
}
|
||||
self.edit_replace_with(1, added);
|
||||
}
|
||||
@@ -780,8 +820,10 @@ impl<'bump> DiffMachine<'bump> {
|
||||
self.edit_push_root(last_node);
|
||||
|
||||
// Create the new children and insert them after
|
||||
let meta = self.create_children(&new[shared_prefix_count..]);
|
||||
self.edit_insert_after(meta.added_to_stack);
|
||||
//
|
||||
todo!();
|
||||
// let meta = self.create_children(&new[shared_prefix_count..]);
|
||||
// self.edit_insert_after(meta.added_to_stack);
|
||||
|
||||
return KeyedPrefixResult::Finished;
|
||||
}
|
||||
@@ -805,8 +847,9 @@ impl<'bump> DiffMachine<'bump> {
|
||||
// When this function returns, the change list stack is in the same state.
|
||||
pub fn create_and_append_children(&mut self, new: &'bump [VNode<'bump>]) {
|
||||
for child in new {
|
||||
let meta = self.create_vnode(child);
|
||||
self.edit_append_children(meta.added_to_stack);
|
||||
todo!();
|
||||
// let meta = self.create_vnode(child);
|
||||
// self.edit_append_children(meta.added_to_stack);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -990,8 +1033,9 @@ impl<'bump> DiffMachine<'bump> {
|
||||
eprintln!("key is not contained {:?}", key);
|
||||
// new node needs to be created
|
||||
// insert it before the current milestone
|
||||
let meta = self.create_vnode(next_new);
|
||||
self.edit_insert_before(meta.added_to_stack);
|
||||
todo!();
|
||||
// let meta = self.create_vnode(next_new);
|
||||
// self.edit_insert_before(meta.added_to_stack);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1034,8 +1078,9 @@ impl<'bump> DiffMachine<'bump> {
|
||||
eprintln!("key is not contained {:?}", key);
|
||||
// new node needs to be created
|
||||
// insert it before the current milestone
|
||||
let meta = self.create_vnode(last_node);
|
||||
self.edit_insert_after(meta.added_to_stack);
|
||||
todo!();
|
||||
// let meta = self.create_vnode(last_node);
|
||||
// self.edit_insert_after(meta.added_to_stack);
|
||||
}
|
||||
}
|
||||
self.edit_pop();
|
||||
@@ -1108,8 +1153,9 @@ impl<'bump> DiffMachine<'bump> {
|
||||
self.edit_push_root(last.direct_id());
|
||||
|
||||
// create the rest and insert them
|
||||
let meta = self.create_children(&new[old.len()..]);
|
||||
self.edit_insert_after(meta.added_to_stack);
|
||||
todo!();
|
||||
// let meta = self.create_children(&new[old.len()..]);
|
||||
// self.edit_insert_after(meta.added_to_stack);
|
||||
|
||||
self.edit_pop();
|
||||
|
||||
@@ -1259,8 +1305,9 @@ impl<'bump> DiffMachine<'bump> {
|
||||
|
||||
let mut nodes_created = 0;
|
||||
for node in new_nodes {
|
||||
let meta = self.create_vnode(node);
|
||||
nodes_created += meta.added_to_stack;
|
||||
todo!();
|
||||
// let meta = self.create_vnode(node);
|
||||
// nodes_created += meta.added_to_stack;
|
||||
}
|
||||
|
||||
// if 0 nodes are created, then it gets interperted as a deletion
|
||||
@@ -1295,9 +1342,10 @@ impl<'bump> DiffMachine<'bump> {
|
||||
new_node: &'bump VNode<'bump>,
|
||||
) {
|
||||
self.edit_push_root(anchor);
|
||||
let meta = self.create_vnode(new_node);
|
||||
self.edit_replace_with(1, meta.added_to_stack);
|
||||
self.create_garbage(old_node);
|
||||
todo!();
|
||||
// let meta = self.create_vnode(new_node);
|
||||
// self.edit_replace_with(1, meta.added_to_stack);
|
||||
// self.create_garbage(old_node);
|
||||
self.edit_pop();
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user