1 /*
2 +----------------------------------------------------------------------+
3 | Zend Engine, Func Info |
4 +----------------------------------------------------------------------+
5 | Copyright (c) The PHP Group |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 3.01 of the PHP license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | http://www.php.net/license/3_01.txt |
11 | If you did not receive a copy of the PHP license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@php.net so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
15 | Authors: Dmitry Stogov <dmitry@php.net> |
16 | Xinchen Hui <laruence@php.net> |
17 +----------------------------------------------------------------------+
18 */
19
20 #include "php.h"
21 #include "zend_compile.h"
22 #include "zend_extensions.h"
23 #include "zend_ssa.h"
24 #include "zend_optimizer_internal.h"
25 #include "zend_inference.h"
26 #include "zend_call_graph.h"
27 #include "zend_func_info.h"
28 #include "zend_inference.h"
29 #ifdef _WIN32
30 #include "win32/ioutil.h"
31 #endif
32
33 typedef uint32_t (*info_func_t)(const zend_call_info *call_info, const zend_ssa *ssa);
34
35 typedef struct _func_info_t {
36 const char *name;
37 int name_len;
38 uint32_t info;
39 info_func_t info_func;
40 } func_info_t;
41
42 /* MSVC defines its own IN macro, undefine it here */
43 #undef IN
44
45 #define F0(name, info) \
46 {name, sizeof(name)-1, (FUNC_MAY_WARN | (info)), NULL}
47 #define F1(name, info) \
48 {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_RC1 | (info)), NULL}
49 #define FN(name, info) \
50 {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_RCN | (info)), NULL}
51 #define FR(name, info) \
52 {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_REF | (info)), NULL}
53 #define FX(name, info) \
54 {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | (info)), NULL}
55 #define I0(name, info) \
56 {name, sizeof(name)-1, (info), NULL}
57 #define I1(name, info) \
58 {name, sizeof(name)-1, (MAY_BE_RC1 | (info)), NULL}
59 #define IN(name, info) \
60 {name, sizeof(name)-1, (MAY_BE_RC1 | MAY_BE_RCN | (info)), NULL}
61 #define FC(name, callback) \
62 {name, sizeof(name)-1, 0, callback}
63
zend_strlen_info(const zend_call_info * call_info,const zend_ssa * ssa)64 static uint32_t zend_strlen_info(const zend_call_info *call_info, const zend_ssa *ssa)
65 {
66 if (call_info->num_args == 1) {
67 uint32_t tmp = 0;
68 if (call_info->arg_info[0].opline) {
69 uint32_t arg_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
70
71 if (arg_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) {
72 tmp |= MAY_BE_LONG;
73 }
74 if (arg_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) {
75 /* warning, and returns NULL */
76 tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
77 }
78 } else {
79 tmp |= MAY_BE_LONG | FUNC_MAY_WARN | MAY_BE_NULL;
80 }
81 return tmp;
82 } else if (call_info->num_args != -1) {
83 /* warning, and returns NULL */
84 return FUNC_MAY_WARN | MAY_BE_NULL;
85 } else {
86 return MAY_BE_LONG | FUNC_MAY_WARN | MAY_BE_NULL;
87 }
88 }
89
zend_dechex_info(const zend_call_info * call_info,const zend_ssa * ssa)90 static uint32_t zend_dechex_info(const zend_call_info *call_info, const zend_ssa *ssa)
91 {
92 if (call_info->num_args == 1) {
93 return MAY_BE_RC1 | MAY_BE_STRING;
94 } else if (call_info->num_args != -1) {
95 /* warning, and returns NULL */
96 return FUNC_MAY_WARN | MAY_BE_NULL;
97 } else {
98 return FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_STRING | MAY_BE_NULL;
99 }
100 }
101
zend_range_info(const zend_call_info * call_info,const zend_ssa * ssa)102 static uint32_t zend_range_info(const zend_call_info *call_info, const zend_ssa *ssa)
103 {
104 if (call_info->num_args == 2 || call_info->num_args == 3) {
105
106 uint32_t t1 = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
107 uint32_t t2 = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[1].opline);
108 uint32_t t3 = 0;
109 uint32_t tmp = FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG;
110
111 if (call_info->num_args == 3) {
112 t3 = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[2].opline);
113 }
114 if ((t1 & MAY_BE_STRING) && (t2 & MAY_BE_STRING)) {
115 tmp |= MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING;
116 }
117 if ((t1 & (MAY_BE_DOUBLE|MAY_BE_STRING))
118 || (t2 & (MAY_BE_DOUBLE|MAY_BE_STRING))
119 || (t3 & (MAY_BE_DOUBLE|MAY_BE_STRING))) {
120 tmp |= MAY_BE_ARRAY_OF_DOUBLE;
121 }
122 if ((t1 & (MAY_BE_ANY-(MAY_BE_STRING|MAY_BE_DOUBLE))) && (t2 & (MAY_BE_ANY-(MAY_BE_STRING|MAY_BE_DOUBLE)))) {
123 if ((t3 & MAY_BE_ANY) != MAY_BE_DOUBLE) {
124 tmp |= MAY_BE_ARRAY_OF_LONG;
125 }
126 }
127 return tmp;
128 } else {
129 /* may warning, and return FALSE */
130 return FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING;
131 }
132 }
133
zend_is_type_info(const zend_call_info * call_info,const zend_ssa * ssa)134 static uint32_t zend_is_type_info(const zend_call_info *call_info, const zend_ssa *ssa)
135 {
136 if (call_info->num_args == 1) {
137 return MAY_BE_FALSE | MAY_BE_TRUE;
138 } else {
139 return MAY_BE_FALSE | MAY_BE_TRUE | FUNC_MAY_WARN;
140 }
141 }
142
zend_l_ss_info(const zend_call_info * call_info,const zend_ssa * ssa)143 static uint32_t zend_l_ss_info(const zend_call_info *call_info, const zend_ssa *ssa)
144 {
145 if (call_info->num_args == 2) {
146
147 uint32_t arg1_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
148 uint32_t arg2_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[1].opline);
149 uint32_t tmp = 0;
150
151 if ((arg1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) &&
152 (arg2_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT))) {
153 tmp |= MAY_BE_LONG;
154 }
155 if ((arg1_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) ||
156 (arg2_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
157 /* warning, and returns NULL */
158 tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
159 }
160 return tmp;
161 } else {
162 /* warning, and returns NULL */
163 return FUNC_MAY_WARN | MAY_BE_NULL | MAY_BE_LONG;
164 }
165 }
166
zend_lb_ssn_info(const zend_call_info * call_info,const zend_ssa * ssa)167 static uint32_t zend_lb_ssn_info(const zend_call_info *call_info, const zend_ssa *ssa)
168 {
169 if (call_info->num_args == 3) {
170 uint32_t arg1_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
171 uint32_t arg2_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[1].opline);
172 uint32_t arg3_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[2].opline);
173 uint32_t tmp = 0;
174
175 if ((arg1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) &&
176 (arg2_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) &&
177 (arg3_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT))) {
178 tmp |= MAY_BE_LONG | MAY_BE_FALSE;
179 }
180 if ((arg1_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) ||
181 (arg2_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) ||
182 (arg3_info & (MAY_BE_STRING|MAY_BE_RESOURCE|MAY_BE_ARRAY|MAY_BE_OBJECT))) {
183 /* warning, and returns NULL */
184 tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
185 }
186 return tmp;
187 } else {
188 /* warning, and returns NULL */
189 return FUNC_MAY_WARN | MAY_BE_NULL | MAY_BE_LONG;
190 }
191 }
192
zend_b_s_info(const zend_call_info * call_info,const zend_ssa * ssa)193 static uint32_t zend_b_s_info(const zend_call_info *call_info, const zend_ssa *ssa)
194 {
195 if (call_info->num_args == 1) {
196
197 uint32_t arg1_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
198 uint32_t tmp = 0;
199
200 if (arg1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) {
201 tmp |= MAY_BE_FALSE | MAY_BE_TRUE;
202 }
203 if (arg1_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) {
204 /* warning, and returns NULL */
205 tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
206 }
207 return tmp;
208 } else {
209 /* warning, and returns NULL */
210 return FUNC_MAY_WARN | MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE;
211 }
212 }
213
214 #define UNKNOWN_INFO (MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF)
215
216 static const func_info_t func_infos[] = {
217 /* zend */
218 I1("zend_version", MAY_BE_STRING),
219 I0("gc_collect_cycles", MAY_BE_LONG),
220 I0("gc_enabled", MAY_BE_FALSE | MAY_BE_TRUE),
221 F0("gc_enable", MAY_BE_NULL),
222 F0("gc_disable", MAY_BE_NULL),
223 F0("func_num_args", MAY_BE_LONG),
224 FN("func_get_arg", UNKNOWN_INFO),
225 F1("func_get_args", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
226 FC("strlen", zend_strlen_info),
227 FC("strcmp", zend_l_ss_info),
228 FC("strncmp", zend_lb_ssn_info),
229 FC("strcasecmp", zend_l_ss_info),
230 FC("strncasecmp", zend_lb_ssn_info),
231 F1("each", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_KEY_ANY),
232 F0("error_reporting", MAY_BE_NULL | MAY_BE_LONG),
233 F0("define", MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_NULL), // TODO: inline
234 FC("defined", zend_b_s_info), // TODO: inline
235 FN("get_class", MAY_BE_FALSE | MAY_BE_STRING),
236 FN("get_called_class", MAY_BE_FALSE | MAY_BE_STRING),
237 FN("get_parent_class", MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_NULL),
238 F0("is_subclass_of", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE), // TODO: inline
239 F0("is_a", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE), // TODO: inline
240 F1("get_class_vars", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF),
241 FN("get_object_vars", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF),
242 FN("get_mangled_object_vars", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF),
243 F1("get_class_methods", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
244 F0("method_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
245 F0("property_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
246 F0("class_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
247 F0("interface_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
248 F0("trait_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
249 FC("function_exists", zend_b_s_info), // TODO: inline
250 F0("class_alias", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
251 I1("get_included_files", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
252 F0("trigger_error", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
253 F0("user_error", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
254 FN("set_error_handler", MAY_BE_NULL | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_OBJECT | MAY_BE_OBJECT),
255 I0("restore_error_handler", MAY_BE_TRUE),
256 I0("restore_exception_handler", MAY_BE_TRUE),
257 I1("get_declared_traits", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
258 I1("get_declared_classes", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
259 I1("get_declared_interfaces", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
260 F1("get_defined_functions", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ARRAY),
261 I1("get_defined_vars", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF),
262 FN("create_function", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
263 F1("get_resource_type", MAY_BE_NULL | MAY_BE_STRING),
264 F1("get_defined_constants", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_RESOURCE | MAY_BE_ARRAY_OF_ARRAY),
265 F0("debug_print_backtrace", MAY_BE_NULL),
266 F1("debug_backtrace", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ARRAY),
267 F1("get_loaded_extensions", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
268 FC("extension_loaded", zend_b_s_info),
269 F1("get_extension_funcs", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
270
271 /* ext/standard */
272 FN("constant", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG | MAY_BE_DOUBLE | MAY_BE_STRING | MAY_BE_RESOURCE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
273 F1("bin2hex", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
274 F1("hex2bin", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
275 F0("sleep", MAY_BE_FALSE | MAY_BE_LONG),
276 F0("usleep", MAY_BE_NULL | MAY_BE_FALSE),
277 #if HAVE_NANOSLEEP
278 F0("time_nanosleep", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG),
279 F0("time_sleep_until", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
280 #endif
281 #if HAVE_STRPTIME
282 F1("strptime", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
283 #endif
284 F0("flush", MAY_BE_NULL),
285 F1("wordwrap", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
286 F1("htmlspecialchars", MAY_BE_NULL | MAY_BE_STRING),
287 F1("htmlentities", MAY_BE_NULL | MAY_BE_STRING),
288 FN("html_entity_decode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
289 FN("htmlspecialchars_decode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
290 F1("get_html_translation_table", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
291 F1("sha1", MAY_BE_NULL | MAY_BE_STRING),
292 F1("sha1_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
293 F1("md5", MAY_BE_NULL | MAY_BE_STRING),
294 F1("md5_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
295 F0("crc32", MAY_BE_NULL | MAY_BE_LONG),
296 F1("iptcparse", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ARRAY),
297 F1("iptcembed", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
298 F1("getimagesize", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
299 F1("getimagesizefromstring", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
300 F1("image_type_to_mime_type", MAY_BE_NULL | MAY_BE_STRING),
301 F1("image_type_to_extension", MAY_BE_FALSE | MAY_BE_STRING),
302 F0("phpinfo", MAY_BE_NULL | MAY_BE_TRUE),
303 F1("phpversion", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
304 F0("phpcredits", MAY_BE_NULL | MAY_BE_TRUE),
305 I1("php_sapi_name", MAY_BE_FALSE | MAY_BE_STRING),
306 F1("php_uname", MAY_BE_NULL | MAY_BE_STRING),
307 I1("php_ini_scanned_files", MAY_BE_FALSE | MAY_BE_STRING),
308 I1("php_ini_loaded_file", MAY_BE_FALSE | MAY_BE_STRING),
309 F0("strnatcmp", MAY_BE_NULL | MAY_BE_LONG),
310 F0("strnatcasecmp", MAY_BE_NULL | MAY_BE_LONG),
311 F0("substr_count", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
312 F0("strspn", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
313 F0("strcspn", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
314 F1("strtok", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
315 FN("strtoupper", MAY_BE_NULL | MAY_BE_STRING),
316 FN("strtolower", MAY_BE_NULL | MAY_BE_STRING),
317 F0("strpos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
318 F0("stripos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
319 F0("strrpos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
320 F0("strripos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
321 F1("strrev", MAY_BE_NULL | MAY_BE_STRING),
322 F1("hebrev", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
323 F1("hebrevc", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
324 F1("nl2br", MAY_BE_NULL | MAY_BE_STRING),
325 F1("basename", MAY_BE_NULL | MAY_BE_STRING),
326 F1("dirname", MAY_BE_NULL | MAY_BE_STRING),
327 F1("pathinfo", MAY_BE_NULL | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
328 F1("stripslashes", MAY_BE_NULL | MAY_BE_STRING),
329 F1("stripcslashes", MAY_BE_NULL | MAY_BE_STRING),
330 F1("strstr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
331 F1("stristr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
332 F1("strrchr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
333 F1("str_shuffle", MAY_BE_NULL | MAY_BE_STRING),
334 F1("str_word_count", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
335 F1("str_split", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
336 F1("strpbrk", MAY_BE_FALSE | MAY_BE_STRING),
337 F0("substr_compare", MAY_BE_FALSE | MAY_BE_LONG),
338 F0("strcoll", MAY_BE_NULL | MAY_BE_LONG),
339 #ifdef HAVE_STRFMON
340 F1("money_format", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
341 #endif
342 FN("substr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
343 FN("substr_replace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING),
344 F1("quotemeta", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
345 FN("ucfirst", MAY_BE_NULL | MAY_BE_STRING),
346 FN("lcfirst", MAY_BE_NULL | MAY_BE_STRING),
347 F1("ucwords", MAY_BE_NULL | MAY_BE_STRING),
348 FN("strtr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
349 FN("addslashes", MAY_BE_NULL | MAY_BE_STRING),
350 F1("addcslashes", MAY_BE_NULL | MAY_BE_STRING),
351 FN("rtrim", MAY_BE_NULL | MAY_BE_STRING),
352 FN("str_replace", MAY_BE_NULL | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY | MAY_BE_ARRAY_OF_OBJECT),
353 FN("str_ireplace", MAY_BE_NULL | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY | MAY_BE_ARRAY_OF_OBJECT),
354 F1("str_repeat", MAY_BE_NULL | MAY_BE_STRING),
355 F1("count_chars", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
356 F1("chunk_split", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
357 FN("trim", MAY_BE_NULL | MAY_BE_STRING),
358 FN("ltrim", MAY_BE_NULL | MAY_BE_STRING),
359 F1("strip_tags", MAY_BE_NULL | MAY_BE_STRING),
360 F0("similar_text", MAY_BE_NULL | MAY_BE_LONG),
361 F1("explode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
362 FN("implode", MAY_BE_NULL | MAY_BE_STRING),
363 FN("join", MAY_BE_NULL | MAY_BE_STRING),
364 FN("setlocale", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
365 F1("localeconv", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
366 #if HAVE_NL_LANGINFO
367 F1("nl_langinfo", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
368 #endif
369 F1("soundex", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
370 F0("levenshtein", MAY_BE_NULL | MAY_BE_LONG),
371 F1("chr", MAY_BE_NULL | MAY_BE_STRING),
372 F0("ord", MAY_BE_NULL | MAY_BE_LONG),
373 F0("parse_str", MAY_BE_NULL),
374 F1("str_getcsv", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_STRING),
375 F1("str_pad", MAY_BE_NULL | MAY_BE_STRING),
376 F1("chop", MAY_BE_NULL | MAY_BE_STRING),
377 F1("strchr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
378 F1("sprintf", MAY_BE_FALSE | MAY_BE_STRING),
379 F0("printf", MAY_BE_FALSE | MAY_BE_LONG),
380 F0("vprintf", MAY_BE_FALSE | MAY_BE_LONG),
381 F1("vsprintf", MAY_BE_FALSE | MAY_BE_STRING),
382 F0("fprintf", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
383 F0("vfprintf", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
384 F1("sscanf", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
385 F1("fscanf", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
386 F1("parse_url", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_LONG),
387 F1("urlencode", MAY_BE_NULL | MAY_BE_STRING),
388 F1("urldecode", MAY_BE_NULL | MAY_BE_STRING),
389 F1("rawurlencode", MAY_BE_NULL | MAY_BE_STRING),
390 F1("rawurldecode", MAY_BE_NULL | MAY_BE_STRING),
391 F1("http_build_query", MAY_BE_FALSE | MAY_BE_STRING),
392 #if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
393 F1("readlink", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
394 F0("linkinfo", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
395 F0("symlink", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
396 F0("link", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
397 #endif
398 F0("unlink", MAY_BE_FALSE | MAY_BE_TRUE),
399 F1("exec", MAY_BE_FALSE | MAY_BE_STRING),
400 F1("system", MAY_BE_FALSE | MAY_BE_STRING),
401 F1("escapeshellcmd", MAY_BE_NULL | MAY_BE_STRING),
402 F1("escapeshellarg", MAY_BE_NULL | MAY_BE_STRING),
403 F1("passthru", MAY_BE_NULL | MAY_BE_FALSE),
404 F1("shell_exec", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
405 #ifdef PHP_CAN_SUPPORT_PROC_OPEN
406 F1("proc_open", MAY_BE_FALSE | MAY_BE_RESOURCE),
407 F0("proc_close", MAY_BE_FALSE | MAY_BE_LONG),
408 F0("proc_terminate", MAY_BE_FALSE | MAY_BE_TRUE),
409 F1("proc_get_status", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
410 #endif
411 #ifdef HAVE_NICE
412 F0("proc_nice", MAY_BE_FALSE | MAY_BE_TRUE),
413 #endif
414 F0("rand", MAY_BE_NULL | MAY_BE_LONG),
415 F1("random_bytes", MAY_BE_STRING),
416 F1("random_int", MAY_BE_LONG),
417 F0("srand", MAY_BE_NULL),
418 F0("getrandmax", MAY_BE_NULL | MAY_BE_LONG),
419 F0("mt_rand", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
420 F0("mt_srand", MAY_BE_NULL),
421 I0("mt_getrandmax", MAY_BE_LONG),
422 #if HAVE_GETSERVBYNAME
423 F0("getservbyname", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
424 #endif
425 #if HAVE_GETSERVBYPORT
426 F1("getservbyport", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
427 #endif
428 #if HAVE_GETPROTOBYNAME
429 F0("getprotobyname", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
430 #endif
431 #if HAVE_GETPROTOBYNUMBER
432 F1("getprotobynumber", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
433 #endif
434 F0("getmyuid", MAY_BE_FALSE | MAY_BE_LONG),
435 F0("getmygid", MAY_BE_FALSE | MAY_BE_LONG),
436 F0("getmypid", MAY_BE_FALSE | MAY_BE_LONG),
437 F0("getmyinode", MAY_BE_FALSE | MAY_BE_LONG),
438 F0("getlastmod", MAY_BE_FALSE | MAY_BE_LONG),
439 F1("base64_decode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
440 F1("base64_encode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
441 F1("password_hash", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
442 F1("password_get_info", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
443 F0("password_needs_rehash", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
444 F0("password_verify", MAY_BE_FALSE | MAY_BE_TRUE),
445 F1("convert_uuencode", MAY_BE_FALSE | MAY_BE_STRING),
446 F1("convert_uudecode", MAY_BE_FALSE | MAY_BE_STRING),
447 F0("abs", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE),
448 F0("ceil", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
449 F0("floor", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
450 F0("round", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
451 F0("sin", MAY_BE_NULL | MAY_BE_DOUBLE),
452 F0("cos", MAY_BE_NULL | MAY_BE_DOUBLE),
453 F0("tan", MAY_BE_NULL | MAY_BE_DOUBLE),
454 F0("asin", MAY_BE_NULL | MAY_BE_DOUBLE),
455 F0("acos", MAY_BE_NULL | MAY_BE_DOUBLE),
456 F0("atan", MAY_BE_NULL | MAY_BE_DOUBLE),
457 F0("atanh", MAY_BE_NULL | MAY_BE_DOUBLE),
458 F0("atan2", MAY_BE_NULL | MAY_BE_DOUBLE),
459 F0("sinh", MAY_BE_NULL | MAY_BE_DOUBLE),
460 F0("cosh", MAY_BE_NULL | MAY_BE_DOUBLE),
461 F0("tanh", MAY_BE_NULL | MAY_BE_DOUBLE),
462 F0("asinh", MAY_BE_NULL | MAY_BE_DOUBLE),
463 F0("acosh", MAY_BE_NULL | MAY_BE_DOUBLE),
464 F0("expm1", MAY_BE_NULL | MAY_BE_DOUBLE),
465 F0("log1p", MAY_BE_NULL | MAY_BE_DOUBLE),
466 F0("pi", MAY_BE_DOUBLE),
467 F0("is_finite", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
468 F0("is_nan", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
469 F0("is_infinite", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
470 F0("pow", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_DOUBLE),
471 F0("exp", MAY_BE_NULL | MAY_BE_DOUBLE),
472 F0("log", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
473 F0("log10", MAY_BE_NULL | MAY_BE_DOUBLE),
474 F0("sqrt", MAY_BE_NULL | MAY_BE_DOUBLE),
475 F0("hypot", MAY_BE_NULL | MAY_BE_DOUBLE),
476 F0("deg2rad", MAY_BE_NULL | MAY_BE_DOUBLE),
477 F0("rad2deg", MAY_BE_NULL | MAY_BE_DOUBLE),
478 F0("bindec", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE),
479 F0("hexdec", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE),
480 F0("octdec", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE),
481 F1("decbin", MAY_BE_NULL | MAY_BE_STRING),
482 F1("decoct", MAY_BE_NULL | MAY_BE_STRING),
483 FC("dechex", zend_dechex_info),
484 F1("base_convert", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
485 F1("number_format", MAY_BE_NULL | MAY_BE_STRING),
486 F0("fmod", MAY_BE_NULL | MAY_BE_DOUBLE),
487 #ifdef HAVE_INET_NTOP
488 F1("inet_ntop", MAY_BE_FALSE | MAY_BE_STRING),
489 #endif
490 #ifdef HAVE_INET_PTON
491 F1("inet_pton", MAY_BE_FALSE | MAY_BE_STRING),
492 #endif
493 F0("ip2long", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
494 F1("long2ip", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
495 F1("getenv", MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
496 #ifdef HAVE_PUTENV
497 F0("putenv", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
498 #endif
499 F1("getopt", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
500 #ifdef HAVE_GETLOADAVG
501 F1("sys_getloadavg", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_DOUBLE),
502 #endif
503 #ifdef HAVE_GETTIMEOFDAY
504 F1("microtime", MAY_BE_NULL | MAY_BE_DOUBLE | MAY_BE_STRING),
505 F1("gettimeofday", MAY_BE_NULL | MAY_BE_DOUBLE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG),
506 #endif
507 #ifdef HAVE_GETRUSAGE
508 F1("getrusage", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG),
509 #endif
510 #ifdef HAVE_GETTIMEOFDAY
511 F1("uniqid", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
512 #endif
513 F1("quoted_printable_decode", MAY_BE_NULL | MAY_BE_STRING),
514 F1("quoted_printable_encode", MAY_BE_NULL | MAY_BE_STRING),
515 F1("convert_cyr_string", MAY_BE_NULL | MAY_BE_STRING),
516 I1("get_current_user", MAY_BE_STRING),
517 F0("set_time_limit", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
518 F0("header_register_callback", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
519 F1("get_cfg_var", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
520 I0("magic_quotes_runtime", MAY_BE_FALSE),
521 I0("set_magic_quotes_runtime", MAY_BE_FALSE),
522 I0("get_magic_quotes_gpc", MAY_BE_FALSE),
523 I0("get_magic_quotes_runtime", MAY_BE_FALSE),
524 F0("error_log", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
525 I1("error_get_last", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
526 FN("call_user_func", UNKNOWN_INFO),
527 FN("call_user_func_array", UNKNOWN_INFO),
528 FN("call_user_method", UNKNOWN_INFO),
529 FN("call_user_method_array", UNKNOWN_INFO),
530 FN("forward_static_call", UNKNOWN_INFO),
531 FN("forward_static_call_array", UNKNOWN_INFO),
532 F1("serialize", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
533 FN("unserialize", UNKNOWN_INFO),
534 F0("var_dump", MAY_BE_NULL),
535 F1("var_export", MAY_BE_NULL | MAY_BE_STRING),
536 F0("debug_zval_dump", MAY_BE_NULL),
537 F1("print_r", MAY_BE_TRUE | MAY_BE_STRING),
538 F0("memory_get_usage", MAY_BE_FALSE | MAY_BE_LONG),
539 F0("memory_get_peak_usage", MAY_BE_FALSE | MAY_BE_LONG),
540 F0("register_shutdown_function", MAY_BE_NULL | MAY_BE_FALSE),
541 F0("register_tick_function", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
542 F0("unregister_tick_function", MAY_BE_NULL),
543 F1("highlight_file", MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
544 F1("show_source", MAY_BE_FALSE | MAY_BE_STRING),
545 F1("highlight_string", MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
546 F1("php_strip_whitespace", MAY_BE_FALSE | MAY_BE_STRING),
547 FN("ini_get", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
548 F1("ini_get_all", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
549 FN("ini_set", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
550 F1("ini_alter", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
551 F0("ini_restore", MAY_BE_NULL),
552 I1("get_include_path", MAY_BE_FALSE | MAY_BE_STRING),
553 F1("set_include_path", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
554 F0("restore_include_path", MAY_BE_NULL),
555 F0("setcookie", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
556 F0("setrawcookie", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
557 F0("header", MAY_BE_NULL),
558 F0("header_remove", MAY_BE_NULL),
559 F0("headers_sent", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
560 F1("headers_list", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
561 F0("http_response_code", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
562 F0("connection_aborted", MAY_BE_LONG),
563 F0("connection_status", MAY_BE_LONG),
564 F0("ignore_user_abort", MAY_BE_NULL | MAY_BE_LONG),
565 F1("parse_ini_file", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
566 F1("parse_ini_string", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
567 #if ZEND_DEBUG
568 F1("config_get_hash", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
569 #endif
570 F0("is_uploaded_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
571 F0("move_uploaded_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
572 F1("gethostbyaddr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
573 F1("gethostbyname", MAY_BE_NULL | MAY_BE_STRING),
574 F1("gethostbynamel", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
575 #ifdef HAVE_GETHOSTNAME
576 F1("gethostname", MAY_BE_FALSE | MAY_BE_STRING),
577 #endif
578 #if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC
579 F0("dns_check_record", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
580 F0("checkdnsrr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
581 # if defined(PHP_WIN32) || HAVE_FULL_DNS_FUNCS
582 F0("dns_get_mx", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
583 F0("getmxrr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
584 F1("dns_get_record", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ARRAY),
585 # endif
586 #endif
587 F0("intval", MAY_BE_NULL | MAY_BE_LONG),
588 F0("floatval", MAY_BE_NULL | MAY_BE_DOUBLE),
589 F0("doubleval", MAY_BE_NULL | MAY_BE_DOUBLE),
590 FN("strval", MAY_BE_NULL | MAY_BE_STRING),
591 F0("boolval", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
592 FN("gettype", MAY_BE_NULL | MAY_BE_STRING),
593 F0("settype", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
594 FC("is_null", zend_is_type_info),
595 F0("is_resource", MAY_BE_FALSE | MAY_BE_TRUE), // TODO: inline with support for closed resources
596 FC("is_bool", zend_is_type_info),
597 FC("is_long", zend_is_type_info),
598 FC("is_float", zend_is_type_info),
599 FC("is_int", zend_is_type_info),
600 FC("is_integer", zend_is_type_info),
601 FC("is_double", zend_is_type_info),
602 FC("is_real", zend_is_type_info),
603 F0("is_numeric", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
604 FC("is_string", zend_is_type_info),
605 FC("is_array", zend_is_type_info),
606 F0("is_object", MAY_BE_FALSE | MAY_BE_TRUE), // TODO: inline with support for incomplete class
607 F0("is_scalar", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
608 F0("is_callable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
609 F0("is_countable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
610 F0("is_iterable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
611 F0("pclose", MAY_BE_FALSE | MAY_BE_LONG),
612 F1("popen", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
613 F0("readfile", MAY_BE_FALSE | MAY_BE_LONG),
614 F0("rewind", MAY_BE_FALSE | MAY_BE_TRUE),
615 F0("rmdir", MAY_BE_FALSE | MAY_BE_TRUE),
616 F0("umask", MAY_BE_FALSE | MAY_BE_LONG),
617 F0("fclose", MAY_BE_FALSE | MAY_BE_TRUE),
618 F0("feof", MAY_BE_FALSE | MAY_BE_TRUE),
619 F1("fgetc", MAY_BE_FALSE | MAY_BE_STRING),
620 F1("fgets", MAY_BE_FALSE | MAY_BE_STRING),
621 F1("fgetss", MAY_BE_FALSE | MAY_BE_STRING),
622 F1("fread", MAY_BE_FALSE | MAY_BE_STRING),
623 F1("fopen", MAY_BE_FALSE | MAY_BE_RESOURCE),
624 F0("fpassthru", MAY_BE_FALSE | MAY_BE_LONG),
625 F0("ftruncate", MAY_BE_FALSE | MAY_BE_TRUE),
626 F1("fstat", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG),
627 F0("fseek", MAY_BE_FALSE | MAY_BE_LONG),
628 F0("ftell", MAY_BE_FALSE | MAY_BE_LONG),
629 F0("fflush", MAY_BE_FALSE | MAY_BE_TRUE),
630 F0("fwrite", MAY_BE_FALSE | MAY_BE_LONG),
631 F0("fputs", MAY_BE_FALSE | MAY_BE_LONG),
632 F0("mkdir", MAY_BE_FALSE | MAY_BE_TRUE),
633 F0("rename", MAY_BE_FALSE | MAY_BE_TRUE),
634 F0("copy", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
635 F1("tempnam", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
636 F1("tmpfile", MAY_BE_FALSE | MAY_BE_RESOURCE),
637 F1("file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
638 F1("file_get_contents", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
639 F0("file_put_contents", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
640 F0("stream_select", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
641 F1("stream_context_create", MAY_BE_FALSE | MAY_BE_RESOURCE),
642 F0("stream_context_set_params", MAY_BE_FALSE | MAY_BE_TRUE),
643 F1("stream_context_get_params", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
644 F0("stream_context_set_option", MAY_BE_FALSE | MAY_BE_TRUE),
645 FN("stream_context_get_options", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
646 FN("stream_context_get_default", MAY_BE_FALSE | MAY_BE_RESOURCE),
647 FN("stream_context_set_default", MAY_BE_FALSE | MAY_BE_RESOURCE),
648 FN("stream_filter_prepend", MAY_BE_FALSE | MAY_BE_RESOURCE),
649 FN("stream_filter_append", MAY_BE_FALSE | MAY_BE_RESOURCE),
650 F0("stream_filter_remove", MAY_BE_FALSE | MAY_BE_TRUE),
651 F1("stream_socket_client", MAY_BE_FALSE | MAY_BE_RESOURCE),
652 F1("stream_socket_server", MAY_BE_FALSE | MAY_BE_RESOURCE),
653 F1("stream_socket_accept", MAY_BE_FALSE | MAY_BE_RESOURCE),
654 F1("stream_socket_get_name", MAY_BE_FALSE | MAY_BE_STRING),
655 F1("stream_socket_recvfrom", MAY_BE_FALSE | MAY_BE_STRING),
656 F0("stream_socket_sendto", MAY_BE_FALSE | MAY_BE_LONG),
657 F0("stream_socket_enable_crypto", MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
658 #ifdef HAVE_SHUTDOWN
659 F0("stream_socket_shutdown", MAY_BE_FALSE | MAY_BE_TRUE),
660 #endif
661 #if HAVE_SOCKETPAIR
662 F1("stream_socket_pair", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_RESOURCE),
663 #endif
664 F0("stream_copy_to_stream", MAY_BE_FALSE | MAY_BE_LONG),
665 F1("stream_get_contents", MAY_BE_FALSE | MAY_BE_STRING),
666 F0("stream_supports_lock", MAY_BE_FALSE | MAY_BE_TRUE),
667 F1("fgetcsv", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_STRING),
668 F0("fputcsv", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
669 F0("flock", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
670 F1("get_meta_tags", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
671 F0("stream_set_read_buffer", MAY_BE_FALSE | MAY_BE_LONG),
672 F0("stream_set_write_buffer", MAY_BE_FALSE | MAY_BE_LONG),
673 F0("set_file_buffer", MAY_BE_FALSE | MAY_BE_LONG),
674 F0("stream_set_chunk_size", MAY_BE_FALSE | MAY_BE_LONG),
675 F0("stream_set_blocking", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
676 F0("socket_set_blocking", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
677 F1("stream_get_meta_data", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
678 F1("stream_get_line", MAY_BE_FALSE | MAY_BE_STRING),
679 F0("stream_wrapper_register", MAY_BE_FALSE | MAY_BE_TRUE),
680 F0("stream_register_wrapper", MAY_BE_FALSE | MAY_BE_TRUE),
681 F0("stream_wrapper_unregister", MAY_BE_FALSE | MAY_BE_TRUE),
682 F0("stream_wrapper_restore", MAY_BE_FALSE | MAY_BE_TRUE),
683 F1("stream_get_wrappers", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
684 F1("stream_get_transports", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
685 F1("stream_resolve_include_path", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
686 F0("stream_is_local", MAY_BE_FALSE | MAY_BE_TRUE),
687 F1("get_headers", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
688 #if HAVE_SYS_TIME_H || defined(PHP_WIN32)
689 F0("stream_set_timeout", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
690 F0("socket_set_timeout", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
691 #endif
692 F1("socket_get_status", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
693 #if HAVE_REALPATH || defined(ZTS)
694 F1("realpath", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
695 #endif
696 #ifdef HAVE_FNMATCH
697 F0("fnmatch", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
698 #endif
699 F1("fsockopen", MAY_BE_FALSE | MAY_BE_RESOURCE),
700 FN("pfsockopen", MAY_BE_FALSE | MAY_BE_RESOURCE),
701 F1("pack", MAY_BE_FALSE | MAY_BE_STRING),
702 F1("unpack", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
703 F1("get_browser", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_OBJECT | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
704 F1("crypt", MAY_BE_NULL | MAY_BE_STRING),
705 FN("opendir", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
706 F0("closedir", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
707 F0("chdir", MAY_BE_FALSE | MAY_BE_TRUE),
708 #if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
709 F0("chroot", MAY_BE_FALSE | MAY_BE_TRUE),
710 #endif
711 F1("getcwd", MAY_BE_FALSE | MAY_BE_STRING),
712 F0("rewinddir", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
713 F1("readdir", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
714 F1("dir", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
715 F1("scandir", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
716 #ifdef HAVE_GLOB
717 F1("glob", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
718 #endif
719 F0("fileatime", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
720 F0("filectime", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
721 F0("filegroup", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
722 F0("fileinode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
723 F0("filemtime", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
724 F0("fileowner", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
725 F0("fileperms", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
726 F0("filesize", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
727 F1("filetype", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
728 F0("file_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
729 F0("is_writable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
730 F0("is_writeable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
731 F0("is_readable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
732 F0("is_executable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
733 F0("is_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
734 F0("is_dir", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
735 F0("is_link", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
736 F1("stat", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
737 F1("lstat", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
738 F0("chown", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
739 F0("chgrp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
740 #if HAVE_LCHOWN
741 F0("lchown", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
742 #endif
743 #if HAVE_LCHOWN
744 F0("lchgrp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
745 #endif
746 F0("chmod", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
747 #if HAVE_UTIME
748 F0("touch", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
749 #endif
750 F0("clearstatcache", MAY_BE_NULL),
751 F0("disk_total_space", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
752 F0("disk_free_space", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
753 F0("diskfreespace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
754 I0("realpath_cache_size", MAY_BE_LONG),
755 I1("realpath_cache_get", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ARRAY),
756 F0("mail", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
757 F0("ezmlm_hash", MAY_BE_NULL | MAY_BE_LONG),
758 #ifdef HAVE_SYSLOG_H
759 F0("openlog", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
760 F0("syslog", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
761 F0("closelog", MAY_BE_TRUE),
762 #endif
763 F0("lcg_value", MAY_BE_DOUBLE),
764 F1("metaphone", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
765 F0("ob_start", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
766 F0("ob_flush", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
767 F0("ob_clean", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
768 F0("ob_end_flush", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
769 F0("ob_end_clean", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
770 F1("ob_get_flush", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
771 F1("ob_get_clean", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
772 F0("ob_get_length", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
773 F0("ob_get_level", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
774 F1("ob_get_status", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
775 FN("ob_get_contents", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
776 F0("ob_implicit_flush", MAY_BE_NULL),
777 F1("ob_list_handlers", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
778 F0("ksort", MAY_BE_FALSE | MAY_BE_TRUE),
779 F0("krsort", MAY_BE_FALSE | MAY_BE_TRUE),
780 F0("natsort", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
781 F0("natcasesort", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
782 F0("asort", MAY_BE_FALSE | MAY_BE_TRUE),
783 F0("arsort", MAY_BE_FALSE | MAY_BE_TRUE),
784 F0("sort", MAY_BE_FALSE | MAY_BE_TRUE),
785 F0("rsort", MAY_BE_FALSE | MAY_BE_TRUE),
786 F0("usort", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
787 F0("uasort", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
788 F0("uksort", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
789 F0("shuffle", MAY_BE_FALSE | MAY_BE_TRUE),
790 F0("array_walk", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
791 F0("array_walk_recursive", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
792 F0("count", MAY_BE_NULL | MAY_BE_LONG),
793 FN("end", UNKNOWN_INFO),
794 FN("prev", UNKNOWN_INFO),
795 FN("next", UNKNOWN_INFO),
796 FN("reset", UNKNOWN_INFO),
797 FN("current", UNKNOWN_INFO),
798 FN("key", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
799 FN("min", UNKNOWN_INFO),
800 FN("max", UNKNOWN_INFO),
801 F0("in_array", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
802 FN("array_search", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
803 F0("extract", MAY_BE_NULL | MAY_BE_LONG),
804 F1("compact", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
805 F1("array_fill", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
806 F1("array_fill_keys", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
807 FC("range", zend_range_info),
808 F0("array_multisort", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
809 F0("array_push", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
810 FN("array_pop", UNKNOWN_INFO),
811 FN("array_shift", UNKNOWN_INFO),
812 F0("array_unshift", MAY_BE_NULL | MAY_BE_LONG),
813 F1("array_splice", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
814 F1("array_slice", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
815 FN("array_merge", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
816 F1("array_merge_recursive", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
817 F1("array_replace", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
818 F1("array_replace_recursive", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
819 FN("array_keys", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
820 FN("array_values", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
821 F1("array_count_values", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG),
822 F1("array_column", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
823 F1("array_reverse", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
824 F1("array_reduce", UNKNOWN_INFO),
825 FN("array_pad", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
826 F1("array_flip", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
827 F1("array_change_key_case", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
828 F1("array_rand", UNKNOWN_INFO),
829 FN("array_unique", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
830 F1("array_intersect", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
831 F1("array_intersect_key", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
832 F1("array_intersect_ukey", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
833 F1("array_uintersect", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
834 F1("array_intersect_assoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
835 F1("array_uintersect_assoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
836 F1("array_intersect_uassoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
837 F1("array_uintersect_uassoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
838 FN("array_diff", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
839 F1("array_diff_key", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
840 F1("array_diff_ukey", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
841 F1("array_udiff", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
842 F1("array_diff_assoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
843 F1("array_udiff_assoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
844 F1("array_diff_uassoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
845 F1("array_udiff_uassoc", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
846 F0("array_sum", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_DOUBLE),
847 F0("array_product", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_DOUBLE),
848 F1("array_filter", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
849 FN("array_map", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
850 F1("array_chunk", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
851 F1("array_combine", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
852 F0("array_key_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
853 FN("array_key_first", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
854 FN("array_key_last", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
855 F1("pos", UNKNOWN_INFO),
856 F0("sizeof", MAY_BE_NULL | MAY_BE_LONG),
857 F0("key_exists", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
858 F0("assert", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
859 F1("assert_options", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_OBJECT | MAY_BE_OBJECT),
860 F0("version_compare", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
861 #if HAVE_FTOK
862 F0("ftok", MAY_BE_NULL | MAY_BE_LONG),
863 #endif
864 F1("str_rot13", MAY_BE_NULL | MAY_BE_STRING),
865 I1("stream_get_filters", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
866 F0("stream_filter_register", MAY_BE_FALSE | MAY_BE_TRUE),
867 F1("stream_bucket_make_writeable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
868 F1("stream_bucket_prepend", MAY_BE_FALSE | MAY_BE_OBJECT),
869 F1("stream_bucket_append", MAY_BE_FALSE | MAY_BE_OBJECT),
870 F1("stream_bucket_new", MAY_BE_FALSE | MAY_BE_OBJECT),
871 F0("output_add_rewrite_var", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
872 F0("output_reset_rewrite_vars", MAY_BE_FALSE),
873 I1("sys_get_temp_dir", MAY_BE_STRING),
874
875 /* ext/date */
876 F0("strtotime", MAY_BE_FALSE | MAY_BE_LONG),
877 F1("date", MAY_BE_FALSE | MAY_BE_STRING),
878 F0("idate", MAY_BE_FALSE | MAY_BE_LONG),
879 F1("gmdate", MAY_BE_FALSE | MAY_BE_STRING),
880 F0("mktime", MAY_BE_FALSE | MAY_BE_LONG),
881 F0("gmmktime", MAY_BE_FALSE | MAY_BE_LONG),
882 F0("checkdate", MAY_BE_FALSE | MAY_BE_TRUE),
883 F1("strftime", MAY_BE_FALSE | MAY_BE_STRING),
884 F1("gmstrftime", MAY_BE_FALSE | MAY_BE_STRING),
885 F0("time", MAY_BE_LONG),
886 F1("localtime", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG),
887 F1("getdate", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
888 F1("date_create", MAY_BE_FALSE | MAY_BE_OBJECT),
889 F1("date_create_immutable", MAY_BE_FALSE | MAY_BE_OBJECT),
890 F1("date_create_from_format", MAY_BE_FALSE | MAY_BE_OBJECT),
891 F1("date_create_immutable_from_format", MAY_BE_FALSE | MAY_BE_OBJECT),
892 F1("date_parse", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
893 F1("date_parse_from_format", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
894 F1("date_get_last_errors", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_ARRAY),
895 F1("date_format", MAY_BE_FALSE | MAY_BE_STRING),
896 FN("date_modify", MAY_BE_FALSE | MAY_BE_OBJECT),
897 FN("date_add", MAY_BE_FALSE | MAY_BE_OBJECT),
898 FN("date_sub", MAY_BE_FALSE | MAY_BE_OBJECT),
899 F1("date_timezone_get", MAY_BE_FALSE | MAY_BE_OBJECT),
900 FN("date_timezone_set", MAY_BE_FALSE | MAY_BE_OBJECT),
901 F0("date_offset_get", MAY_BE_FALSE | MAY_BE_LONG),
902 F1("date_diff", MAY_BE_FALSE | MAY_BE_OBJECT),
903 FN("date_time_set", MAY_BE_FALSE | MAY_BE_OBJECT),
904 FN("date_date_set", MAY_BE_FALSE | MAY_BE_OBJECT),
905 FN("date_isodate_set", MAY_BE_FALSE | MAY_BE_OBJECT),
906 FN("date_timestamp_set", MAY_BE_FALSE | MAY_BE_OBJECT),
907 F0("date_timestamp_get", MAY_BE_FALSE | MAY_BE_LONG),
908 F1("timezone_open", MAY_BE_FALSE | MAY_BE_OBJECT),
909 F1("timezone_name_get", MAY_BE_FALSE | MAY_BE_STRING),
910 F1("timezone_name_from_abbr", MAY_BE_FALSE | MAY_BE_STRING),
911 F0("timezone_offset_get", MAY_BE_FALSE | MAY_BE_LONG),
912 F1("timezone_transitions_get", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
913 F1("timezone_location_get", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING),
914 F1("timezone_identifiers_list", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
915 F1("timezone_abbreviations_list", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ARRAY),
916 F1("timezone_version_get", MAY_BE_STRING),
917 F1("date_interval_create_from_date_string", MAY_BE_FALSE | MAY_BE_OBJECT),
918 F1("date_interval_format", MAY_BE_FALSE | MAY_BE_STRING),
919 F0("date_default_timezone_set", MAY_BE_FALSE | MAY_BE_TRUE),
920 F1("date_default_timezone_get", MAY_BE_STRING),
921 F1("date_sunrise", MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE | MAY_BE_STRING),
922 F1("date_sunset", MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE | MAY_BE_STRING),
923 F1("date_sun_info", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_LONG),
924
925 /* ext/preg */
926 F0("preg_match", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
927 F0("preg_match_all", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
928 FN("preg_replace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING),
929 FN("preg_replace_callback", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING),
930 F1("preg_filter", MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING),
931 F1("preg_split", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
932 FN("preg_quote", MAY_BE_NULL | MAY_BE_STRING),
933 F1("preg_grep", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
934 F0("preg_last_error", MAY_BE_NULL | MAY_BE_LONG),
935
936 /* ext/mysqli */
937 F1("mysqli_connect", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
938 F0("mysqli_close", MAY_BE_NULL | MAY_BE_TRUE),
939 I1("mysqli_connect_error", MAY_BE_NULL | MAY_BE_STRING),
940 I0("mysqli_connect_errno", MAY_BE_LONG),
941 F1("mysqli_get_client_stats", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
942 F1("mysqli_error_list", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ARRAY),
943 F1("mysqli_get_links_stats", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG),
944 F1("mysqli_query", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_OBJECT),
945 F0("mysqli_multi_query", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
946 F0("mysqli_set_charset", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
947 F1("mysqli_get_charset", MAY_BE_NULL | MAY_BE_OBJECT),
948 F0("mysqli_begin_transaction", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
949 F0("mysqli_savepoint", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
950 F0("mysqli_release_savepoint", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
951 F1("mysqli_fetch_array", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
952 F1("mysqli_fetch_assoc", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
953 F1("mysqli_fetch_all", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
954 F1("mysqli_fetch_object", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
955 F0("mysqli_free_result", MAY_BE_NULL),
956 F1("mysqli_affected_rows", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
957 F0("mysqli_autocommit", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
958 F0("mysqli_stmt_bind_param", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
959 F0("mysqli_stmt_bind_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
960 F0("mysqli_change_user", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
961 F1("mysqli_character_set_name", MAY_BE_NULL | MAY_BE_STRING),
962 F0("mysqli_commit", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
963 F0("mysqli_data_seek", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
964 F0("mysqli_debug", MAY_BE_NULL | MAY_BE_TRUE),
965 F0("mysqli_dump_debug_info", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
966 F0("mysqli_errno", MAY_BE_NULL | MAY_BE_LONG),
967 F1("mysqli_error", MAY_BE_NULL | MAY_BE_STRING),
968 F0("mysqli_stmt_execute", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
969 F0("mysqli_poll", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
970 F1("mysqli_reap_async_query", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_OBJECT),
971 F1("mysqli_stmt_get_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
972 F1("mysqli_get_warnings", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
973 F1("mysqli_stmt_error_list", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ARRAY),
974 F1("mysqli_stmt_get_warnings", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
975 F0("mysqli_stmt_fetch", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
976 F1("mysqli_fetch_field", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
977 F1("mysqli_fetch_fields", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_OBJECT),
978 F1("mysqli_fetch_field_direct", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
979 F1("mysqli_fetch_lengths", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
980 F1("mysqli_fetch_row", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
981 F0("mysqli_field_count", MAY_BE_NULL | MAY_BE_LONG),
982 F0("mysqli_field_seek", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
983 F0("mysqli_field_tell", MAY_BE_NULL | MAY_BE_LONG),
984 I1("mysqli_get_client_info", MAY_BE_STRING),
985 I0("mysqli_get_client_version", MAY_BE_LONG),
986 F1("mysqli_get_host_info", MAY_BE_NULL | MAY_BE_STRING),
987 F0("mysqli_get_proto_info", MAY_BE_NULL | MAY_BE_LONG),
988 F1("mysqli_get_server_info", MAY_BE_NULL | MAY_BE_STRING),
989 F0("mysqli_get_server_version", MAY_BE_NULL | MAY_BE_LONG),
990 F1("mysqli_info", MAY_BE_NULL | MAY_BE_STRING),
991 F1("mysqli_init", MAY_BE_FALSE | MAY_BE_OBJECT),
992 F1("mysqli_insert_id", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
993 F0("mysqli_kill", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
994 F0("mysqli_more_results", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
995 F0("mysqli_next_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
996 F0("mysqli_stmt_more_results", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
997 F0("mysqli_stmt_next_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
998 F0("mysqli_num_fields", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
999 F1("mysqli_num_rows", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
1000 F0("mysqli_options", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1001 F0("mysqli_ping", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1002 F1("mysqli_prepare", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
1003 F0("mysqli_real_connect", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1004 F0("mysqli_real_query", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1005 F1("mysqli_real_escape_string", MAY_BE_NULL | MAY_BE_STRING),
1006 F0("mysqli_rollback", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1007 F0("mysqli_stmt_send_long_data", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1008 F1("mysqli_stmt_affected_rows", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
1009 F0("mysqli_stmt_close", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1010 F0("mysqli_stmt_data_seek", MAY_BE_NULL | MAY_BE_FALSE),
1011 F0("mysqli_stmt_field_count", MAY_BE_NULL | MAY_BE_LONG),
1012 F0("mysqli_stmt_free_result", MAY_BE_NULL),
1013 F1("mysqli_stmt_insert_id", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
1014 F0("mysqli_stmt_param_count", MAY_BE_NULL | MAY_BE_LONG),
1015 F0("mysqli_stmt_reset", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1016 F1("mysqli_stmt_num_rows", MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
1017 F0("mysqli_select_db", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1018 F1("mysqli_sqlstate", MAY_BE_NULL | MAY_BE_STRING),
1019 F0("mysqli_ssl_set", MAY_BE_NULL | MAY_BE_TRUE),
1020 F1("mysqli_stat", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1021 F0("mysqli_refresh", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1022 F0("mysqli_stmt_attr_set", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1023 F0("mysqli_stmt_attr_get", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1024 F0("mysqli_stmt_errno", MAY_BE_NULL | MAY_BE_LONG),
1025 F1("mysqli_stmt_error", MAY_BE_NULL | MAY_BE_STRING),
1026 F1("mysqli_stmt_init", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
1027 F0("mysqli_stmt_prepare", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1028 F1("mysqli_stmt_result_metadata", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
1029 F0("mysqli_stmt_store_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1030 F1("mysqli_stmt_sqlstate", MAY_BE_NULL | MAY_BE_STRING),
1031 F1("mysqli_store_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
1032 F0("mysqli_thread_id", MAY_BE_NULL | MAY_BE_LONG),
1033 I0("mysqli_thread_safe", MAY_BE_FALSE | MAY_BE_TRUE),
1034 F1("mysqli_use_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
1035 F0("mysqli_warning_count", MAY_BE_NULL | MAY_BE_LONG),
1036
1037 /* ext/curl */
1038 F1("curl_init", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1039 F1("curl_copy_handle", MAY_BE_NULL | MAY_BE_RESOURCE),
1040 F1("curl_version", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
1041 F0("curl_setopt", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1042 F0("curl_setopt_array", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1043 FN("curl_exec", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
1044 F1("curl_getinfo", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_LONG | MAY_BE_DOUBLE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
1045 F1("curl_error", MAY_BE_NULL | MAY_BE_STRING),
1046 F0("curl_errno", MAY_BE_NULL | MAY_BE_LONG),
1047 F0("curl_close", MAY_BE_NULL),
1048 F1("curl_strerror", MAY_BE_NULL | MAY_BE_STRING),
1049 F1("curl_multi_strerror", MAY_BE_NULL | MAY_BE_STRING),
1050 F0("curl_reset", MAY_BE_NULL),
1051 F1("curl_escape", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1052 F1("curl_unescape", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1053 F0("curl_pause", MAY_BE_NULL | MAY_BE_LONG),
1054 F1("curl_multi_init", MAY_BE_RESOURCE),
1055 F0("curl_multi_add_handle", MAY_BE_NULL | MAY_BE_LONG),
1056 F0("curl_multi_remove_handle", MAY_BE_NULL | MAY_BE_LONG),
1057 F0("curl_multi_select", MAY_BE_NULL | MAY_BE_LONG),
1058 F0("curl_multi_exec", MAY_BE_NULL | MAY_BE_LONG),
1059 FN("curl_multi_getcontent", MAY_BE_NULL | MAY_BE_STRING),
1060 F1("curl_multi_info_read", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_RESOURCE),
1061 F0("curl_multi_close", MAY_BE_NULL | MAY_BE_FALSE),
1062 F0("curl_multi_setopt", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1063 I1("curl_share_init", MAY_BE_RESOURCE),
1064 F0("curl_share_close", MAY_BE_NULL),
1065 F0("curl_share_setopt", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1066 F1("curl_file_create", MAY_BE_OBJECT),
1067
1068 /* ext/mbstring */
1069 F1("mb_convert_case", MAY_BE_FALSE | MAY_BE_STRING),
1070 F1("mb_strtoupper", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1071 F1("mb_strtolower", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1072 F1("mb_language", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
1073 F1("mb_internal_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
1074 F1("mb_http_input", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1075 F1("mb_http_output", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
1076 F1("mb_detect_order", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1077 F1("mb_substitute_character", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG | MAY_BE_STRING),
1078 F0("mb_parse_str", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1079 F1("mb_output_handler", MAY_BE_NULL | MAY_BE_STRING),
1080 F1("mb_preferred_mime_name", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1081 F0("mb_strlen", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1082 F0("mb_strpos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1083 F0("mb_strrpos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1084 F0("mb_stripos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1085 F0("mb_strripos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1086 F1("mb_strstr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1087 F1("mb_strrchr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1088 F1("mb_stristr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1089 F1("mb_strrichr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1090 F0("mb_substr_count", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1091 F1("mb_substr", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1092 F1("mb_strcut", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1093 F0("mb_strwidth", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1094 F1("mb_strimwidth", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1095 F1("mb_convert_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
1096 F1("mb_detect_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1097 I1("mb_list_encodings", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1098 F1("mb_encoding_aliases", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1099 F1("mb_convert_kana", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1100 F1("mb_encode_mimeheader", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1101 F1("mb_decode_mimeheader", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1102 F1("mb_convert_variables", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1103 F1("mb_encode_numericentity", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1104 F1("mb_decode_numericentity", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1105 F0("mb_send_mail", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1106 F1("mb_get_info", MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
1107 F0("mb_check_encoding", MAY_BE_FALSE | MAY_BE_TRUE),
1108
1109 F1("mb_regex_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
1110 F1("mb_regex_set_options", MAY_BE_FALSE | MAY_BE_STRING),
1111 F0("mb_ereg", MAY_BE_FALSE | MAY_BE_LONG),
1112 F0("mb_eregi", MAY_BE_FALSE | MAY_BE_LONG),
1113 F1("mb_ereg_replace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1114 F1("mb_eregi_replace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1115 F1("mb_ereg_replace_callback", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1116 F1("mb_split", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1117 F0("mb_ereg_match", MAY_BE_FALSE | MAY_BE_TRUE),
1118 F0("mb_ereg_search", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1119 F1("mb_ereg_search_pos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
1120 F1("mb_ereg_search_regs", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_STRING),
1121 F0("mb_ereg_search_init", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1122 F1("mb_ereg_search_getregs", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_STRING),
1123 F0("mb_ereg_search_getpos", MAY_BE_LONG),
1124 F0("mb_ereg_search_setpos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1125
1126 F0("mbregex_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1127 F0("mbereg", MAY_BE_FALSE | MAY_BE_LONG),
1128 F0("mberegi", MAY_BE_FALSE | MAY_BE_LONG),
1129 F1("mbereg_replace", MAY_BE_FALSE | MAY_BE_STRING),
1130 F1("mberegi_replace", MAY_BE_FALSE | MAY_BE_STRING),
1131 F1("mbsplit", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1132 F0("mbereg_match", MAY_BE_FALSE | MAY_BE_TRUE),
1133 F0("mbereg_search", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1134 F1("mbereg_search_pos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
1135 F1("mbereg_search_regs", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_STRING),
1136 F0("mbereg_search_init", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1137 F1("mbereg_search_getregs", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE | MAY_BE_ARRAY_OF_STRING),
1138 F0("mbereg_search_getpos", MAY_BE_LONG),
1139 F0("mbereg_search_setpos", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1140
1141 /* ext/iconv */
1142 F1("iconv", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1143 F1("iconv_get_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
1144 F0("iconv_set_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1145 F0("iconv_strlen", MAY_BE_FALSE | MAY_BE_LONG),
1146 F1("iconv_substr", MAY_BE_FALSE | MAY_BE_STRING),
1147 F0("iconv_strpos", MAY_BE_FALSE | MAY_BE_LONG),
1148 F0("iconv_strrpos", MAY_BE_FALSE | MAY_BE_LONG),
1149 F1("iconv_mime_encode", MAY_BE_FALSE | MAY_BE_STRING),
1150 F1("iconv_mime_decode", MAY_BE_FALSE | MAY_BE_STRING),
1151 F1("iconv_mime_decode_headers", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
1152
1153 /* ext/json */
1154 F1("json_encode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1155 F1("json_decode", MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
1156 I0("json_last_error", MAY_BE_LONG),
1157 I1("json_last_error_msg", MAY_BE_STRING),
1158
1159 /* ext/xml */
1160 FN("xml_parser_create", MAY_BE_FALSE | MAY_BE_RESOURCE),
1161 FN("xml_parser_create_ns", MAY_BE_FALSE | MAY_BE_RESOURCE),
1162 F0("xml_set_object", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1163 F0("xml_set_element_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1164 F0("xml_set_character_data_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1165 F0("xml_set_processing_instruction_handler",MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1166 F0("xml_set_default_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1167 F0("xml_set_unparsed_entity_decl_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1168 F0("xml_set_notation_decl_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1169 F0("xml_set_external_entity_ref_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1170 F0("xml_set_start_namespace_decl_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1171 F0("xml_set_end_namespace_decl_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1172 F0("xml_parse", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1173 F0("xml_parse_into_struct", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1174 F0("xml_get_error_code", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1175 F1("xml_error_string", MAY_BE_NULL | MAY_BE_STRING),
1176 F0("xml_get_current_line_number", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1177 F0("xml_get_current_column_number", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1178 F0("xml_get_current_byte_index", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1179 F0("xml_parser_free", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1180 F0("xml_parser_set_option", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1181 F1("xml_parser_get_option", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
1182 F1("utf8_encode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1183 F1("utf8_decode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1184
1185 /* ext/zlib */
1186 F0("readgzfile", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1187 F0("gzrewind", MAY_BE_FALSE | MAY_BE_TRUE),
1188 F0("gzclose", MAY_BE_FALSE | MAY_BE_TRUE),
1189 F0("gzeof", MAY_BE_FALSE | MAY_BE_TRUE),
1190 F1("gzgetc", MAY_BE_FALSE | MAY_BE_STRING),
1191 F1("gzgets", MAY_BE_FALSE | MAY_BE_STRING),
1192 F1("gzgetss", MAY_BE_FALSE | MAY_BE_STRING),
1193 F1("gzread", MAY_BE_FALSE | MAY_BE_STRING),
1194 F1("gzopen", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1195 F0("gzpassthru", MAY_BE_FALSE | MAY_BE_LONG),
1196 F0("gzseek", MAY_BE_FALSE | MAY_BE_LONG),
1197 F0("gztell", MAY_BE_FALSE | MAY_BE_LONG),
1198 F0("gzwrite", MAY_BE_FALSE | MAY_BE_LONG),
1199 F0("gzputs", MAY_BE_FALSE | MAY_BE_LONG),
1200 F1("gzfile", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1201 F1("gzcompress", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1202 F1("gzuncompress", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1203 F1("gzdeflate", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1204 F1("gzinflate", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1205 F1("gzencode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1206 F1("gzdecode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1207 F1("zlib_encode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1208 F1("zlib_decode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1209 I1("zlib_get_coding_type", MAY_BE_FALSE | MAY_BE_STRING),
1210 F1("ob_gzhandler", MAY_BE_FALSE | MAY_BE_STRING),
1211
1212 /* ext/hash */
1213 F1("hash", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1214 F0("hash_equals", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1215 F1("hash_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1216 F1("hash_hmac", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1217 F1("hash_hmac_algos", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1218 F1("hash_hmac_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1219 F1("hash_hkdf", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1220 F1("hash_init", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
1221 F0("hash_update", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1222 F0("hash_update_stream", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1223 F0("hash_update_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1224 F1("hash_final", MAY_BE_NULL | MAY_BE_STRING),
1225 F1("hash_copy", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
1226 F1("hash_algos", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1227 F1("hash_pbkdf2", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1228 F1("mhash_keygen_s2k", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1229 F0("mhash_get_block_size", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1230 F1("mhash_get_hash_name", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1231 I0("mhash_count", MAY_BE_LONG),
1232 F1("mhash", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1233
1234 /* ext/sodium */
1235 F0("sodium_memzero", MAY_BE_NULL),
1236 F0("sodium_increment", MAY_BE_NULL),
1237 F0("sodium_add", MAY_BE_NULL),
1238 F0("sodium_memcmp", MAY_BE_NULL | MAY_BE_LONG),
1239 F1("sodium_crypto_shorthash", MAY_BE_NULL | MAY_BE_STRING),
1240 F1("sodium_crypto_secretbox", MAY_BE_NULL | MAY_BE_STRING),
1241 F1("sodium_crypto_secretbox_open", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1242 F1("sodium_crypto_generichash", MAY_BE_NULL | MAY_BE_STRING),
1243 F1("sodium_crypto_generichash_init", MAY_BE_NULL | MAY_BE_STRING),
1244 F0("sodium_crypto_generichash_update", MAY_BE_NULL | MAY_BE_TRUE),
1245 F1("sodium_crypto_generichash_final", MAY_BE_NULL | MAY_BE_STRING),
1246 F1("sodium_crypto_box_keypair", MAY_BE_STRING),
1247 F1("sodium_crypto_box_seed_keypair", MAY_BE_NULL | MAY_BE_STRING),
1248 F1("sodium_crypto_box_secretkey", MAY_BE_NULL | MAY_BE_STRING),
1249 F1("sodium_crypto_box_publickey", MAY_BE_NULL | MAY_BE_STRING),
1250 F1("sodium_crypto_box", MAY_BE_NULL | MAY_BE_STRING),
1251 F1("sodium_crypto_box_open", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1252 F1("sodium_crypto_box_seal", MAY_BE_NULL | MAY_BE_STRING),
1253 F1("sodium_crypto_box_seal_open", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1254 F1("sodium_crypto_sign_keypair", MAY_BE_STRING),
1255 F1("sodium_crypto_sign_seed_keypair", MAY_BE_NULL | MAY_BE_STRING),
1256 F1("sodium_crypto_sign_secretkey", MAY_BE_NULL | MAY_BE_STRING),
1257 F1("sodium_crypto_sign_publickey", MAY_BE_NULL | MAY_BE_STRING),
1258 F1("sodium_crypto_sign", MAY_BE_NULL | MAY_BE_STRING),
1259 F1("sodium_crypto_sign_open", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1260 F1("sodium_crypto_sign_detached", MAY_BE_NULL | MAY_BE_STRING),
1261 F0("sodium_crypto_sign_verify_detached", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1262 F1("sodium_crypto_stream", MAY_BE_NULL | MAY_BE_STRING),
1263 F1("sodium_crypto_stream_xor", MAY_BE_NULL | MAY_BE_STRING),
1264 F1("sodium_crypto_pwhash", MAY_BE_NULL | MAY_BE_STRING),
1265 F1("sodium_crypto_pwhash_str", MAY_BE_NULL | MAY_BE_STRING),
1266 F0("sodium_crypto_pwhash_str_verify", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1267 F1("sodium_crypto_aead_aes256gcm_encrypt", MAY_BE_NULL | MAY_BE_STRING),
1268 F1("sodium_crypto_aead_aes256gcm_decrypt", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1269 F1("sodium_bin2hex", MAY_BE_NULL | MAY_BE_STRING),
1270 F1("sodium_hex2bin", MAY_BE_NULL | MAY_BE_STRING),
1271 F1("sodium_crypto_scalarmult", MAY_BE_NULL | MAY_BE_STRING),
1272 F1("sodium_crypto_kx_seed_keypair", MAY_BE_NULL | MAY_BE_STRING),
1273 F1("sodium_crypto_kx_keypair", MAY_BE_STRING),
1274 F1("sodium_crypto_kx_secretkey", MAY_BE_NULL | MAY_BE_STRING),
1275 F1("sodium_crypto_kx_publickey", MAY_BE_NULL | MAY_BE_STRING),
1276 F1("sodium_crypto_kx_client_session_keys", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1277 F1("sodium_crypto_kx_server_session_keys", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1278 F1("sodium_crypto_auth", MAY_BE_NULL | MAY_BE_STRING),
1279 F0("sodium_crypto_auth_verify", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1280 F0("sodium_compare", MAY_BE_NULL | MAY_BE_LONG),
1281 F1("sodium_crypto_aead_aes256gcm_keygen", MAY_BE_STRING),
1282 F1("sodium_crypto_auth_keygen", MAY_BE_STRING),
1283 F1("sodium_crypto_generichash_keygen", MAY_BE_STRING),
1284 F1("sodium_crypto_kdf_keygen", MAY_BE_STRING),
1285 F1("sodium_crypto_secretbox_keygen", MAY_BE_STRING),
1286 F1("sodium_crypto_shorthash_keygen", MAY_BE_STRING),
1287 F1("sodium_crypto_stream_keygen", MAY_BE_STRING),
1288 F1("sodium_crypto_kdf_derive_from_key", MAY_BE_NULL | MAY_BE_STRING),
1289 F1("sodium_pad", MAY_BE_NULL | MAY_BE_STRING),
1290 F1("sodium_unpad", MAY_BE_NULL | MAY_BE_STRING),
1291
1292 F1("sodium_crypto_box_keypair_from_secretkey_and_publickey", MAY_BE_NULL | MAY_BE_STRING),
1293 F1("sodium_crypto_box_publickey_from_secretkey", MAY_BE_NULL | MAY_BE_STRING),
1294 F1("sodium_crypto_sign_keypair_from_secretkey_and_publickey", MAY_BE_NULL | MAY_BE_STRING),
1295 F1("sodium_crypto_sign_publickey_from_secretkey", MAY_BE_NULL | MAY_BE_STRING),
1296 F1("sodium_crypto_pwhash_scryptsalsa208sha256", MAY_BE_NULL | MAY_BE_STRING),
1297 F1("sodium_crypto_pwhash_scryptsalsa208sha256_str", MAY_BE_NULL | MAY_BE_STRING),
1298 F0("sodium_crypto_pwhash_scryptsalsa208sha256_str_verify", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1299 F0("sodium_crypto_aead_aes256gcm_is_available", MAY_BE_FALSE | MAY_BE_TRUE),
1300 F1("sodium_crypto_sign_ed25519_sk_to_curve25519", MAY_BE_NULL | MAY_BE_STRING),
1301 F1("sodium_crypto_sign_ed25519_pk_to_curve25519", MAY_BE_NULL | MAY_BE_STRING),
1302 F1("sodium_crypto_aead_chacha20poly1305_encrypt", MAY_BE_NULL | MAY_BE_STRING),
1303 F1("sodium_crypto_aead_chacha20poly1305_decrypt", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1304 F1("sodium_crypto_aead_chacha20poly1305_ietf_encrypt", MAY_BE_NULL | MAY_BE_STRING),
1305 F1("sodium_crypto_aead_chacha20poly1305_ietf_decrypt", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1306 F1("sodium_crypto_aead_xchacha20poly1305_ietf_encrypt", MAY_BE_NULL | MAY_BE_STRING),
1307 F1("sodium_crypto_aead_xchacha20poly1305_ietf_decrypt", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1308 F1("sodium_crypto_aead_chacha20poly1305_keygen", MAY_BE_STRING),
1309 F1("sodium_crypto_aead_chacha20poly1305_ietf_keygen", MAY_BE_STRING),
1310 F1("sodium_crypto_aead_xchacha20poly1305_ietf_keygen", MAY_BE_STRING),
1311
1312 /* ext/session */
1313 F0("session_set_cookie_params", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1314 I1("session_get_cookie_params", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
1315 F1("session_name", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1316 F1("session_module_name", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1317 F0("session_set_save_handler", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1318 F1("session_save_path", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1319 FN("session_id", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1320 F0("session_regenerate_id", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1321 F1("session_create_id", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1322 F1("session_cache_limiter", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1323 F0("session_cache_expire", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1324 I1("session_encode", MAY_BE_FALSE | MAY_BE_STRING),
1325 F0("session_decode", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1326 F0("session_start", MAY_BE_FALSE | MAY_BE_TRUE),
1327 I0("session_destroy", MAY_BE_FALSE | MAY_BE_TRUE),
1328 I0("session_unset", MAY_BE_FALSE | MAY_BE_TRUE),
1329 F0("session_gc", MAY_BE_FALSE | MAY_BE_LONG),
1330 F0("session_write_close", MAY_BE_FALSE | MAY_BE_TRUE),
1331 F0("session_abort", MAY_BE_FALSE | MAY_BE_TRUE),
1332 F0("session_reset", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1333 F0("session_status", MAY_BE_NULL | MAY_BE_LONG),
1334 I0("session_register_shutdown", MAY_BE_NULL),
1335
1336 /* ext/pgsql */
1337 F1("pg_connect", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1338 FN("pg_pconnect", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1339 F0("pg_connect_poll", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1340 F0("pg_close", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1341 F1("pg_dbname", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1342 F1("pg_last_error", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1343 F1("pg_options", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1344 F1("pg_port", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1345 F1("pg_tty", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1346 F1("pg_host", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1347 F1("pg_version", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
1348 F1("pg_parameter_status", MAY_BE_FALSE | MAY_BE_STRING),
1349 F0("pg_ping", MAY_BE_FALSE | MAY_BE_TRUE),
1350 F1("pg_query", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1351 F1("pg_query_params", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1352 F1("pg_prepare", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1353 F1("pg_execute", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1354 F0("pg_num_rows", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1355 F0("pg_num_fields", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1356 F0("pg_affected_rows", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1357 FN("pg_last_notice", UNKNOWN_INFO),
1358 F1("pg_field_table", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
1359 F1("pg_field_name", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1360 F0("pg_field_size", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1361 F1("pg_field_type", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1362 F1("pg_field_type_oid", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
1363 F0("pg_field_num", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1364 F1("pg_fetch_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1365 F1("pg_fetch_row", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_STRING),
1366 F1("pg_fetch_assoc", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_STRING),
1367 F1("pg_fetch_array", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_STRING),
1368 F1("pg_fetch_object", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
1369 F1("pg_fetch_all", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ARRAY),
1370 F1("pg_fetch_all_columns", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_NULL | MAY_BE_ARRAY_OF_STRING),
1371 F0("pg_result_seek", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1372 F0("pg_field_prtlen", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1373 F0("pg_field_is_null", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1374 F0("pg_free_result", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1375 F1("pg_last_oid", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
1376 F0("pg_trace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1377 F0("pg_untrace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1378 F1("pg_lo_create", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
1379 F0("pg_lo_unlink", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1380 F1("pg_lo_open", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1381 F1("pg_lo_read", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1382 F0("pg_lo_write", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1383 F0("pg_lo_read_all", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1384 F1("pg_lo_import", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
1385 F0("pg_lo_export", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1386 F0("pg_lo_seek", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1387 F0("pg_lo_tell", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1388 F0("pg_lo_truncate", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1389 F0("pg_set_error_verbosity", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1390 F0("pg_set_client_encoding", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1391 F0("pg_end_copy", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1392 F0("pg_put_line", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1393 F1("pg_copy_to", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1394 F0("pg_copy_from", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1395 F1("pg_escape_string", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1396 F1("pg_escape_bytea", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1397 F1("pg_unescape_bytea", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1398 F1("pg_escape_literal", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1399 F1("pg_escape_identifier", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1400 F1("pg_result_error", MAY_BE_FALSE | MAY_BE_STRING),
1401 F1("pg_result_error_field", MAY_BE_FALSE | MAY_BE_STRING),
1402 F0("pg_connection_status", MAY_BE_FALSE | MAY_BE_LONG),
1403 F0("pg_transaction_status", MAY_BE_FALSE | MAY_BE_LONG),
1404 F0("pg_connection_reset", MAY_BE_FALSE | MAY_BE_TRUE),
1405 F0("pg_cancel_query", MAY_BE_FALSE | MAY_BE_TRUE),
1406 F0("pg_connection_busy", MAY_BE_FALSE | MAY_BE_TRUE),
1407 F0("pg_send_query", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
1408 F0("pg_send_query_params", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
1409 F0("pg_send_prepare", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
1410 F0("pg_send_execute", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
1411 F1("pg_get_result", MAY_BE_FALSE | MAY_BE_RESOURCE),
1412 F1("pg_result_status", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
1413 F1("pg_get_notify", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
1414 F0("pg_get_pid", MAY_BE_FALSE | MAY_BE_LONG),
1415 F1("pg_socket", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1416 F0("pg_consume_input", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1417 F0("pg_flush", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
1418 F1("pg_meta_data", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ARRAY),
1419 F1("pg_convert", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
1420 F1("pg_insert", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_RESOURCE | MAY_BE_STRING),
1421 F1("pg_update", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
1422 F1("pg_delete", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
1423 F1("pg_select", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
1424
1425 /* ext/bcmath */
1426 F1("bcadd", MAY_BE_NULL | MAY_BE_STRING),
1427 F1("bcsub", MAY_BE_NULL | MAY_BE_STRING),
1428 F1("bcmul", MAY_BE_NULL | MAY_BE_STRING),
1429 F1("bcdiv", MAY_BE_NULL | MAY_BE_STRING),
1430 F1("bcmod", MAY_BE_NULL | MAY_BE_STRING),
1431 F1("bcpowmod", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1432 F1("bcpow", MAY_BE_NULL | MAY_BE_STRING),
1433 F1("bcsqrt", MAY_BE_NULL | MAY_BE_STRING),
1434 F0("bccomp", MAY_BE_NULL | MAY_BE_LONG),
1435 F0("bcscale", MAY_BE_NULL | MAY_BE_LONG),
1436
1437 /* ext/exif */
1438 F1("exif_tagname", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1439 F1("exif_read_data", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
1440 F1("exif_thumbnail", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1441 F0("exif_imagetype", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1442
1443 /* ext/filter */
1444 F0("filter_has_var", MAY_BE_FALSE | MAY_BE_TRUE),
1445 FN("filter_input", UNKNOWN_INFO),
1446 FN("filter_var", UNKNOWN_INFO),
1447 F1("filter_input_array", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
1448 F1("filter_var_array", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF),
1449 I1("filter_list", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1450 F0("filter_id", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1451
1452 /* ext/gettext */
1453 F1("textdomain", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1454 F1("gettext", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1455 F1("_", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1456 F1("dgettext", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1457 F1("dcgettext", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1458 F1("bindtextdomain", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1459 #if HAVE_NGETTEXT
1460 F1("ngettext", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1461 #endif
1462 #if HAVE_DNGETTEXT
1463 F1("dcngettext", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1464 #endif
1465 #if HAVE_BIND_TEXTDOMAIN_CODESET
1466 F1("bind_textdomain_codeset", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1467 #endif
1468
1469 /* ext/ctype */
1470 F0("ctype_alnum", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1471 F0("ctype_alpha", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1472 F0("ctype_cntrl", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1473 F0("ctype_digit", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1474 F0("ctype_lower", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1475 F0("ctype_graph", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1476 F0("ctype_print", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1477 F0("ctype_punct", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1478 F0("ctype_space", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1479 F0("ctype_upper", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1480 F0("ctype_xdigit", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1481
1482 /* ext/fileinfo */
1483 F1("finfo_open", MAY_BE_FALSE | MAY_BE_RESOURCE),
1484 F0("finfo_close", MAY_BE_FALSE | MAY_BE_TRUE),
1485 F0("finfo_set_flags", MAY_BE_FALSE | MAY_BE_TRUE),
1486 F1("finfo_file", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1487 F1("finfo_buffer", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1488 F1("mime_content_type", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1489
1490 /* ext/gd */
1491 F1("gd_info", MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_FALSE | MAY_BE_ARRAY_OF_TRUE),
1492 F0("imageloadfont", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1493 F0("imagesetstyle", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1494 F1("imagecreatetruecolor", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1495 F0("imageistruecolor", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1496 F0("imagetruecolortopalette", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1497 F0("imagepalettetotruecolor", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1498 F0("imagecolormatch", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1499 F0("imagesetthickness", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1500 F0("imagefilledellipse", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1501 F0("imagefilledarc", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1502 F0("imagealphablending", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1503 F0("imagesavealpha", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1504 F0("imagelayereffect", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1505 F0("imagecolorallocatealpha", MAY_BE_FALSE | MAY_BE_LONG),
1506 F0("imagecolorresolvealpha", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1507 F0("imagecolorclosestalpha", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1508 F0("imagecolorexactalpha", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1509 F0("imagecopyresampled", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1510 #ifdef PHP_WIN32
1511 F1("imagegrabwindow", MAY_BE_FALSE | MAY_BE_RESOURCE),
1512 F1("imagegrabscreen", MAY_BE_FALSE | MAY_BE_RESOURCE),
1513 #endif
1514 F1("imagerotate", MAY_BE_FALSE | MAY_BE_RESOURCE),
1515 F0("imagesettile", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1516 F0("imagesetbrush", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1517 F1("imagecreate", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1518 I0("imagetypes", MAY_BE_LONG),
1519 F1("imagecreatefromstring", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1520 F1("imagecreatefromgif", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1521 #ifdef HAVE_GD_JPG
1522 F1("imagecreatefromjpeg", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1523 F0("imagejpeg", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1524 F0("jpeg2wbmp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1525 #endif
1526 #ifdef HAVE_GD_PNG
1527 F1("imagecreatefrompng", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1528 F0("imagepng", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1529 F0("png2wbmp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1530 #endif
1531 #ifdef HAVE_GD_WEBP
1532 F1("imagecreatefromwebp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1533 F0("imagewebp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1534 #endif
1535 F1("imagecreatefromxbm", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1536 #if defined(HAVE_GD_XPM)
1537 F1("imagecreatefromxpm", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1538 #endif
1539 F1("imagecreatefromwbmp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1540 F1("imagecreatefromgd", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1541 F1("imagecreatefromgd2", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1542 F1("imagecreatefromgd2part", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1543 #if defined(HAVE_GD_BMP)
1544 F1("imagecreatefrombmp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1545 F0("imagebmp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1546 #endif
1547 F0("imagexbm", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1548 F0("imagegif", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1549 F0("imagewbmp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1550 F0("imagegd", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1551 F0("imagegd2", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1552 F0("imagedestroy", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1553 F0("imagecolorallocate", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1554 F0("imagepalettecopy", MAY_BE_NULL | MAY_BE_FALSE),
1555 F0("imagecolorat", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1556 F0("imagecolorclosest", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1557 F0("imagecolorclosesthwb", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1558 F0("imagecolordeallocate", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1559 F0("imagecolorresolve", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1560 F0("imagecolorexact", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1561 F0("imagecolorset", MAY_BE_NULL | MAY_BE_FALSE),
1562 F1("imagecolorsforindex", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG),
1563 F0("imagegammacorrect", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1564 F0("imagesetpixel", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1565 F0("imageline", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1566 F0("imagedashedline", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1567 F0("imagerectangle", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1568 F0("imagefilledrectangle", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1569 F0("imagearc", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1570 F0("imageellipse", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1571 F0("imagefilltoborder", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1572 F0("imagefill", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1573 F0("imagecolorstotal", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1574 F0("imagecolortransparent", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1575 F0("imageinterlace", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1576 F0("imagepolygon", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1577 F0("imageopenpolygon", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1578 F0("imagefilledpolygon", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1579 F0("imagefontwidth", MAY_BE_NULL | MAY_BE_LONG),
1580 F0("imagefontheight", MAY_BE_NULL | MAY_BE_LONG),
1581 F0("imagechar", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1582 F0("imagecharup", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1583 F0("imagestring", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1584 F0("imagestringup", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1585 F0("imagecopy", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1586 F0("imagecopymerge", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1587 F0("imagecopymergegray", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1588 F0("imagecopyresized", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1589 F0("imagesx", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1590 F0("imagesy", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1591 F0("imagesetclip", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1592 F1("imagegetclip", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
1593 F1("imageftbbox", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
1594 F1("imagefttext", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
1595 F1("imagettfbbox", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
1596 F1("imagettftext", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
1597 F0("image2wbmp", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1598 F0("imagefilter", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1599 F0("imageconvolution", MAY_BE_FALSE | MAY_BE_TRUE),
1600 F0("imageflip", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1601 F0("imageantialias", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1602 F1("imagecrop", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1603 F1("imagecropauto", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1604 F1("imagescale", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1605 F1("imageaffine", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1606 F1("imageaffinematrixget", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_DOUBLE),
1607 F1("imageaffinematrixconcat", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_DOUBLE),
1608 F0("imagesetinterpolation", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1609 F1("imageresolution", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
1610
1611 /* ext/spl */
1612 F1("class_implements", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
1613 F1("class_parents", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
1614 F1("class_uses", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
1615 F0("iterator_apply", MAY_BE_NULL | MAY_BE_LONG),
1616 F0("iterator_count", MAY_BE_FALSE | MAY_BE_LONG),
1617 F1("iterator_to_array", MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
1618 F1("spl_classes", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
1619 F1("spl_object_hash", MAY_BE_NULL | MAY_BE_STRING),
1620 F0("spl_object_id", MAY_BE_NULL | MAY_BE_LONG),
1621
1622 };
1623
1624 static HashTable func_info;
1625 int zend_func_info_rid = -1;
1626
zend_get_func_info(const zend_call_info * call_info,const zend_ssa * ssa)1627 uint32_t zend_get_func_info(const zend_call_info *call_info, const zend_ssa *ssa)
1628 {
1629 uint32_t ret = 0;
1630 const zend_function *callee_func = call_info->callee_func;
1631
1632 if (callee_func->type == ZEND_INTERNAL_FUNCTION) {
1633 zval *zv;
1634 func_info_t *info;
1635
1636 if (!call_info->callee_func->common.scope && (zv = zend_hash_find_ex(&func_info, Z_STR_P(CRT_CONSTANT_EX(call_info->caller_op_array, call_info->caller_init_opline, call_info->caller_init_opline->op2, ssa->rt_constants)), 1))) {
1637 info = Z_PTR_P(zv);
1638 if (UNEXPECTED(zend_optimizer_is_disabled_func(info->name, info->name_len))) {
1639 ret = MAY_BE_NULL;
1640 } else if (info->info_func) {
1641 ret = info->info_func(call_info, ssa);
1642 } else if (/*callee_func->common.arg_info && */
1643 callee_func->common.num_args == 0 &&
1644 callee_func->common.required_num_args == 0 &&
1645 !(callee_func->common.fn_flags & ZEND_ACC_VARIADIC)) {
1646 if (call_info->num_args == 0) {
1647 ret = info->info;
1648 } else {
1649 ret = FUNC_MAY_WARN | MAY_BE_NULL;
1650 }
1651 } else {
1652 ret = info->info;
1653 }
1654 #if 0
1655 } else {
1656 fprintf(stderr, "Unknown internal function '%s'\n", func->common.function_name);
1657 #endif
1658 }
1659 } else {
1660 // FIXME: the order of functions matters!!!
1661 zend_func_info *info = ZEND_FUNC_INFO((zend_op_array*)callee_func);
1662 if (info) {
1663 ret = info->return_info.type;
1664 }
1665 }
1666 if (!ret) {
1667 ret = MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
1668 if (callee_func->type == ZEND_INTERNAL_FUNCTION) {
1669 ret |= FUNC_MAY_WARN;
1670 }
1671 if (callee_func->common.fn_flags & ZEND_ACC_GENERATOR) {
1672 ret = MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_OBJECT;
1673 } else if (callee_func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) {
1674 ret |= MAY_BE_REF;
1675 } else {
1676 ret |= MAY_BE_RC1 | MAY_BE_RCN;
1677 }
1678 }
1679 return ret;
1680 }
1681
zend_func_info_startup(void)1682 int zend_func_info_startup(void)
1683 {
1684 zend_extension dummy;
1685 size_t i;
1686
1687 if (zend_func_info_rid == -1) {
1688 zend_func_info_rid = zend_get_resource_handle(&dummy);
1689 if (zend_func_info_rid < 0) {
1690 return FAILURE;
1691 }
1692
1693 zend_hash_init(&func_info, sizeof(func_infos)/sizeof(func_info_t), NULL, NULL, 1);
1694 for (i = 0; i < sizeof(func_infos)/sizeof(func_info_t); i++) {
1695 zend_string *key = zend_string_init_interned(func_infos[i].name, func_infos[i].name_len, 1);
1696
1697 if (zend_hash_add_ptr(&func_info, key, (void**)&func_infos[i]) == NULL) {
1698 fprintf(stderr, "ERROR: Duplicate function info for \"%s\"\n", func_infos[i].name);
1699 }
1700 zend_string_release_ex(key, 1);
1701 }
1702 }
1703
1704 return SUCCESS;
1705 }
1706
zend_func_info_shutdown(void)1707 int zend_func_info_shutdown(void)
1708 {
1709 if (zend_func_info_rid != -1) {
1710 zend_hash_destroy(&func_info);
1711 zend_func_info_rid = -1;
1712 }
1713 return SUCCESS;
1714 }
1715