@@ -39,23 +39,26 @@ pub fn php_function(_attr: TokenStream, input: TokenStream) -> TokenStream {
39
39
pub fn php_minit_function ( _attr : TokenStream , input : TokenStream ) -> TokenStream {
40
40
let input = parse_macro_input ! ( input as ItemFn ) ;
41
41
42
- use syn:: export:: quote:: ToTokens ;
43
-
44
- let fn_arg = get_context_fn_arg ( & input. sig . inputs ) ;
45
-
46
- let vis = & input. vis ;
42
+ let name = & zend_module_startup_n ( input. sig . ident . clone ( ) ) ;
47
43
let inputs = & init_func_args ( Punctuated :: new ( ) ) ;
48
- let name = & input. sig . ident ;
44
+ let inner_inputs = & input. sig . inputs ;
45
+ let ret = & input. sig . output ;
49
46
let body = & input. block ;
50
47
let attrs = & input. attrs ;
51
48
52
- let name = Ident :: new ( & format ! ( "zm_startup_{}" , name) , Span :: call_site ( ) ) ;
53
-
54
49
let result = quote ! {
55
50
#[ no_mangle]
56
51
#( #attrs) *
57
- #vis extern "C" fn #name( #inputs) -> :: std:: os:: raw:: c_int {
58
- #body
52
+ pub extern "C" fn #name( #inputs) -> :: std:: os:: raw:: c_int {
53
+ let f = |#inner_inputs| #ret {
54
+ #body
55
+ } ;
56
+ let b: bool = f( ) ;
57
+ if b {
58
+ :: phper_sys:: ZEND_RESULT_CODE_SUCCESS
59
+ } else {
60
+ :: phper_sys:: ZEND_RESULT_CODE_FAILURE
61
+ }
59
62
}
60
63
} ;
61
64
@@ -67,19 +70,20 @@ pub fn php_mshutdown_function(_attr: TokenStream, input: TokenStream) -> TokenSt
67
70
let input = parse_macro_input ! ( input as ItemFn ) ;
68
71
69
72
let name = & zend_module_shutdown_n ( input. sig . ident . clone ( ) ) ;
73
+ let inputs = & shutdown_func_args ( Punctuated :: new ( ) ) ;
74
+ let inner_inputs = & input. sig . inputs ;
70
75
let ret = & input. sig . output ;
71
- let inputs = shutdown_func_args ( Punctuated :: new ( ) ) ;
72
76
let body = & input. block ;
73
77
let attrs = & input. attrs ;
74
78
75
79
let result = quote ! {
76
80
#[ no_mangle]
81
+ #( #attrs) *
77
82
pub extern "C" fn #name( #inputs) -> :: std:: os:: raw:: c_int {
78
- #( #attrs) *
79
- fn #name( ) #ret {
83
+ let f = |#inner_inputs| #ret {
80
84
#body
81
- }
82
- let b: bool = #name ( ) ;
85
+ } ;
86
+ let b: bool = f ( ) ;
83
87
if b {
84
88
:: phper_sys:: ZEND_RESULT_CODE_SUCCESS
85
89
} else {
@@ -95,19 +99,26 @@ pub fn php_mshutdown_function(_attr: TokenStream, input: TokenStream) -> TokenSt
95
99
pub fn php_rinit_function ( _attr : TokenStream , input : TokenStream ) -> TokenStream {
96
100
let input = parse_macro_input ! ( input as ItemFn ) ;
97
101
98
- let vis = & input. vis ;
99
- let inputs = & init_func_args ( input. sig . inputs . clone ( ) ) ;
100
- let name = & input. sig . ident ;
102
+ let name = & zend_module_activate_n ( input. sig . ident . clone ( ) ) ;
103
+ let inputs = & init_func_args ( Punctuated :: new ( ) ) ;
104
+ let inner_inputs = & input. sig . inputs ;
105
+ let ret = & input. sig . output ;
101
106
let body = & input. block ;
102
107
let attrs = & input. attrs ;
103
108
104
- let name = Ident :: new ( & format ! ( "zm_activate_{}" , name) , Span :: call_site ( ) ) ;
105
-
106
109
let result = quote ! {
107
110
#[ no_mangle]
108
- #( #attrs) *
109
- #vis extern "C" fn #name( #inputs) -> :: std:: os:: raw:: c_int {
110
- #body
111
+ pub extern "C" fn #name( #inputs) -> :: std:: os:: raw:: c_int {
112
+ #( #attrs) *
113
+ fn #name( #inner_inputs) #ret {
114
+ #body
115
+ }
116
+ let b: bool = #name( ) ;
117
+ if b {
118
+ :: phper_sys:: ZEND_RESULT_CODE_SUCCESS
119
+ } else {
120
+ :: phper_sys:: ZEND_RESULT_CODE_FAILURE
121
+ }
111
122
}
112
123
} ;
113
124
@@ -118,19 +129,51 @@ pub fn php_rinit_function(_attr: TokenStream, input: TokenStream) -> TokenStream
118
129
pub fn php_rshutdown_function ( _attr : TokenStream , mut input : TokenStream ) -> TokenStream {
119
130
let input = parse_macro_input ! ( input as ItemFn ) ;
120
131
121
- let vis = & input. vis ;
122
- let inputs = & shutdown_func_args ( input. sig . inputs . clone ( ) ) ;
123
- let name = & input. sig . ident ;
132
+ let name = & zend_module_deactivate_n ( input. sig . ident . clone ( ) ) ;
133
+ let inputs = & init_func_args ( Punctuated :: new ( ) ) ;
134
+ let inner_inputs = & input. sig . inputs ;
135
+ let ret = & input. sig . output ;
124
136
let body = & input. block ;
125
137
let attrs = & input. attrs ;
126
138
127
- let name = Ident :: new ( & format ! ( "zm_deactivate_{}" , name) , Span :: call_site ( ) ) ;
139
+ let result = quote ! {
140
+ #[ no_mangle]
141
+ pub extern "C" fn #name( #inputs) -> :: std:: os:: raw:: c_int {
142
+ #( #attrs) *
143
+ fn #name( #inner_inputs) #ret {
144
+ #body
145
+ }
146
+ let b: bool = #name( ) ;
147
+ if b {
148
+ :: phper_sys:: ZEND_RESULT_CODE_SUCCESS
149
+ } else {
150
+ :: phper_sys:: ZEND_RESULT_CODE_FAILURE
151
+ }
152
+ }
153
+ } ;
154
+
155
+ result. into ( )
156
+ }
157
+
158
+ #[ proc_macro_attribute]
159
+ pub fn php_minfo_function ( _attr : TokenStream , input : TokenStream ) -> TokenStream {
160
+ let input = parse_macro_input ! ( input as ItemFn ) ;
161
+
162
+ let name = & zend_module_info_n ( input. sig . ident . clone ( ) ) ;
163
+ let inputs = & zend_module_info_func_args ( Punctuated :: new ( ) ) ;
164
+ let inner_inputs = & input. sig . inputs ;
165
+ let ret = & input. sig . output ;
166
+ let body = & input. block ;
167
+ let attrs = & input. attrs ;
128
168
129
169
let result = quote ! {
130
170
#[ no_mangle]
131
171
#( #attrs) *
132
- #vis extern "C" fn #name( #inputs) -> :: std:: os:: raw:: c_int {
133
- #body
172
+ pub extern "C" fn #name( #inputs) {
173
+ let f = |#inner_inputs| #ret {
174
+ #body
175
+ } ;
176
+ let _: ( ) = f( ) ;
134
177
}
135
178
} ;
136
179
@@ -154,22 +197,27 @@ fn shutdown_func_args(mut inputs: Punctuated<FnArg, Comma>) -> Punctuated<FnArg,
154
197
inputs
155
198
}
156
199
157
- fn zend_module_info_func_args ( inputs : & mut Punctuated < FnArg , Comma > ) {
158
- inputs. push ( parse_str ( "zend_module_entry: *mut ::phper_sys::zend_module" ) . unwrap ( ) ) ;
200
+ fn zend_module_info_func_args ( mut inputs : Punctuated < FnArg , Comma > ) -> Punctuated < FnArg , Comma > {
201
+ inputs. push ( parse_str ( "zend_module: *mut ::phper_sys::zend_module_entry" ) . unwrap ( ) ) ;
202
+ inputs
203
+ }
204
+
205
+ fn zend_module_startup_n ( ident : Ident ) -> Ident {
206
+ Ident :: new ( & format ! ( "zm_startup_{}" , ident) , ident. span ( ) )
159
207
}
160
208
161
209
fn zend_module_shutdown_n ( ident : Ident ) -> Ident {
162
210
Ident :: new ( & format ! ( "zm_shutdown_{}" , ident) , ident. span ( ) )
163
211
}
164
212
165
- fn get_context_fn_arg ( inputs : & Punctuated < FnArg , Comma > ) -> Option < & FnArg > {
166
- inputs . iter ( ) . find ( |fn_arg| match fn_arg {
167
- FnArg :: Typed ( pat_type ) => pat_type . attrs . iter ( ) . any ( |attr| {
168
- attr . path
169
- . segments
170
- . iter ( )
171
- . any ( |seg| seg . ident . to_string ( ) == "context" . to_string ( ) )
172
- } ) ,
173
- _ => false ,
174
- } )
213
+ fn zend_module_activate_n ( ident : Ident ) -> Ident {
214
+ Ident :: new ( & format ! ( "zm_activate_{}" , ident ) , ident . span ( ) )
215
+ }
216
+
217
+ fn zend_module_deactivate_n ( ident : Ident ) -> Ident {
218
+ Ident :: new ( & format ! ( "zm_deactivate_{}" , ident ) , ident . span ( ) )
219
+ }
220
+
221
+ fn zend_module_info_n ( ident : Ident ) -> Ident {
222
+ Ident :: new ( & format ! ( "zm_info_{}" , ident ) , ident . span ( ) )
175
223
}
0 commit comments