1 #ifndef DS_ARGINFO_H 2 #define DS_ARGINFO_H 3 4 #define ARGINFO_NONE(name) \ 5 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 0) \ 6 ZEND_END_ARG_INFO() 7 8 #define ARGINFO_OPTIONAL_ZVAL(name, z) \ 9 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 0) \ 10 ZEND_ARG_INFO(0, z) \ 11 ZEND_END_ARG_INFO() 12 13 #define ARGINFO_OPTIONAL_ZVAL_OPTIONAL_ZVAL(name, z1, z2) \ 14 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 0) \ 15 ZEND_ARG_INFO(0, z1) \ 16 ZEND_ARG_INFO(0, z2) \ 17 ZEND_END_ARG_INFO() 18 19 #define ARGINFO_CALLABLE_OPTIONAL_ZVAL(name, c, z) \ 20 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 1) \ 21 ZEND_ARG_TYPE_INFO(0, c, IS_CALLABLE, 0) \ 22 ZEND_ARG_INFO(0, z) \ 23 ZEND_END_ARG_INFO() 24 25 #define ARGINFO_OPTIONAL_STRING(name, s) \ 26 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 0) \ 27 ZEND_ARG_TYPE_INFO(0, s, IS_STRING, 0) \ 28 ZEND_END_ARG_INFO() 29 30 #define ARGINFO_OPTIONAL_CALLABLE(name, c) \ 31 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 0) \ 32 ZEND_ARG_TYPE_INFO(0, c, IS_CALLABLE, 1) \ 33 ZEND_END_ARG_INFO() 34 35 #define ARGINFO_CALLABLE(name, c) \ 36 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 1) \ 37 ZEND_ARG_TYPE_INFO(0, c, IS_CALLABLE, 0) \ 38 ZEND_END_ARG_INFO() 39 40 #define ARGINFO_VARIADIC_ZVAL(name, v) \ 41 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 0) \ 42 ZEND_ARG_VARIADIC_INFO(0, v) \ 43 ZEND_END_ARG_INFO() 44 45 #define ARGINFO_LONG(name, i) \ 46 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 1) \ 47 ZEND_ARG_TYPE_INFO(0, i, IS_LONG, 0) \ 48 ZEND_END_ARG_INFO() 49 50 #define ARGINFO_LONG_ZVAL(name, i, z) \ 51 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 2) \ 52 ZEND_ARG_TYPE_INFO(0, i, IS_LONG, 0) \ 53 ZEND_ARG_INFO(0, z) \ 54 ZEND_END_ARG_INFO() 55 56 #define ARGINFO_ZVAL_LONG(name, z, i) \ 57 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 2) \ 58 ZEND_ARG_INFO(0, z) \ 59 ZEND_ARG_TYPE_INFO(0, i, IS_LONG, 0) \ 60 ZEND_END_ARG_INFO() 61 62 #define ARGINFO_ZVAL(name, z) \ 63 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 1) \ 64 ZEND_ARG_INFO(0, z) \ 65 ZEND_END_ARG_INFO() 66 67 #define ARGINFO_ZVAL_ZVAL(name, z1, z2) \ 68 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 2) \ 69 ZEND_ARG_INFO(0, z1) \ 70 ZEND_ARG_INFO(0, z2) \ 71 ZEND_END_ARG_INFO() 72 73 #define ARGINFO_ZVAL_OPTIONAL_ZVAL(name, z1, z2) \ 74 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 1) \ 75 ZEND_ARG_INFO(0, z1) \ 76 ZEND_ARG_INFO(0, z2) \ 77 ZEND_END_ARG_INFO() 78 79 #define ARGINFO_LONG_VARIADIC_ZVAL(name, i, v) \ 80 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 1) \ 81 ZEND_ARG_TYPE_INFO(0, i, IS_LONG, 0) \ 82 ZEND_ARG_VARIADIC_INFO(0, v) \ 83 ZEND_END_ARG_INFO() 84 85 #if PHP_VERSION_ID >= 80000 86 #define DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \ 87 static const zend_internal_arg_info arginfo_##name[] = { \ 88 { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_CLASS_CONST(PHP_DS_NS_NAME#class_name, allow_null, 0), pass_by_ref}, 89 #elif PHP_VERSION_ID >= 70200 90 #define DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \ 91 static const zend_internal_arg_info arginfo_##name[] = { \ 92 { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_ENCODE_CLASS_CONST(PHP_DS_NS_NAME#class_name, allow_null), pass_by_ref, 0 }, 93 #else 94 #define DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \ 95 static const zend_internal_arg_info arginfo_##name[] = { \ 96 { (const char*)(zend_uintptr_t)(required_num_args), PHP_DS_NS_NAME#class_name, IS_OBJECT, pass_by_ref, allow_null, 0 }, 97 #endif 98 99 #if PHP_VERSION_ID >= 80000 100 #define DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \ 101 static const zend_internal_arg_info arginfo_##name[] = { \ 102 { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_CLASS_CONST(class_name, allow_null, 0), pass_by_ref}, 103 #elif PHP_VERSION_ID >= 70200 104 #define DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \ 105 static const zend_internal_arg_info arginfo_##name[] = { \ 106 { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_ENCODE_CLASS_CONST(class_name, allow_null), pass_by_ref, 0 }, 107 #else 108 #define DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \ 109 static const zend_internal_arg_info arginfo_##name[] = { \ 110 { (const char*)(zend_uintptr_t)(required_num_args), class_name, IS_OBJECT, pass_by_ref, allow_null, 0 }, 111 #endif 112 113 #if PHP_VERSION_ID >= 80000 114 #define DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, pass_by_ref, required_num_args, type, allow_null) \ 115 static const zend_internal_arg_info arginfo_##name[] = { \ 116 { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_CODE(type, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0)) }, 117 #elif PHP_VERSION_ID >= 70200 118 #define DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, pass_by_ref, required_num_args, type, allow_null) \ 119 static const zend_internal_arg_info arginfo_##name[] = { \ 120 { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_ENCODE(type, allow_null), pass_by_ref, 0 }, 121 #else 122 #define DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, pass_by_ref, required_num_args, type, allow_null) \ 123 static const zend_internal_arg_info arginfo_##name[] = { \ 124 { (const char*)(zend_uintptr_t)(required_num_args), NULL, type, pass_by_ref, allow_null, 0 }, 125 #endif 126 127 #define ARGINFO_ZVAL_RETURN_BOOL(name, z) \ 128 DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, 1, _IS_BOOL, 0) \ 129 ZEND_ARG_INFO(0, z) \ 130 ZEND_END_ARG_INFO() 131 132 #define ARGINFO_CALLABLE_RETURN_DS(name, c, col) \ 133 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 1, col, 0) \ 134 ZEND_ARG_TYPE_INFO(0, c, IS_CALLABLE, 0) \ 135 ZEND_END_ARG_INFO() 136 137 #define ARGINFO_OPTIONAL_ZVAL_RETURN_DS(name, z, col) \ 138 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 0, col, 0) \ 139 ZEND_ARG_INFO(0, z) \ 140 ZEND_END_ARG_INFO() 141 142 #define ARGINFO_OPTIONAL_STRING_RETURN_STRING(name, s) \ 143 DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, 0, IS_STRING, 0) \ 144 ZEND_ARG_TYPE_INFO(0, s, IS_STRING, 0) \ 145 ZEND_END_ARG_INFO() 146 147 #define ARGINFO_ZVAL_RETURN_DS(name, z, col) \ 148 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 1, col, 0) \ 149 ZEND_ARG_INFO(0, z) \ 150 ZEND_END_ARG_INFO() 151 152 #define ARGINFO_OPTIONAL_CALLABLE_RETURN_DS(name, c, col) \ 153 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 0, col, 0) \ 154 ZEND_ARG_TYPE_INFO(0, c, IS_CALLABLE, 1) \ 155 ZEND_END_ARG_INFO() 156 157 #define ARGINFO_LONG_OPTIONAL_LONG_RETURN_DS(name, i1, i2, col) \ 158 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 1, col, 0) \ 159 ZEND_ARG_TYPE_INFO(0, i1, IS_LONG, 0) \ 160 ZEND_ARG_TYPE_INFO(0, i2, IS_LONG, 1) \ 161 ZEND_END_ARG_INFO() 162 163 #define ARGINFO_LONG_RETURN_DS(name, i, col) \ 164 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 1, col, 0) \ 165 ZEND_ARG_TYPE_INFO(0, i, IS_LONG, 0) \ 166 ZEND_END_ARG_INFO() 167 168 #define ARGINFO_NONE_RETURN_LONG(name) \ 169 DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, 0, IS_LONG, 0) \ 170 ZEND_END_ARG_INFO() 171 172 #define ARGINFO_NONE_RETURN_STRING(name) \ 173 DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, 0, IS_STRING, 0) \ 174 ZEND_END_ARG_INFO() 175 176 #define ARGINFO_NONE_RETURN_DS(name, class_name) \ 177 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 0, class_name, 0) \ 178 ZEND_END_ARG_INFO() 179 180 #define ARGINFO_NONE_RETURN_OBJ(name, class_name) \ 181 DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, 0, #class_name, 1) \ 182 ZEND_END_ARG_INFO() 183 184 #define ARGINFO_NONE_RETURN_BOOL(name) \ 185 DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, 0, _IS_BOOL, 0) \ 186 ZEND_END_ARG_INFO() 187 188 #define ARGINFO_VARIADIC_ZVAL_RETURN_BOOL(name, v) \ 189 DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, 0, _IS_BOOL, 0) \ 190 ZEND_ARG_VARIADIC_INFO(0, v) \ 191 ZEND_END_ARG_INFO() 192 193 #define ARGINFO_NONE_RETURN_ARRAY(name) \ 194 DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, 0, IS_ARRAY, 0) \ 195 ZEND_END_ARG_INFO() 196 197 #define ARGINFO_DS_RETURN_DS(name, obj, cls, col) \ 198 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 1, col, 0) \ 199 ZEND_ARG_OBJ_INFO(0, obj, Ds\\cls, 0) \ 200 ZEND_END_ARG_INFO() 201 202 #endif 203