@@ -78,7 +78,7 @@ use proc_macro2::{Delimiter, Group, Span, TokenTree};
7878
7979use syn:: { ImplItemFn , visit_mut:: VisitMut } ;
8080
81- use quote:: { ToTokens , quote} ;
81+ use quote:: { ToTokens , TokenStreamExt , quote} ;
8282use std:: fmt:: Write ;
8383
8484/// A macro for creating SPIR-V `OpTypeImage` types. Always produces a
@@ -154,26 +154,31 @@ pub fn spirv(attr: TokenStream, item: TokenStream) -> TokenStream {
154154 for tt in item {
155155 match tt {
156156 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 ;
158159 for tt in group. stream ( ) {
160+ let is_token_hashtag =
161+ matches ! ( & tt, TokenTree :: Punct ( punct) if punct. as_char( ) == '#' ) ;
159162 match tt {
160163 TokenTree :: Group ( group)
161164 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" ) =>
164167 {
165168 // 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 (
168172 quote ! { [ cfg_attr( target_arch="spirv" , rust_gpu:: #inner) ] } ,
169173 ) ;
170174 }
171- _ => sub_tokens . push ( tt) ,
175+ _ => group_tokens . append ( tt) ,
172176 }
177+ last_token_hashtag = is_token_hashtag;
173178 }
174179 tokens. push ( TokenTree :: from ( Group :: new (
175180 Delimiter :: Parenthesis ,
176- sub_tokens . into_iter ( ) . collect ( ) ,
181+ group_tokens ,
177182 ) ) ) ;
178183 }
179184 _ => tokens. push ( tt) ,
0 commit comments