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