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 >= 80100 86 87 #define ARGINFO_OFFSET_GET(name) \ 88 ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_##name, 0, 1, IS_MIXED, 0) \ 89 ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0) \ 90 ZEND_END_ARG_INFO() 91 92 #define ARGINFO_OFFSET_SET(name) \ 93 ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_##name, 0, 2, IS_VOID, 0) \ 94 ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0) \ 95 ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0) \ 96 ZEND_END_ARG_INFO() 97 98 #define ARGINFO_OFFSET_UNSET(name) \ 99 ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_##name, 0, 1, IS_VOID, 0) \ 100 ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0) \ 101 ZEND_END_ARG_INFO() 102 103 #elif PHP_VERSION_ID >= 80000 104 105 #define ARGINFO_OFFSET_GET(name) \ 106 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 1) \ 107 ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0) \ 108 ZEND_END_ARG_INFO() 109 110 #define ARGINFO_OFFSET_SET(name) \ 111 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 2) \ 112 ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0) \ 113 ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0) \ 114 ZEND_END_ARG_INFO() 115 116 #define ARGINFO_OFFSET_UNSET(name) \ 117 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 1) \ 118 ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0) \ 119 ZEND_END_ARG_INFO() 120 121 #else 122 123 #define ARGINFO_OFFSET_GET(name) \ 124 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 1) \ 125 ZEND_ARG_INFO(0, offset) \ 126 ZEND_END_ARG_INFO() 127 128 #define ARGINFO_OFFSET_SET(name) \ 129 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 2) \ 130 ZEND_ARG_INFO(0, offset) \ 131 ZEND_ARG_INFO(0, value) \ 132 ZEND_END_ARG_INFO() 133 134 #define ARGINFO_OFFSET_UNSET(name) \ 135 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 1) \ 136 ZEND_ARG_INFO(0, offset) \ 137 ZEND_END_ARG_INFO() 138 139 #endif 140 141 #if PHP_VERSION_ID >= 80100 142 143 #define ARGINFO_NONE_RETURN_TYPE(name, type) \ 144 ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_##name, 0, 0, type, 0) \ 145 ZEND_END_ARG_INFO() 146 #else 147 148 #define ARGINFO_NONE_RETURN_TYPE(name, type) \ 149 ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 0) \ 150 ZEND_END_ARG_INFO() 151 152 #endif 153 154 #if PHP_VERSION_ID >= 80000 155 #define DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \ 156 static const zend_internal_arg_info arginfo_##name[] = { \ 157 { (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}, 158 #elif PHP_VERSION_ID >= 70200 159 #define DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \ 160 static const zend_internal_arg_info arginfo_##name[] = { \ 161 { (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 }, 162 #else 163 #define DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \ 164 static const zend_internal_arg_info arginfo_##name[] = { \ 165 { (const char*)(zend_uintptr_t)(required_num_args), PHP_DS_NS_NAME#class_name, IS_OBJECT, pass_by_ref, allow_null, 0 }, 166 #endif 167 168 #if PHP_VERSION_ID >= 80000 169 #define DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \ 170 static const zend_internal_arg_info arginfo_##name[] = { \ 171 { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_CLASS_CONST(class_name, allow_null, 0), pass_by_ref}, 172 #elif PHP_VERSION_ID >= 70200 173 #define DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \ 174 static const zend_internal_arg_info arginfo_##name[] = { \ 175 { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_ENCODE_CLASS_CONST(class_name, allow_null), pass_by_ref, 0 }, 176 #else 177 #define DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \ 178 static const zend_internal_arg_info arginfo_##name[] = { \ 179 { (const char*)(zend_uintptr_t)(required_num_args), class_name, IS_OBJECT, pass_by_ref, allow_null, 0 }, 180 #endif 181 182 #if PHP_VERSION_ID >= 80100 183 #define DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, pass_by_ref, required_num_args, type, allow_null) \ 184 static const zend_internal_arg_info arginfo_##name[] = { \ 185 { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_CODE(type, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0)) }, 186 #elif PHP_VERSION_ID >= 80000 187 #define DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, pass_by_ref, required_num_args, type, allow_null) \ 188 static const zend_internal_arg_info arginfo_##name[] = { \ 189 { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_CODE(type, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0)) }, 190 #elif PHP_VERSION_ID >= 70200 191 #define DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, pass_by_ref, required_num_args, type, allow_null) \ 192 static const zend_internal_arg_info arginfo_##name[] = { \ 193 { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_ENCODE(type, allow_null), pass_by_ref, 0 }, 194 #else 195 #define DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, pass_by_ref, required_num_args, type, allow_null) \ 196 static const zend_internal_arg_info arginfo_##name[] = { \ 197 { (const char*)(zend_uintptr_t)(required_num_args), NULL, type, pass_by_ref, allow_null, 0 }, 198 #endif 199 200 #define ARGINFO_ZVAL_RETURN_BOOL(name, z) \ 201 DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, 1, _IS_BOOL, 0) \ 202 ZEND_ARG_INFO(0, z) \ 203 ZEND_END_ARG_INFO() 204 205 #define ARGINFO_CALLABLE_RETURN_DS(name, c, col) \ 206 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 1, col, 0) \ 207 ZEND_ARG_TYPE_INFO(0, c, IS_CALLABLE, 0) \ 208 ZEND_END_ARG_INFO() 209 210 #define ARGINFO_OPTIONAL_ZVAL_RETURN_DS(name, z, col) \ 211 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 0, col, 0) \ 212 ZEND_ARG_INFO(0, z) \ 213 ZEND_END_ARG_INFO() 214 215 #define ARGINFO_OPTIONAL_STRING_RETURN_STRING(name, s) \ 216 DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, 0, IS_STRING, 0) \ 217 ZEND_ARG_TYPE_INFO(0, s, IS_STRING, 0) \ 218 ZEND_END_ARG_INFO() 219 220 #define ARGINFO_ZVAL_RETURN_DS(name, z, col) \ 221 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 1, col, 0) \ 222 ZEND_ARG_INFO(0, z) \ 223 ZEND_END_ARG_INFO() 224 225 #define ARGINFO_OPTIONAL_CALLABLE_RETURN_DS(name, c, col) \ 226 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 0, col, 0) \ 227 ZEND_ARG_TYPE_INFO(0, c, IS_CALLABLE, 1) \ 228 ZEND_END_ARG_INFO() 229 230 #define ARGINFO_LONG_OPTIONAL_LONG_RETURN_DS(name, i1, i2, col) \ 231 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 1, col, 0) \ 232 ZEND_ARG_TYPE_INFO(0, i1, IS_LONG, 0) \ 233 ZEND_ARG_TYPE_INFO(0, i2, IS_LONG, 1) \ 234 ZEND_END_ARG_INFO() 235 236 #define ARGINFO_LONG_RETURN_DS(name, i, col) \ 237 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 1, col, 0) \ 238 ZEND_ARG_TYPE_INFO(0, i, IS_LONG, 0) \ 239 ZEND_END_ARG_INFO() 240 241 #define ARGINFO_NONE_RETURN_LONG(name) \ 242 DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, 0, IS_LONG, 0) \ 243 ZEND_END_ARG_INFO() 244 245 #define ARGINFO_NONE_RETURN_STRING(name) \ 246 DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, 0, IS_STRING, 0) \ 247 ZEND_END_ARG_INFO() 248 249 #define ARGINFO_NONE_RETURN_DS(name, class_name) \ 250 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 0, class_name, 0) \ 251 ZEND_END_ARG_INFO() 252 253 #define ARGINFO_NONE_RETURN_OBJ(name, class_name) \ 254 DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, 0, #class_name, 0) \ 255 ZEND_END_ARG_INFO() 256 257 #define ARGINFO_NONE_RETURN_BOOL(name) \ 258 DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, 0, _IS_BOOL, 0) \ 259 ZEND_END_ARG_INFO() 260 261 #define ARGINFO_VARIADIC_ZVAL_RETURN_BOOL(name, v) \ 262 DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, 0, _IS_BOOL, 0) \ 263 ZEND_ARG_VARIADIC_INFO(0, v) \ 264 ZEND_END_ARG_INFO() 265 266 #define ARGINFO_NONE_RETURN_ARRAY(name) \ 267 DS_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, 0, IS_ARRAY, 0) \ 268 ZEND_END_ARG_INFO() 269 270 #define ARGINFO_DS_RETURN_DS(name, obj, cls, col) \ 271 DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 1, col, 0) \ 272 ZEND_ARG_OBJ_INFO(0, obj, Ds\\cls, 0) \ 273 ZEND_END_ARG_INFO() 274 275 #endif 276