xref: /ext-ds/src/php/parameters.h (revision 468a68cf)
1 #ifndef DS_PARAMETERS_H
2 #define DS_PARAMETERS_H
3 
4 #define SETUP_CALLABLE_VARS() \
5 zend_fcall_info fci = empty_fcall_info; \
6 zend_fcall_info_cache fci_cache = empty_fcall_info_cache;
7 
8 #define PARSE_1(spec, a)        if (zend_parse_parameters(ZEND_NUM_ARGS(), spec, a) == FAILURE) return
9 #define PARSE_2(spec, a, b)     if (zend_parse_parameters(ZEND_NUM_ARGS(), spec, a, b) == FAILURE) return
10 #define PARSE_3(spec, a, b, c)  if (zend_parse_parameters(ZEND_NUM_ARGS(), spec, a, b, c) == FAILURE) return
11 
12 #define PARSE_NONE if (zend_parse_parameters_none() == FAILURE) return
13 
14 #define PARSE_OPTIONAL_ZVAL(v) \
15 zval *v = NULL; \
16 PARSE_1("|z", &v)
17 
18 #define PARSE_OPTIONAL_ZVAL_OPTIONAL_ZVAL(v1, v2) \
19 zval *v1 = NULL; \
20 zval *v2 = NULL; \
21 PARSE_2("|zz", &v1, &v2)
22 
23 #define PARSE_STRING() \
24 char  *str; \
25 size_t len; \
26 PARSE_2("s", &str, &len)
27 
28 #define PARSE_CALLABLE_AND_OPTIONAL_ZVAL(v) \
29 SETUP_CALLABLE_VARS(); \
30 zval *v = NULL; \
31 PARSE_3("f|z", &fci, &fci_cache, &v)
32 
33 #define PARSE_CALLABLE() \
34 SETUP_CALLABLE_VARS(); \
35 PARSE_2("f", &fci, &fci_cache)
36 
37 #define PARSE_LONG_AND_LONG(a, b) \
38 zend_long a = 0; \
39 zend_long b = 0; \
40 PARSE_2("ll", &a, &b)
41 
42 #define PARSE_LONG_AND_ZVAL(l, z) \
43 zend_long l = 0; \
44 zval *z = NULL; \
45 PARSE_2("lz", &l, &z)
46 
47 #define PARSE_LONG_AND_OPTIONAL_ZVAL(l, z) \
48 zend_long l = 0; \
49 zval *z = NULL; \
50 PARSE_2("l|z", &l, &z)
51 
52 #define PARSE_ZVAL_AND_LONG(z, l) \
53 zval *z = NULL; \
54 zend_long l = 0; \
55 PARSE_2("zl", &z, &l)
56 
57 #define PARSE_VARIADIC_ZVAL() \
58 zval *argv = NULL; \
59 int argc = 0; \
60 PARSE_2("*", &argv, &argc)
61 
62 #define PARSE_LONG_AND_VARIADIC_ZVAL(_l) \
63 zval *argv = NULL; \
64 int argc = 0; \
65 zend_long _l = 0; \
66 PARSE_3("l*", &_l, &argv, &argc)
67 
68 #define PARSE_LONG(a) \
69 zend_long a = 0; \
70 PARSE_1("l", &a)
71 
72 #define PARSE_COMPARE_CALLABLE() \
73 DSG(user_compare_fci) = empty_fcall_info; \
74 DSG(user_compare_fci_cache) = empty_fcall_info_cache; \
75 PARSE_2("f", &DSG(user_compare_fci), &DSG(user_compare_fci_cache))
76 
77 #define PARSE_ZVAL(z) \
78 zval *z = NULL; \
79 PARSE_1("z", &z)
80 
81 #define PARSE_OBJ(o, ce) \
82 zval *o = NULL; \
83 PARSE_2("O", &o, ce)
84 
85 #define PARSE_ZVAL_ZVAL(z1, z2) \
86 zval *z1 = NULL; \
87 zval *z2 = NULL; \
88 PARSE_2("zz", &z1, &z2)
89 
90 #define PARSE_ZVAL_OPTIONAL_ZVAL(z1, z2) \
91 zval *z1 = NULL; \
92 zval *z2 = NULL; \
93 PARSE_2("z|z", &z1, &z2)
94 
95 #endif
96