@@ -154,8 +154,15 @@ pub(crate) fn binary_to_tokens(
154
154
}
155
155
BinOp :: Contains => {
156
156
let val_lit = syn:: LitStr :: new ( text, Span :: call_site ( ) ) ;
157
+
158
+ let finder_name = format ! ( "FINDER{}" , statics. len( ) ) ;
159
+ let finder_ident = Ident :: new ( & finder_name, Span :: call_site ( ) ) ;
160
+ let lazy_finder = quote ! {
161
+ static ref #finder_ident: memchr:: memmem:: Finder <' static > = memchr:: memmem:: Finder :: new( #val_lit. as_bytes( ) ) ;
162
+ } ;
163
+ statics. push ( lazy_finder) ;
157
164
quote ! {
158
- memchr :: memmem :: Finder :: new ( #val_lit . as_bytes ( ) ) . find( #proto. #field( ) . as_bytes( ) ) . is_some( )
165
+ #finder_ident . find( #proto. #field( ) . as_bytes( ) ) . is_some( )
159
166
}
160
167
}
161
168
_ => panic ! ( "Invalid binary operation `{}` for value: `{}`." , op, value) ,
@@ -170,8 +177,15 @@ pub(crate) fn binary_to_tokens(
170
177
}
171
178
BinOp :: Contains => {
172
179
let bytes_lit = syn:: LitByteStr :: new ( b, Span :: call_site ( ) ) ;
180
+
181
+ let finder_name = format ! ( "FINDER{}" , statics. len( ) ) ;
182
+ let finder_ident = Ident :: new ( & finder_name, Span :: call_site ( ) ) ;
183
+ let lazy_finder = quote ! {
184
+ static ref #finder_ident: memchr:: memmem:: Finder <' static > = memchr:: memmem:: Finder :: new( #bytes_lit) ;
185
+ } ;
186
+ statics. push ( lazy_finder) ;
173
187
quote ! {
174
- memchr :: memmem :: Finder :: new ( #bytes_lit ) . find( #proto. #field( ) . as_ref( ) ) . is_some( )
188
+ #finder_ident . find( #proto. #field( ) . as_ref( ) ) . is_some( )
175
189
}
176
190
}
177
191
_ => panic ! ( "Invalid binary operation `{}` for value: `{}`." , op, value) ,
0 commit comments