@@ -17,19 +17,18 @@ pub fn derive(input: &Input) -> TokenStream {
17
17
let doc_url = format ! ( "[`{0}`](struct.{0}.html)" , input. name) ;
18
18
let vec_doc_url = format ! ( "[`{0}`](struct.{0}.html)" , input. vec_name( ) ) ;
19
19
20
- let fields_names = input. fields . iter ( )
21
- . map ( |field| field. ident . clone ( ) . unwrap ( ) )
20
+ let fields_names = & input. fields . iter ( )
21
+ . map ( |field| field. ident . as_ref ( ) . unwrap ( ) )
22
22
. collect :: < Vec < _ > > ( ) ;
23
- let fields_names_1 = & fields_names;
24
- let fields_names_2 = & fields_names;
25
23
let first_field = & fields_names[ 0 ] ;
26
- let slice_names_1 = & input. fields . iter ( )
27
- . map ( |field| field. ident . as_ref ( ) . unwrap ( ) . to_string ( ) )
28
- . map ( |ident| Ident :: new ( & format ! ( "{}_slice_1" , ident) , Span :: call_site ( ) ) )
24
+
25
+ let fields_names_hygienic_1 = input. fields . iter ( )
26
+ . map ( |field| field. ident . as_ref ( ) . unwrap ( ) )
27
+ . map ( |ident| Ident :: new ( & format ! ( "___soa_derive_private_1_{}" , ident) , Span :: call_site ( ) ) )
29
28
. collect :: < Vec < _ > > ( ) ;
30
- let slice_names_2 = & input. fields . iter ( )
31
- . map ( |field| field. ident . as_ref ( ) . unwrap ( ) . to_string ( ) )
32
- . map ( |ident| Ident :: new ( & format ! ( "{}_slice_2 " , ident) , Span :: call_site ( ) ) )
29
+ let fields_names_hygienic_2 = input. fields . iter ( )
30
+ . map ( |field| field. ident . as_ref ( ) . unwrap ( ) )
31
+ . map ( |ident| Ident :: new ( & format ! ( "___soa_derive_private_2_{} " , ident) , Span :: call_site ( ) ) )
33
32
. collect :: < Vec < _ > > ( ) ;
34
33
35
34
let fields_types = & input. fields . iter ( )
@@ -52,7 +51,7 @@ pub fn derive(input: &Input) -> TokenStream {
52
51
#visibility struct #slice_name<' a> {
53
52
#(
54
53
#[ doc = #fields_doc]
55
- pub #fields_names_1 : & ' a [ #fields_types] ,
54
+ pub #fields_names : & ' a [ #fields_types] ,
56
55
) *
57
56
}
58
57
@@ -64,7 +63,7 @@ pub fn derive(input: &Input) -> TokenStream {
64
63
/// the length of all fields should be the same.
65
64
pub fn len( & self ) -> usize {
66
65
let len = self . #first_field. len( ) ;
67
- #( debug_assert_eq!( self . #fields_names_1 . len( ) , len) ; ) *
66
+ #( debug_assert_eq!( self . #fields_names . len( ) , len) ; ) *
68
67
len
69
68
}
70
69
@@ -74,7 +73,7 @@ pub fn derive(input: &Input) -> TokenStream {
74
73
/// the length of all fields should be the same.
75
74
pub fn is_empty( & self ) -> bool {
76
75
let empty = self . #first_field. is_empty( ) ;
77
- #( debug_assert_eq!( self . #fields_names_1 . is_empty( ) , empty) ; ) *
76
+ #( debug_assert_eq!( self . #fields_names . is_empty( ) , empty) ; ) *
78
77
empty
79
78
}
80
79
@@ -86,9 +85,9 @@ pub fn derive(input: &Input) -> TokenStream {
86
85
None
87
86
} else {
88
87
#(
89
- let #fields_names_1 = self . #fields_names_2 . first( ) . unwrap( ) ;
88
+ let #fields_names_hygienic_1 = self . #fields_names . first( ) . unwrap( ) ;
90
89
) *
91
- Some ( #ref_name{ #( #fields_names_1 : #fields_names_2 ) , * } )
90
+ Some ( #ref_name{ #( #fields_names : #fields_names_hygienic_1 ) , * } )
92
91
}
93
92
}
94
93
@@ -100,10 +99,10 @@ pub fn derive(input: &Input) -> TokenStream {
100
99
None
101
100
} else {
102
101
#(
103
- let ( #fields_names_1 , #slice_names_1 ) = self . #fields_names_2 . split_first( ) . unwrap( ) ;
102
+ let ( #fields_names_hygienic_1 , #fields_names_hygienic_2 ) = self . #fields_names . split_first( ) . unwrap( ) ;
104
103
) *
105
- let ref_ = #ref_name{ #( #fields_names_1 : #fields_names_2 ) , * } ;
106
- let slice = #slice_name{ #( #fields_names_1 : #slice_names_1 ) , * } ;
104
+ let ref_ = #ref_name{ #( #fields_names : #fields_names_hygienic_1 ) , * } ;
105
+ let slice = #slice_name{ #( #fields_names : #fields_names_hygienic_2 ) , * } ;
107
106
Some ( ( ref_, slice) )
108
107
}
109
108
}
@@ -116,9 +115,9 @@ pub fn derive(input: &Input) -> TokenStream {
116
115
None
117
116
} else {
118
117
#(
119
- let #fields_names_1 = self . #fields_names_2 . last( ) . unwrap( ) ;
118
+ let #fields_names_hygienic_1 = self . #fields_names . last( ) . unwrap( ) ;
120
119
) *
121
- Some ( #ref_name{ #( #fields_names_1 : #fields_names_2 ) , * } )
120
+ Some ( #ref_name{ #( #fields_names : #fields_names_hygienic_1 ) , * } )
122
121
}
123
122
}
124
123
@@ -130,10 +129,10 @@ pub fn derive(input: &Input) -> TokenStream {
130
129
None
131
130
} else {
132
131
#(
133
- let ( #fields_names_1 , #slice_names_1 ) = self . #fields_names_2 . split_last( ) . unwrap( ) ;
132
+ let ( #fields_names_hygienic_1 , #fields_names_hygienic_2 ) = self . #fields_names . split_last( ) . unwrap( ) ;
134
133
) *
135
- let ref_ = #ref_name{ #( #fields_names_1 : #fields_names_2 ) , * } ;
136
- let slice = #slice_name{ #( #fields_names_1 : #slice_names_1 ) , * } ;
134
+ let ref_ = #ref_name{ #( #fields_names : #fields_names_hygienic_1 ) , * } ;
135
+ let slice = #slice_name{ #( #fields_names : #fields_names_hygienic_2 ) , * } ;
137
136
Some ( ( ref_, slice) )
138
137
}
139
138
}
@@ -143,10 +142,10 @@ pub fn derive(input: &Input) -> TokenStream {
143
142
/// ::split_at()`](https://doc.rust-lang.org/std/primitive.slice.html#method.split_at).
144
143
pub fn split_at( & self , mid: usize ) -> ( #slice_name<' a>, #slice_name<' a>) {
145
144
#(
146
- let ( #slice_names_1 , #slice_names_2 ) = self . #fields_names_2 . split_at( mid) ;
145
+ let ( #fields_names_hygienic_1 , #fields_names_hygienic_2 ) = self . #fields_names . split_at( mid) ;
147
146
) *
148
- let left = #slice_name{ #( #fields_names_1 : #slice_names_1 ) , * } ;
149
- let right = #slice_name{ #( #fields_names_1 : #slice_names_2 ) , * } ;
147
+ let left = #slice_name{ #( #fields_names : #fields_names_hygienic_1 ) , * } ;
148
+ let right = #slice_name{ #( #fields_names : #fields_names_hygienic_2 ) , * } ;
150
149
( left, right)
151
150
}
152
151
@@ -193,7 +192,7 @@ pub fn derive(input: &Input) -> TokenStream {
193
192
' a: ' b
194
193
{
195
194
#slice_name {
196
- #( #fields_names_1 : & self . #fields_names_2 , ) *
195
+ #( #fields_names : & self . #fields_names , ) *
197
196
}
198
197
}
199
198
@@ -202,14 +201,14 @@ pub fn derive(input: &Input) -> TokenStream {
202
201
/// ::as_ptr()`](https://doc.rust-lang.org/std/primitive.slice.html#method.as_ptr).
203
202
pub fn as_ptr( & self ) -> #ptr_name {
204
203
#ptr_name {
205
- #( #fields_names_1 : self . #fields_names_2 . as_ptr( ) , ) *
204
+ #( #fields_names : self . #fields_names . as_ptr( ) , ) *
206
205
}
207
206
}
208
207
209
208
/// Similar to [`std::slice::from_raw_parts()`](https://doc.rust-lang.org/std/slice/fn.from_raw_parts.html).
210
209
pub unsafe fn from_raw_parts<' b>( data: #ptr_name, len: usize ) -> #slice_name<' b> {
211
210
#slice_name {
212
- #( #fields_names_1 : :: std:: slice:: from_raw_parts( data. #fields_names_2 , len) , ) *
211
+ #( #fields_names : :: std:: slice:: from_raw_parts( data. #fields_names , len) , ) *
213
212
}
214
213
}
215
214
}
@@ -224,7 +223,7 @@ pub fn derive(input: &Input) -> TokenStream {
224
223
/// ::to_vec()`](https://doc.rust-lang.org/std/primitive.slice.html#method.to_vec).
225
224
pub fn to_vec( & self ) -> #vec_name {
226
225
#vec_name {
227
- #( #fields_names_1 : self . #fields_names_2 . to_vec( ) , ) *
226
+ #( #fields_names : self . #fields_names . to_vec( ) , ) *
228
227
}
229
228
}
230
229
}
0 commit comments