@@ -200,7 +200,7 @@ impl ParseParameter for &str {
200
200
}
201
201
202
202
macro_rules! impl_parse_parameter_for_tuple {
203
- { $( ( $t: ident, $T: ident) ) ,* } => {
203
+ ( $( ( $t: ident, $T: ident) ) ,* ) => {
204
204
impl <$( $T: ParseParameter , ) * > ParseParameter for ( $( $T, ) * ) {
205
205
fn spec( ) -> Cow <' static , str > {
206
206
let mut s= String :: new( ) ;
@@ -248,57 +248,91 @@ impl_parse_parameter_for_tuple!((a, A), (b, B), (c, C), (d, D), (e, E), (f, F),
248
248
impl_parse_parameter_for_tuple ! ( ( a, A ) , ( b, B ) , ( c, C ) , ( d, D ) , ( e, E ) , ( f, F ) , ( g, G ) , ( h, H ) , ( i, I ) ) ;
249
249
impl_parse_parameter_for_tuple ! ( ( a, A ) , ( b, B ) , ( c, C ) , ( d, D ) , ( e, E ) , ( f, F ) , ( g, G ) , ( h, H ) , ( i, I ) , ( j, J ) ) ;
250
250
251
+ macro_rules! call_zend_parse_parameters {
252
+ ( $num_args: expr, $type_spec: expr, $parameters: expr $( , $i: expr) * ) => {
253
+ unsafe { zend_parse_parameters( $num_args, $type_spec, $( $parameters. get_unchecked( $i) . clone( ) , ) * ) }
254
+ }
255
+ }
256
+
251
257
fn zend_parse_fixed_parameters ( num_args : usize , type_spec : & str , parameters : & [ * mut c_void ] ) -> bool {
252
258
assert ! ( parameters. len( ) <= 20 ) ;
253
259
let type_spec = format ! ( "{}\0 " , type_spec) ;
254
260
255
- let p0 = parameters. get ( 0 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
256
- let p1 = parameters. get ( 1 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
257
- let p2 = parameters. get ( 2 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
258
- let p3 = parameters. get ( 3 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
259
- let p4 = parameters. get ( 4 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
260
- let p5 = parameters. get ( 5 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
261
- let p6 = parameters. get ( 6 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
262
- let p7 = parameters. get ( 7 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
263
- let p8 = parameters. get ( 8 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
264
- let p9 = parameters. get ( 9 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
265
- let p10 = parameters. get ( 10 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
266
- let p11 = parameters. get ( 11 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
267
- let p12 = parameters. get ( 12 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
268
- let p13 = parameters. get ( 13 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
269
- let p14 = parameters. get ( 14 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
270
- let p15 = parameters. get ( 15 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
271
- let p16 = parameters. get ( 16 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
272
- let p17 = parameters. get ( 17 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
273
- let p18 = parameters. get ( 18 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
274
- let p19 = parameters. get ( 19 ) . map ( Clone :: clone) . unwrap_or ( null_mut ( ) ) ;
275
-
276
- unsafe {
277
- zend_parse_parameters (
278
- num_args as c_int ,
279
- type_spec. as_ptr ( ) . cast ( ) ,
280
- p0 ,
281
- p1 ,
282
- p2 ,
283
- p3 ,
284
- p4 ,
285
- p5 ,
286
- p6 ,
287
- p7 ,
288
- p8 ,
289
- p9 ,
290
- p10,
291
- p11,
292
- p12,
293
- p13,
294
- p14,
295
- p15,
296
- p16,
297
- p17,
298
- p18,
299
- p19,
300
- ) == ZEND_RESULT_CODE_SUCCESS
301
- }
261
+ let b = match parameters. len ( ) {
262
+ 0 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters) ,
263
+ 1 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 ) ,
264
+ 2 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 ) ,
265
+ 3 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 ) ,
266
+ 4 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 ) ,
267
+ 5 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 ) ,
268
+ 6 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 , 5 ) ,
269
+ 7 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 , 5 , 6 ) ,
270
+ 8 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ) ,
271
+ 9 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ) ,
272
+ 10 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ) ,
273
+ 11 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ,
274
+ 12 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 ) ,
275
+ 13 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 ) ,
276
+ 14 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 ) ,
277
+ 15 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 ) ,
278
+ 16 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ) ,
279
+ 17 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 ) ,
280
+ 18 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 ) ,
281
+ 19 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 ) ,
282
+ 20 => call_zend_parse_parameters ! ( num_args as c_int, type_spec. as_ptr( ) . cast( ) , parameters, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 ) ,
283
+ _ => unreachable ! ( ) ,
284
+ } ;
285
+
286
+ b == ZEND_RESULT_CODE_SUCCESS
287
+
288
+
289
+ // let p0 = parameters.get(0).map(Clone::clone).unwrap_or(null_mut());
290
+ // let p1 = parameters.get(1).map(Clone::clone).unwrap_or(null_mut());
291
+ // let p2 = parameters.get(2).map(Clone::clone).unwrap_or(null_mut());
292
+ // let p3 = parameters.get(3).map(Clone::clone).unwrap_or(null_mut());
293
+ // let p4 = parameters.get(4).map(Clone::clone).unwrap_or(null_mut());
294
+ // let p5 = parameters.get(5).map(Clone::clone).unwrap_or(null_mut());
295
+ // let p6 = parameters.get(6).map(Clone::clone).unwrap_or(null_mut());
296
+ // let p7 = parameters.get(7).map(Clone::clone).unwrap_or(null_mut());
297
+ // let p8 = parameters.get(8).map(Clone::clone).unwrap_or(null_mut());
298
+ // let p9 = parameters.get(9).map(Clone::clone).unwrap_or(null_mut());
299
+ // let p10 = parameters.get(10).map(Clone::clone).unwrap_or(null_mut());
300
+ // let p11 = parameters.get(11).map(Clone::clone).unwrap_or(null_mut());
301
+ // let p12 = parameters.get(12).map(Clone::clone).unwrap_or(null_mut());
302
+ // let p13 = parameters.get(13).map(Clone::clone).unwrap_or(null_mut());
303
+ // let p14 = parameters.get(14).map(Clone::clone).unwrap_or(null_mut());
304
+ // let p15 = parameters.get(15).map(Clone::clone).unwrap_or(null_mut());
305
+ // let p16 = parameters.get(16).map(Clone::clone).unwrap_or(null_mut());
306
+ // let p17 = parameters.get(17).map(Clone::clone).unwrap_or(null_mut());
307
+ // let p18 = parameters.get(18).map(Clone::clone).unwrap_or(null_mut());
308
+ // let p19 = parameters.get(19).map(Clone::clone).unwrap_or(null_mut());
309
+ //
310
+ // unsafe {
311
+ // zend_parse_parameters(
312
+ // num_args as c_int,
313
+ // type_spec.as_ptr().cast(),
314
+ // p0 ,
315
+ // p1 ,
316
+ // p2 ,
317
+ // p3 ,
318
+ // p4 ,
319
+ // p5 ,
320
+ // p6 ,
321
+ // p7 ,
322
+ // p8 ,
323
+ // p9 ,
324
+ // p10,
325
+ // p11,
326
+ // p12,
327
+ // p13,
328
+ // p14,
329
+ // p15,
330
+ // p16,
331
+ // p17,
332
+ // p18,
333
+ // p19,
334
+ // ) == ZEND_RESULT_CODE_SUCCESS
335
+ // }
302
336
}
303
337
304
338
#[ repr( u32 ) ]
0 commit comments