@@ -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
@@ -153,26 +153,31 @@ pub fn spirv(attr: TokenStream, item: TokenStream) -> TokenStream {
153
153
for tt in item {
154
154
match tt {
155
155
TokenTree :: Group ( group) if group. delimiter ( ) == Delimiter :: Parenthesis => {
156
- let mut sub_tokens = Vec :: new ( ) ;
156
+ let mut group_tokens = proc_macro2:: TokenStream :: new ( ) ;
157
+ let mut last_token_hashtag = false ;
157
158
for tt in group. stream ( ) {
159
+ let is_token_hashtag =
160
+ matches ! ( & tt, TokenTree :: Punct ( punct) if punct. as_char( ) == '#' ) ;
158
161
match tt {
159
162
TokenTree :: Group ( group)
160
163
if group. delimiter ( ) == Delimiter :: Bracket
161
- && matches ! ( group . stream ( ) . into_iter ( ) . next ( ) , Some ( TokenTree :: Ident ( ident ) ) if ident == "spirv" )
162
- && matches ! ( sub_tokens . last ( ) , Some ( TokenTree :: Punct ( p ) ) if p . as_char ( ) == '#' ) =>
164
+ && last_token_hashtag
165
+ && matches ! ( group . stream ( ) . into_iter ( ) . next ( ) , Some ( TokenTree :: Ident ( ident ) ) if ident == "spirv" ) =>
163
166
{
164
167
// group matches [spirv ...]
165
- let inner = group. stream ( ) ; // group stream doesn't include the brackets
166
- sub_tokens. extend (
168
+ // group stream doesn't include the brackets
169
+ let inner = group. stream ( ) ;
170
+ group_tokens. extend (
167
171
quote ! { [ cfg_attr( target_arch="spirv" , rust_gpu:: #inner) ] } ,
168
172
) ;
169
173
}
170
- _ => sub_tokens . push ( tt) ,
174
+ _ => group_tokens . append ( tt) ,
171
175
}
176
+ last_token_hashtag = is_token_hashtag;
172
177
}
173
178
tokens. push ( TokenTree :: from ( Group :: new (
174
179
Delimiter :: Parenthesis ,
175
- sub_tokens . into_iter ( ) . collect ( ) ,
180
+ group_tokens ,
176
181
) ) ) ;
177
182
}
178
183
_ => tokens. push ( tt) ,
0 commit comments