11use std:: marker:: PhantomData ;
2- use std:: sync:: Arc ;
32
43use super :: SyntaxGroup ;
54use crate :: node:: { SyntaxNode , TypedSyntaxNode } ;
@@ -25,8 +24,7 @@ impl<'db, T: TypedSyntaxNode<'db>> ElementList<'db, T, 1> {
2524 & self ,
2625 db : & ' db dyn SyntaxGroup ,
2726 ) -> impl ExactSizeIterator < Item = T > + DoubleEndedIterator + ' db {
28- ElementListRawIter :: new ( self . node . get_children ( db) . as_slice ( ) . into ( ) )
29- . map ( move |x| T :: from_syntax_node ( db, x) )
27+ ElementListRawIter :: new ( self . node . get_children ( db) ) . map ( move |x| T :: from_syntax_node ( db, x) )
3028 }
3129 pub fn has_tail ( & self , _db : & dyn SyntaxGroup ) -> bool {
3230 false
@@ -40,7 +38,7 @@ impl<'db, T: TypedSyntaxNode<'db>> ElementList<'db, T, 2> {
4038 & self ,
4139 db : & ' db dyn SyntaxGroup ,
4240 ) -> impl ExactSizeIterator < Item = T > + DoubleEndedIterator + ' db {
43- ElementListRawIter :: new ( self . node . get_children ( db) . as_slice ( ) . into ( ) )
41+ ElementListRawIter :: new ( self . node . get_children ( db) )
4442 . step_by ( 2 )
4543 . map ( move |x| T :: from_syntax_node ( db, x) )
4644 }
@@ -52,18 +50,14 @@ impl<'db, T: TypedSyntaxNode<'db>> ElementList<'db, T, 2> {
5250/// Iterator over the raw elements of an `ElementList`.
5351struct ElementListRawIter < ' a > {
5452 /// The `Arc` storing the actual node.
55- _data : Arc < [ SyntaxNode < ' a > ] > ,
53+ _data : & ' a [ SyntaxNode < ' a > ] ,
5654 /// Actual iterator over the elements.
5755 iter : std:: slice:: Iter < ' a , SyntaxNode < ' a > > ,
5856}
5957
6058impl < ' a > ElementListRawIter < ' a > {
61- fn new ( data : Arc < [ SyntaxNode < ' a > ] > ) -> Self {
62- // We leak the Arc to get a 'static reference, and keep the Arc in the struct to avoid
63- // leaks.
64- let ptr: * const [ SyntaxNode < ' _ > ] = Arc :: as_ptr ( & data) ;
65- let slice: & ' static [ SyntaxNode < ' _ > ] = unsafe { std:: mem:: transmute ( & * ptr) } ;
66- let iter = slice. iter ( ) ;
59+ fn new ( data : & ' a [ SyntaxNode < ' a > ] ) -> Self {
60+ let iter = data. iter ( ) ;
6761 Self { _data : data, iter }
6862 }
6963}
0 commit comments