@@ -195,6 +195,10 @@ impl<K, V> Root<K, V> {
195195 }
196196
197197 pub fn shared_empty_root ( ) -> Self {
198+ // Ensuring that the shared node hasn't been corrupted by any mutations
199+ debug_assert ! ( EMPTY_ROOT_NODE . parent == ptr:: null( ) ) ;
200+ debug_assert ! ( EMPTY_ROOT_NODE . parent_idx == 0 ) ;
201+ debug_assert ! ( EMPTY_ROOT_NODE . len == 0 ) ;
198202 Root {
199203 node : unsafe {
200204 BoxedNode :: from_ptr ( NonNull :: new_unchecked (
@@ -246,6 +250,7 @@ impl<K, V> Root<K, V> {
246250 /// new node the root. This increases the height by 1 and is the opposite of `pop_level`.
247251 pub fn push_level ( & mut self )
248252 -> NodeRef < marker:: Mut , K , V , marker:: Internal > {
253+ debug_assert ! ( !self . is_shared_root( ) ) ;
249254 let mut new_node = Box :: new ( unsafe { InternalNode :: new ( ) } ) ;
250255 new_node. edges [ 0 ] = unsafe { BoxedNode :: from_ptr ( self . node . as_ptr ( ) ) } ;
251256
@@ -474,6 +479,7 @@ impl<K, V> NodeRef<marker::Owned, K, V, marker::Leaf> {
474479 marker:: Edge
475480 >
476481 > {
482+ debug_assert ! ( !self . is_shared_root( ) ) ;
477483 let node = self . node ;
478484 let ret = self . ascend ( ) . ok ( ) ;
479485 Global . dealloc ( node. as_opaque ( ) , Layout :: new :: < LeafNode < K , V > > ( ) ) ;
@@ -631,6 +637,7 @@ impl<'a, K, V> NodeRef<marker::Mut<'a>, K, V, marker::Leaf> {
631637 pub fn push ( & mut self , key : K , val : V ) {
632638 // Necessary for correctness, but this is an internal module
633639 debug_assert ! ( self . len( ) < CAPACITY ) ;
640+ debug_assert ! ( !self . is_shared_root( ) ) ;
634641
635642 let idx = self . len ( ) ;
636643
@@ -646,6 +653,7 @@ impl<'a, K, V> NodeRef<marker::Mut<'a>, K, V, marker::Leaf> {
646653 pub fn push_front ( & mut self , key : K , val : V ) {
647654 // Necessary for correctness, but this is an internal module
648655 debug_assert ! ( self . len( ) < CAPACITY ) ;
656+ debug_assert ! ( !self . is_shared_root( ) ) ;
649657
650658 unsafe {
651659 slice_insert ( self . keys_mut ( ) , 0 , key) ;
@@ -959,6 +967,7 @@ impl<'a, K, V> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::Edge
959967 fn insert_fit ( & mut self , key : K , val : V ) -> * mut V {
960968 // Necessary for correctness, but in a private module
961969 debug_assert ! ( self . node. len( ) < CAPACITY ) ;
970+ debug_assert ! ( !self . node. is_shared_root( ) ) ;
962971
963972 unsafe {
964973 slice_insert ( self . node . keys_mut ( ) , self . idx , key) ;
@@ -1136,6 +1145,7 @@ impl<'a, K, V> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::KV>
11361145 /// allocated node.
11371146 pub fn split ( mut self )
11381147 -> ( NodeRef < marker:: Mut < ' a > , K , V , marker:: Leaf > , K , V , Root < K , V > ) {
1148+ debug_assert ! ( !self . node. is_shared_root( ) ) ;
11391149 unsafe {
11401150 let mut new_node = Box :: new ( LeafNode :: new ( ) ) ;
11411151
@@ -1173,6 +1183,7 @@ impl<'a, K, V> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::KV>
11731183 /// now adjacent key/value pairs to the left and right of this handle.
11741184 pub fn remove ( mut self )
11751185 -> ( Handle < NodeRef < marker:: Mut < ' a > , K , V , marker:: Leaf > , marker:: Edge > , K , V ) {
1186+ debug_assert ! ( !self . node. is_shared_root( ) ) ;
11761187 unsafe {
11771188 let k = slice_remove ( self . node . keys_mut ( ) , self . idx ) ;
11781189 let v = slice_remove ( self . node . vals_mut ( ) , self . idx ) ;
0 commit comments