@@ -12,11 +12,6 @@ use std::io::Read;
12
12
use std:: path:: Path ;
13
13
14
14
use proc_macro:: TokenStream ;
15
- use quote:: Tokens ;
16
-
17
- macro_rules! my_quote {
18
- ( $( $t: tt) * ) => ( quote_spanned!( proc_macro2:: Span :: call_site( ) => $( $t) * ) )
19
- }
20
15
21
16
#[ proc_macro]
22
17
pub fn x86_functions ( input : TokenStream ) -> TokenStream {
@@ -56,7 +51,7 @@ pub fn x86_functions(input: TokenStream) -> TokenStream {
56
51
let functions = functions
57
52
. iter ( )
58
53
. map ( |& ( ref f, path) | {
59
- let name = f. ident ;
54
+ let name = & f. ident ;
60
55
// println!("{}", name);
61
56
let mut arguments = Vec :: new ( ) ;
62
57
for input in f. decl . inputs . iter ( ) {
@@ -67,19 +62,19 @@ pub fn x86_functions(input: TokenStream) -> TokenStream {
67
62
arguments. push ( to_type ( ty) ) ;
68
63
}
69
64
let ret = match f. decl . output {
70
- syn:: ReturnType :: Default => my_quote ! { None } ,
65
+ syn:: ReturnType :: Default => quote ! { None } ,
71
66
syn:: ReturnType :: Type ( _, ref t) => {
72
67
let ty = to_type ( t) ;
73
- my_quote ! { Some ( #ty) }
68
+ quote ! { Some ( #ty) }
74
69
}
75
70
} ;
76
71
let instrs = find_instrs ( & f. attrs ) ;
77
72
let target_feature = match find_target_feature ( & f. attrs ) {
78
- Some ( i) => my_quote ! { Some ( #i) } ,
79
- None => my_quote ! { None } ,
73
+ Some ( i) => quote ! { Some ( #i) } ,
74
+ None => quote ! { None } ,
80
75
} ;
81
76
let required_const = find_required_const ( & f. attrs ) ;
82
- my_quote ! {
77
+ quote ! {
83
78
Function {
84
79
name: stringify!( #name) ,
85
80
arguments: & [ #( #arguments) , * ] ,
@@ -93,43 +88,43 @@ pub fn x86_functions(input: TokenStream) -> TokenStream {
93
88
} )
94
89
. collect :: < Vec < _ > > ( ) ;
95
90
96
- let ret = my_quote ! { #input: & [ Function ] = & [ #( #functions) , * ] ; } ;
91
+ let ret = quote ! { #input: & [ Function ] = & [ #( #functions) , * ] ; } ;
97
92
// println!("{}", ret);
98
93
ret. into ( )
99
94
}
100
95
101
- fn to_type ( t : & syn:: Type ) -> Tokens {
96
+ fn to_type ( t : & syn:: Type ) -> proc_macro2 :: TokenStream {
102
97
match * t {
103
- syn:: Type :: Path ( ref p) => match extract_path_ident ( & p. path ) . as_ref ( ) {
104
- "__m128" => my_quote ! { & M128 } ,
105
- "__m128d" => my_quote ! { & M128D } ,
106
- "__m128i" => my_quote ! { & M128I } ,
107
- "__m256" => my_quote ! { & M256 } ,
108
- "__m256d" => my_quote ! { & M256D } ,
109
- "__m256i" => my_quote ! { & M256I } ,
110
- "__m64" => my_quote ! { & M64 } ,
111
- "bool" => my_quote ! { & BOOL } ,
112
- "f32" => my_quote ! { & F32 } ,
113
- "f64" => my_quote ! { & F64 } ,
114
- "i16" => my_quote ! { & I16 } ,
115
- "i32" => my_quote ! { & I32 } ,
116
- "i64" => my_quote ! { & I64 } ,
117
- "i8" => my_quote ! { & I8 } ,
118
- "u16" => my_quote ! { & U16 } ,
119
- "u32" => my_quote ! { & U32 } ,
120
- "u64" => my_quote ! { & U64 } ,
121
- "u8" => my_quote ! { & U8 } ,
122
- "CpuidResult" => my_quote ! { & CPUID } ,
98
+ syn:: Type :: Path ( ref p) => match extract_path_ident ( & p. path ) . to_string ( ) . as_ref ( ) {
99
+ "__m128" => quote ! { & M128 } ,
100
+ "__m128d" => quote ! { & M128D } ,
101
+ "__m128i" => quote ! { & M128I } ,
102
+ "__m256" => quote ! { & M256 } ,
103
+ "__m256d" => quote ! { & M256D } ,
104
+ "__m256i" => quote ! { & M256I } ,
105
+ "__m64" => quote ! { & M64 } ,
106
+ "bool" => quote ! { & BOOL } ,
107
+ "f32" => quote ! { & F32 } ,
108
+ "f64" => quote ! { & F64 } ,
109
+ "i16" => quote ! { & I16 } ,
110
+ "i32" => quote ! { & I32 } ,
111
+ "i64" => quote ! { & I64 } ,
112
+ "i8" => quote ! { & I8 } ,
113
+ "u16" => quote ! { & U16 } ,
114
+ "u32" => quote ! { & U32 } ,
115
+ "u64" => quote ! { & U64 } ,
116
+ "u8" => quote ! { & U8 } ,
117
+ "CpuidResult" => quote ! { & CPUID } ,
123
118
s => panic ! ( "unspported type: {}" , s) ,
124
119
} ,
125
120
syn:: Type :: Ptr ( syn:: TypePtr { ref elem, .. } )
126
121
| syn:: Type :: Reference ( syn:: TypeReference { ref elem, .. } ) => {
127
122
let tokens = to_type ( & elem) ;
128
- my_quote ! { & Type :: Ptr ( #tokens) }
123
+ quote ! { & Type :: Ptr ( #tokens) }
129
124
}
130
125
syn:: Type :: Slice ( _) => panic ! ( "unsupported slice" ) ,
131
126
syn:: Type :: Array ( _) => panic ! ( "unsupported array" ) ,
132
- syn:: Type :: Tuple ( _) => my_quote ! { & TUPLE } ,
127
+ syn:: Type :: Tuple ( _) => quote ! { & TUPLE } ,
133
128
_ => panic ! ( "unsupported type" ) ,
134
129
}
135
130
}
@@ -145,7 +140,7 @@ fn extract_path_ident(path: &syn::Path) -> syn::Ident {
145
140
syn:: PathArguments :: None => { }
146
141
_ => panic ! ( "unsupported path that has path arguments" ) ,
147
142
}
148
- path. segments . first ( ) . unwrap ( ) . value ( ) . ident
143
+ path. segments . first ( ) . unwrap ( ) . value ( ) . ident . clone ( )
149
144
}
150
145
151
146
fn walk ( root : & Path , files : & mut Vec < ( syn:: File , String ) > ) {
0 commit comments