@@ -78,7 +78,7 @@ use proc_macro2::{Delimiter, Group, Span, TokenTree};
78
78
79
79
use syn:: { ImplItemFn , visit_mut:: VisitMut } ;
80
80
81
- use quote:: { ToTokens , quote} ;
81
+ use quote:: { ToTokens , TokenStreamExt , quote} ;
82
82
use std:: fmt:: Write ;
83
83
84
84
/// A macro for creating SPIR-V `OpTypeImage` types. Always produces a
@@ -154,26 +154,31 @@ pub fn spirv(attr: TokenStream, item: TokenStream) -> TokenStream {
154
154
for tt in item {
155
155
match tt {
156
156
TokenTree :: Group ( group) if group. delimiter ( ) == Delimiter :: Parenthesis => {
157
- let mut sub_tokens = Vec :: new ( ) ;
157
+ let mut group_tokens = proc_macro2:: TokenStream :: new ( ) ;
158
+ let mut last_token_hashtag = false ;
158
159
for tt in group. stream ( ) {
160
+ let is_token_hashtag =
161
+ matches ! ( & tt, TokenTree :: Punct ( punct) if punct. as_char( ) == '#' ) ;
159
162
match tt {
160
163
TokenTree :: Group ( group)
161
164
if group. delimiter ( ) == Delimiter :: Bracket
162
- && matches ! ( group . stream ( ) . into_iter ( ) . next ( ) , Some ( TokenTree :: Ident ( ident ) ) if ident == "spirv" )
163
- && matches ! ( sub_tokens . last ( ) , Some ( TokenTree :: Punct ( p ) ) if p . as_char ( ) == '#' ) =>
165
+ && last_token_hashtag
166
+ && matches ! ( group . stream ( ) . into_iter ( ) . next ( ) , Some ( TokenTree :: Ident ( ident ) ) if ident == "spirv" ) =>
164
167
{
165
168
// group matches [spirv ...]
166
- let inner = group. stream ( ) ; // group stream doesn't include the brackets
167
- sub_tokens. extend (
169
+ // group stream doesn't include the brackets
170
+ let inner = group. stream ( ) ;
171
+ group_tokens. extend (
168
172
quote ! { [ cfg_attr( target_arch="spirv" , rust_gpu:: #inner) ] } ,
169
173
) ;
170
174
}
171
- _ => sub_tokens . push ( tt) ,
175
+ _ => group_tokens . append ( tt) ,
172
176
}
177
+ last_token_hashtag = is_token_hashtag;
173
178
}
174
179
tokens. push ( TokenTree :: from ( Group :: new (
175
180
Delimiter :: Parenthesis ,
176
- sub_tokens . into_iter ( ) . collect ( ) ,
181
+ group_tokens ,
177
182
) ) ) ;
178
183
}
179
184
_ => tokens. push ( tt) ,
0 commit comments