source: src/router/php7/ext/opcache/Optimizer/zend_func_info.c @ 31874

Last change on this file since 31874 was 31874, checked in by brainslayer, 6 weeks ago

update php

File size: 86.3 KB
Line 
1/*
2   +----------------------------------------------------------------------+
3   | Zend Engine, Func Info                                               |
4   +----------------------------------------------------------------------+
5   | Copyright (c) 1998-2017 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@zend.com>                             |
16   +----------------------------------------------------------------------+
17*/
18
19/* $Id:$ */
20
21#include "php.h"
22#include "zend_compile.h"
23#include "zend_extensions.h"
24#include "zend_ssa.h"
25#include "zend_optimizer_internal.h"
26#include "zend_inference.h"
27#include "zend_call_graph.h"
28#include "zend_func_info.h"
29#include "zend_inference.h"
30
31typedef uint32_t (*info_func_t)(const zend_call_info *call_info, const zend_ssa *ssa);
32
33typedef struct _func_info_t {
34        const char *name;
35        int         name_len;
36        uint32_t    info;
37        info_func_t info_func;
38} func_info_t;
39
40#define F0(name, info) \
41        {name, sizeof(name)-1, (FUNC_MAY_WARN | (info)), NULL}
42#define F1(name, info) \
43        {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_RC1 | (info)), NULL}
44#define FN(name, info) \
45        {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_RCN | (info)), NULL}
46#define FR(name, info) \
47        {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_REF | (info)), NULL}
48#define FX(name, info) \
49        {name, sizeof(name)-1, (FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | (info)), NULL}
50#define I0(name, info) \
51        {name, sizeof(name)-1, (info), NULL}
52#define I1(name, info) \
53        {name, sizeof(name)-1, (MAY_BE_RC1 | (info)), NULL}
54#define IN(name, info) \
55        {name, sizeof(name)-1, (MAY_BE_RC1 | MAY_BE_RCN | (info)), NULL}
56#define FC(name, callback) \
57        {name, sizeof(name)-1, 0, callback}
58
59static uint32_t zend_strlen_info(const zend_call_info *call_info, const zend_ssa *ssa)
60{
61        if (call_info->caller_init_opline->extended_value == (uint32_t)call_info->num_args &&
62            call_info->num_args == 1) {
63
64                uint32_t tmp = 0;
65                if (call_info->arg_info[0].opline) {
66                        uint32_t arg_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
67
68                        if (arg_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) {
69                                tmp |= MAY_BE_LONG;
70                        }
71                        if (arg_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) {
72                                /* warning, and returns NULL */
73                                tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
74                        }
75                } else {
76                        tmp |= MAY_BE_LONG | FUNC_MAY_WARN | MAY_BE_NULL;
77                }
78                return tmp;
79        } else {
80                /* warning, and returns NULL */
81                return FUNC_MAY_WARN | MAY_BE_NULL;
82        }
83}
84
85static uint32_t zend_dechex_info(const zend_call_info *call_info, const zend_ssa *ssa)
86{
87        if (call_info->caller_init_opline->extended_value == (uint32_t)call_info->num_args &&
88            call_info->num_args == 1) {
89                return MAY_BE_RC1 | MAY_BE_STRING;
90        } else {
91                /* warning, and returns NULL */
92                return FUNC_MAY_WARN | MAY_BE_NULL;
93        }
94}
95
96static uint32_t zend_range_info(const zend_call_info *call_info, const zend_ssa *ssa)
97{
98        if (call_info->caller_init_opline->extended_value == (uint32_t)call_info->num_args &&
99            (call_info->num_args == 2 || call_info->num_args == 3)) {
100
101                uint32_t t1 = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
102                uint32_t t2 = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[1].opline);
103                uint32_t t3 = 0;
104                uint32_t tmp = FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG;
105
106                if (call_info->num_args == 3) {
107                        t3 = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[2].opline);
108                }
109                if ((t1 & MAY_BE_STRING) && (t2 & MAY_BE_STRING)) {
110                        tmp |= MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING;
111                }
112                if ((t1 & (MAY_BE_DOUBLE|MAY_BE_STRING))
113                                || (t2 & (MAY_BE_DOUBLE|MAY_BE_STRING))
114                                || (t3 & (MAY_BE_DOUBLE|MAY_BE_STRING))) {
115                        tmp |= MAY_BE_ARRAY_OF_DOUBLE;
116                }
117                if ((t1 & (MAY_BE_ANY-(MAY_BE_STRING|MAY_BE_DOUBLE))) && (t2 & (MAY_BE_ANY-(MAY_BE_STRING|MAY_BE_DOUBLE)))) {
118                        if ((t3 & MAY_BE_ANY) != MAY_BE_DOUBLE) {
119                                tmp |= MAY_BE_ARRAY_OF_LONG;
120                        }
121                }
122                return tmp;
123        } else {
124                /* may warning, and return FALSE */
125                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;
126        }
127}
128
129static uint32_t zend_is_type_info(const zend_call_info *call_info, const zend_ssa *ssa)
130{
131        if (call_info->caller_init_opline->extended_value == (uint32_t)call_info->num_args &&
132            call_info->num_args == 1) {
133                return MAY_BE_FALSE | MAY_BE_TRUE;
134        } else {
135                return MAY_BE_FALSE | MAY_BE_TRUE | FUNC_MAY_WARN;
136        }
137}
138
139static uint32_t zend_l_ss_info(const zend_call_info *call_info, const zend_ssa *ssa)
140{
141        if (call_info->caller_init_opline->extended_value == (uint32_t)call_info->num_args &&
142            call_info->num_args == 2) {
143
144                uint32_t arg1_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
145                uint32_t arg2_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[1].opline);
146                uint32_t tmp = 0;
147
148                if ((arg1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) &&
149                    (arg2_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT))) {
150                        tmp |= MAY_BE_LONG;
151                }
152                if ((arg1_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) ||
153                    (arg2_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
154                        /* warning, and returns NULL */
155                        tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
156                }
157                return tmp;
158        } else {
159                /* warning, and returns NULL */
160                return FUNC_MAY_WARN | MAY_BE_NULL | MAY_BE_LONG;
161        }
162}
163
164static uint32_t zend_lb_ssn_info(const zend_call_info *call_info, const zend_ssa *ssa)
165{
166        if (call_info->caller_init_opline->extended_value == (uint32_t)call_info->num_args &&
167            call_info->num_args == 3) {
168                uint32_t arg1_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
169                uint32_t arg2_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[1].opline);
170                uint32_t arg3_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[2].opline);
171                uint32_t tmp = 0;
172
173                if ((arg1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) &&
174                    (arg2_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) &&
175                    (arg3_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT))) {
176                        tmp |= MAY_BE_LONG | MAY_BE_FALSE;
177                }
178                if ((arg1_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) ||
179                    (arg2_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) ||
180                    (arg3_info & (MAY_BE_STRING|MAY_BE_RESOURCE|MAY_BE_ARRAY|MAY_BE_OBJECT))) {
181                        /* warning, and returns NULL */
182                        tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
183                }
184                return tmp;
185        } else {
186                /* warning, and returns NULL */
187                return FUNC_MAY_WARN | MAY_BE_NULL | MAY_BE_LONG;
188        }
189}
190
191static uint32_t zend_b_s_info(const zend_call_info *call_info, const zend_ssa *ssa)
192{
193        if (call_info->caller_init_opline->extended_value == (uint32_t)call_info->num_args &&
194            call_info->num_args == 1) {
195
196                uint32_t arg1_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
197                uint32_t tmp = 0;
198
199                if (arg1_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) {
200                        tmp |= MAY_BE_FALSE | MAY_BE_TRUE;
201                }
202                if (arg1_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) {
203                        /* warning, and returns NULL */
204                        tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
205                }
206                return tmp;
207        } else {
208                /* warning, and returns NULL */
209                return FUNC_MAY_WARN | MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE;
210        }
211}
212
213#define UNKNOWN_INFO (MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF)
214
215static const func_info_t func_infos[] = {
216        /* zend */
217        I1("zend_version",            MAY_BE_STRING),
218        I0("gc_collect_cycles",       MAY_BE_LONG),
219        I0("gc_enabled",              MAY_BE_FALSE | MAY_BE_TRUE),
220        F0("gc_enable",               MAY_BE_NULL),
221        F0("gc_disable",              MAY_BE_NULL),
222        F0("func_num_args",           MAY_BE_LONG),
223        FN("func_get_arg",            UNKNOWN_INFO),
224        F1("func_get_args",           MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF),
225        FC("strlen",                  zend_strlen_info),
226        FC("strcmp",                  zend_l_ss_info),
227        FC("strncmp",                 zend_lb_ssn_info),
228        FC("strcasecmp",              zend_l_ss_info),
229        FC("strncasecmp",             zend_lb_ssn_info),
230        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),
231        F0("error_reporting",         MAY_BE_NULL | MAY_BE_LONG),
232        F0("define",                  MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_NULL), // TODO: inline
233        FC("defined",                 zend_b_s_info), // TODO: inline
234        FN("get_class",               MAY_BE_FALSE | MAY_BE_STRING),
235        FN("get_called_class",        MAY_BE_FALSE | MAY_BE_STRING),
236        FN("get_parrent_class",       MAY_BE_FALSE | MAY_BE_STRING),
237        F0("is_subclass_of",          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE), // TODO: inline
238        F0("is_a",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE), // TODO: inline
239        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),
240        FN("get_object_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        F1("get_class_methods",       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
242        F0("method_exists",           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
243        F0("property_exists",         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
244        F0("class_exists",            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
245        F0("interface_exists",        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
246        F0("trait_exists",            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
247        FC("function_exists",         zend_b_s_info), // TODO: inline
248        F0("class_alias",             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
249        F1("get_included_files",      MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
250        F0("trigger_error",           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
251        F0("user_error",              MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
252        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),
253        I0("restore_error_handler",   MAY_BE_NULL | MAY_BE_TRUE),
254        F1("get_declared_traits",     MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
255        F1("get_declared_classes",    MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
256        F1("get_declared_interfaces", MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
257        F1("get_defined_functions",   MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ARRAY),
258        I1("get_defined_vars",        MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF),
259        FN("create_function",         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
260        F1("get_resource_type",       MAY_BE_NULL | MAY_BE_STRING),
261        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),
262        F0("debug_print_backtrace",   MAY_BE_NULL),
263        F1("debug_backtrace",         MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ARRAY),
264        F1("get_loaded_extensions",   MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
265        FC("extension_loaded",        zend_b_s_info),
266        F1("get_extension_funcs",     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
267
268        /* ext/statdard */
269        FN("constant",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG | MAY_BE_DOUBLE | MAY_BE_STRING | MAY_BE_RESOURCE),
270        F1("bin2hex",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
271        F1("hex2bin",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
272        F0("sleep",                        MAY_BE_FALSE | MAY_BE_LONG),
273        F0("usleep",                       MAY_BE_NULL | MAY_BE_FALSE),
274#if HAVE_NANOSLEEP
275        F0("time_nanosleep",               MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
276        F0("time_sleep_until",             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
277#endif
278#if HAVE_STRPTIME
279        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),
280#endif
281        F0("flush",                        MAY_BE_NULL),
282        F1("wordwrap",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
283        F1("htmlspecialchars",             MAY_BE_NULL | MAY_BE_STRING),
284        F1("htmlentities",                 MAY_BE_NULL | MAY_BE_STRING),
285        F1("html_entity_decode",           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
286        F1("htmlspecialchars_decode",      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
287        F1("get_html_translation_table",   MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
288        F1("sha1",                         MAY_BE_NULL | MAY_BE_STRING),
289        F1("sha1_file",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
290        F1("md5",                          MAY_BE_NULL | MAY_BE_STRING),
291        F1("md5_file",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
292        F0("crc32",                        MAY_BE_NULL | MAY_BE_LONG),
293        F1("iptcparse",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ARRAY),
294        F1("iptcembed",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
295        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),
296        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),
297        F1("image_type_to_mime_type",      MAY_BE_NULL | MAY_BE_STRING),
298        F1("image_type_to_extension",      MAY_BE_FALSE | MAY_BE_STRING),
299        F0("phpinfo",                      MAY_BE_NULL | MAY_BE_TRUE),
300        F1("phpversion",                   MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
301        F0("phpcredits",                   MAY_BE_NULL | MAY_BE_TRUE),
302        F1("php_sapi_name",                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
303        F1("php_uname",                    MAY_BE_NULL | MAY_BE_STRING),
304        F1("php_ini_scanned_files",        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
305        F1("php_ini_loaded_file",          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
306        F0("strnatcmp",                    MAY_BE_NULL | MAY_BE_LONG),
307        F0("strnatcasecmp",                MAY_BE_NULL | MAY_BE_LONG),
308        F0("substr_count",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
309        F0("strspn",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
310        F0("strcspn",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
311        F1("strtok",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
312        FN("strtoupper",                   MAY_BE_NULL | MAY_BE_STRING),
313        FN("strtolower",                   MAY_BE_NULL | MAY_BE_STRING),
314        F0("strpos",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
315        F0("stripos",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
316        F0("strrpos",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
317        F0("strripos",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
318        F1("strrev",                       MAY_BE_NULL | MAY_BE_STRING),
319        F1("hebrev",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
320        F1("hebrevc",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
321        F1("nl2br",                        MAY_BE_NULL | MAY_BE_STRING),
322        F1("basename",                     MAY_BE_NULL | MAY_BE_STRING),
323        F1("dirname",                      MAY_BE_NULL | MAY_BE_STRING),
324        F1("pathinfo",                     MAY_BE_NULL | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
325        F1("stripslashes",                 MAY_BE_NULL | MAY_BE_STRING),
326        F1("stripcslashes",                MAY_BE_NULL | MAY_BE_STRING),
327        F1("strstr",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
328        F1("stristr",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
329        F1("strrchr",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
330        F1("str_shuffle",                  MAY_BE_NULL | MAY_BE_STRING),
331        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),
332        F1("str_split",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
333        F1("strpbrk",                      MAY_BE_FALSE | MAY_BE_STRING),
334        F0("substr_compare",               MAY_BE_FALSE | MAY_BE_LONG),
335#ifdef HAVE_STRCOLL
336        F0("strcoll",                      MAY_BE_NULL | MAY_BE_LONG),
337#endif
338#ifdef HAVE_STRFMON
339        F1("money_format",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
340#endif
341        F1("substr",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
342        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),
343        F1("quotemeta",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
344        F1("ucfirst",                      MAY_BE_NULL | MAY_BE_STRING),
345        F1("lcfirst",                      MAY_BE_NULL | MAY_BE_STRING),
346        F1("ucwords",                      MAY_BE_NULL | MAY_BE_STRING),
347        FN("strtr",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
348        FN("addslashes",                   MAY_BE_NULL | MAY_BE_STRING),
349        F1("addcslashes",                  MAY_BE_NULL | MAY_BE_STRING),
350        FN("rtrim",                        MAY_BE_NULL | MAY_BE_STRING),
351        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),
352        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),
353        F1("str_repeat",                   MAY_BE_NULL | MAY_BE_STRING),
354        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),
355        F1("chunk_split",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
356        FN("trim",                         MAY_BE_NULL | MAY_BE_STRING),
357        FN("ltrim",                        MAY_BE_NULL | MAY_BE_STRING),
358        F1("strip_tags",                   MAY_BE_NULL | MAY_BE_STRING),
359        F0("similar_text",                 MAY_BE_NULL | MAY_BE_LONG),
360        F1("explode",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
361        FN("implode",                      MAY_BE_NULL | MAY_BE_STRING),
362        FN("join",                         MAY_BE_NULL | MAY_BE_STRING),
363        FN("setlocale",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
364        F1("localeconv",                   MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
365#if HAVE_NL_LANGINFO
366        F1("nl_langinfo",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
367#endif
368        F1("soundex",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
369        F0("levenshtein",                  MAY_BE_NULL | MAY_BE_LONG),
370        F1("chr",                          MAY_BE_NULL | MAY_BE_STRING),
371        F0("ord",                          MAY_BE_NULL | MAY_BE_LONG),
372        F0("parse_str",                    MAY_BE_NULL),
373        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),
374        F1("str_pad",                      MAY_BE_NULL | MAY_BE_STRING),
375        F1("chop",                         MAY_BE_NULL | MAY_BE_STRING),
376        F1("strchr",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
377        F1("sprintf",                      MAY_BE_FALSE | MAY_BE_STRING),
378        F0("printf",                       MAY_BE_FALSE | MAY_BE_LONG),
379        F0("vprintf",                      MAY_BE_FALSE | MAY_BE_LONG),
380        F1("vsprintf",                     MAY_BE_FALSE | MAY_BE_STRING),
381        F0("fprintf",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
382        F0("vfprintf",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
383        F1("sscanf",                       MAY_BE_NULL | MAY_BE_LONG | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
384        F1("fscanf",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
385        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),
386        F1("urlencode",                    MAY_BE_NULL | MAY_BE_STRING),
387        F1("urldecode",                    MAY_BE_NULL | MAY_BE_STRING),
388        F1("rawurlencode",                 MAY_BE_NULL | MAY_BE_STRING),
389        F1("rawurldecode",                 MAY_BE_NULL | MAY_BE_STRING),
390        F1("http_build_query",             MAY_BE_FALSE | MAY_BE_STRING),
391#if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
392        F1("readlink",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
393        F0("linkinfo",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
394        F0("symlink",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
395        F0("link",                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
396#endif
397        F0("unlink",                       MAY_BE_FALSE | MAY_BE_TRUE),
398        F1("exec",                         MAY_BE_FALSE | MAY_BE_STRING),
399        F1("system",                       MAY_BE_FALSE | MAY_BE_STRING),
400        F1("escapeshellcmd",               MAY_BE_NULL | MAY_BE_STRING),
401        F1("escapeshellarg",               MAY_BE_NULL | MAY_BE_STRING),
402        F1("passthru",                     MAY_BE_FALSE | MAY_BE_STRING),
403        F1("shell_exec",                   MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
404#ifdef PHP_CAN_SUPPORT_PROC_OPEN
405        F1("proc_open",                    MAY_BE_FALSE | MAY_BE_RESOURCE),
406        F0("proc_close",                   MAY_BE_FALSE | MAY_BE_LONG),
407        F0("proc_terminate",               MAY_BE_FALSE | MAY_BE_TRUE),
408        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),
409#endif
410#ifdef HAVE_NICE
411        F0("proc_nice",                    MAY_BE_FALSE | MAY_BE_TRUE),
412#endif
413        F0("rand",                         MAY_BE_NULL | MAY_BE_LONG),
414        F0("srand",                        MAY_BE_NULL),
415        F0("getrandmax",                   MAY_BE_NULL | MAY_BE_LONG),
416        F0("mt_rand",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
417        F0("mt_srand",                     MAY_BE_NULL),
418        F0("mt_getrandmax",                MAY_BE_NULL | MAY_BE_LONG),
419#if HAVE_GETSERVBYNAME
420        F0("getservbyname",                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
421#endif
422#if HAVE_GETSERVBYPORT
423        F1("getservbyport",                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
424#endif
425#if HAVE_GETPROTOBYNAME
426        F0("getprotobyname",               MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
427#endif
428#if HAVE_GETPROTOBYNUMBER
429        F1("getprotobynumber",             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
430#endif
431        F0("getmyuid",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
432        F0("getmygid",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
433        F0("getmypid",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
434        F0("getmyinode",                   MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
435        F0("getlastmod",                   MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
436        F1("base64_decode",                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
437        F1("base64_encode",                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
438        F1("password_hash",                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
439        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),
440        F0("password_needs_rehash",        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
441        F0("password_verify",              MAY_BE_FALSE | MAY_BE_TRUE),
442        F1("convert_uuencode",             MAY_BE_FALSE | MAY_BE_STRING),
443        F1("convert_uudecode",             MAY_BE_FALSE | MAY_BE_STRING),
444        F0("abs",                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE),
445        F0("ceil",                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
446        F0("floor",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
447        F0("round",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
448        F0("sin",                          MAY_BE_NULL | MAY_BE_DOUBLE),
449        F0("cos",                          MAY_BE_NULL | MAY_BE_DOUBLE),
450        F0("tan",                          MAY_BE_NULL | MAY_BE_DOUBLE),
451        F0("asin",                         MAY_BE_NULL | MAY_BE_DOUBLE),
452        F0("acos",                         MAY_BE_NULL | MAY_BE_DOUBLE),
453        F0("atan",                         MAY_BE_NULL | MAY_BE_DOUBLE),
454        F0("atanh",                        MAY_BE_NULL | MAY_BE_DOUBLE),
455        F0("atan2",                        MAY_BE_NULL | MAY_BE_DOUBLE),
456        F0("sinh",                         MAY_BE_NULL | MAY_BE_DOUBLE),
457        F0("cosh",                         MAY_BE_NULL | MAY_BE_DOUBLE),
458        F0("tanh",                         MAY_BE_NULL | MAY_BE_DOUBLE),
459        F0("asinh",                        MAY_BE_NULL | MAY_BE_DOUBLE),
460        F0("acosh",                        MAY_BE_NULL | MAY_BE_DOUBLE),
461        F0("expm1",                        MAY_BE_NULL | MAY_BE_DOUBLE),
462        F0("log1p",                        MAY_BE_NULL | MAY_BE_DOUBLE),
463        F0("pi",                           MAY_BE_DOUBLE),
464        F0("is_finite",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
465        F0("is_nan",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
466        F0("is_infinite",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
467        F0("pow",                          MAY_BE_NULL | MAY_BE_LONG | MAY_BE_DOUBLE),
468        F0("exp",                          MAY_BE_NULL | MAY_BE_DOUBLE),
469        F0("log",                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
470        F0("log10",                        MAY_BE_NULL | MAY_BE_DOUBLE),
471        F0("sqrt",                         MAY_BE_NULL | MAY_BE_DOUBLE),
472        F0("hypot",                        MAY_BE_NULL | MAY_BE_DOUBLE),
473        F0("deg2rad",                      MAY_BE_NULL | MAY_BE_DOUBLE),
474        F0("rad2deg",                      MAY_BE_NULL | MAY_BE_DOUBLE),
475        F0("bindec",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE),
476        F0("hexdec",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE),
477        F0("octdec",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE),
478        F1("decbin",                       MAY_BE_NULL | MAY_BE_STRING),
479        F1("decoct",                       MAY_BE_NULL | MAY_BE_STRING),
480        FC("dechex",                       zend_dechex_info),
481        F1("base_convert",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
482        F1("number_format",                MAY_BE_NULL | MAY_BE_STRING),
483        F0("fmod",                         MAY_BE_NULL | MAY_BE_DOUBLE),
484#ifdef HAVE_INET_NTOP
485        F1("inet_ntop",                    MAY_BE_FALSE | MAY_BE_STRING),
486#endif
487#ifdef HAVE_INET_PTON
488        F1("inet_pton",                    MAY_BE_FALSE | MAY_BE_STRING),
489#endif
490        F0("ip2long",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
491        F1("long2ip",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
492        F1("getenv",                       MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
493#ifdef HAVE_PUTENV
494        F0("putenv",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
495#endif
496        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),
497#ifdef HAVE_GETLOADAVG
498        F1("sys_getloadavg",               MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_DOUBLE),
499#endif
500#ifdef HAVE_GETTIMEOFDAY
501        F1("microtime",                    MAY_BE_NULL | MAY_BE_DOUBLE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG | MAY_BE_STRING),
502        F1("gettimeofday",                 MAY_BE_NULL | MAY_BE_DOUBLE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_STRING),
503#endif
504#ifdef HAVE_GETRUSAGE
505        F1("getrusage",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG),
506#endif
507#ifdef HAVE_GETTIMEOFDAY
508        F1("uniqid",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
509#endif
510        F1("quoted_printable_decode",      MAY_BE_NULL | MAY_BE_STRING),
511        F1("quoted_printable_encode",      MAY_BE_NULL | MAY_BE_STRING),
512        F1("convert_cyr_string",           MAY_BE_NULL | MAY_BE_STRING),
513        F1("get_current_user",             MAY_BE_NULL | MAY_BE_STRING),
514        F0("set_time_limit",               MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
515        F0("header_register_callback",     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
516        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),
517        F0("magic_quotes_runtime",         MAY_BE_NULL | MAY_BE_FALSE),
518        F0("set_magic_quotes_runtime",     MAY_BE_NULL | MAY_BE_FALSE),
519        F0("get_magic_quotes_gpc",         MAY_BE_NULL | MAY_BE_FALSE),
520        F0("get_magic_quotes_runtime",     MAY_BE_NULL | MAY_BE_FALSE),
521        F0("error_log",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
522        F1("error_get_last",               MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
523        FN("call_user_func",               UNKNOWN_INFO),
524        FN("call_user_func_array",         UNKNOWN_INFO),
525        FN("call_user_method",             UNKNOWN_INFO),
526        FN("call_user_method_array",       UNKNOWN_INFO),
527        FN("forward_static_call",          UNKNOWN_INFO),
528        FN("forward_static_call_array",    UNKNOWN_INFO),
529        F1("serialize",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
530        FN("unserialize",                  UNKNOWN_INFO),
531        F0("var_dump",                     MAY_BE_NULL),
532        F1("var_export",                   MAY_BE_NULL | MAY_BE_STRING),
533        F0("debug_zval_dump",              MAY_BE_NULL),
534        F1("print_r",                      MAY_BE_FALSE | MAY_BE_STRING),
535        F0("memory_get_usage",             MAY_BE_FALSE | MAY_BE_LONG),
536        F0("memory_get_peak_usage",        MAY_BE_FALSE | MAY_BE_LONG),
537        F0("register_shutdown_function",   MAY_BE_NULL | MAY_BE_FALSE),
538        F0("register_tick_function",       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
539        F0("unregister_tick_function",     MAY_BE_NULL),
540        F1("highlight_file",               MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
541        F1("show_source",                  MAY_BE_FALSE | MAY_BE_STRING),
542        F1("highlight_string",             MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
543        F1("php_strip_whitespace",         MAY_BE_FALSE | MAY_BE_STRING),
544        F1("ini_get",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
545        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),
546        F1("ini_set",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
547        F1("ini_alter",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
548        F0("ini_restore",                  MAY_BE_NULL),
549        F1("get_include_path",             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
550        F1("set_include_path",             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
551        F0("restore_include_path",         MAY_BE_NULL),
552        F0("setcookie",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
553        F0("setrawcookie",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
554        F0("header",                       MAY_BE_NULL),
555        F0("header_remove",                MAY_BE_NULL),
556        F0("headers_sent",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
557        F1("headers_list",                 MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
558        F0("http_response_code",           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
559        F0("connection_aborted",           MAY_BE_LONG),
560        F0("connection_status",            MAY_BE_LONG),
561        F0("ignore_user_abort",            MAY_BE_NULL | MAY_BE_LONG),
562        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),
563        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),
564#if ZEND_DEBUG
565        F1("config_get_hash",              MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
566#endif
567        F0("is_uploaded_file",             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
568        F0("move_uploaded_file",           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
569        F1("gethostbyaddr",                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
570        F1("gethostbyname",                MAY_BE_NULL | MAY_BE_STRING),
571        F1("gethostbynamel",               MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
572#ifdef HAVE_GETHOSTNAME
573        F1("gethostname",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
574#endif
575#if defined(PHP_WIN32) || (HAVE_DNS_SEARCH_FUNC && !(defined(__BEOS__) || defined(NETWARE)))
576        F0("dns_check_record",             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
577        F0("checkdnsrr",                   MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
578# if defined(PHP_WIN32) || HAVE_FULL_DNS_FUNCS
579        F0("dns_get_mx",                   MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
580        F0("getmxrr",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
581        F1("dns_get_record",               MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ARRAY),
582# endif
583#endif
584        F0("intval",                       MAY_BE_NULL | MAY_BE_LONG),
585        F0("floatval",                     MAY_BE_NULL | MAY_BE_DOUBLE),
586        F0("doubleval",                    MAY_BE_NULL | MAY_BE_DOUBLE),
587        FN("strval",                       MAY_BE_NULL | MAY_BE_STRING),
588        F0("boolval",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
589        F1("gettype",                      MAY_BE_NULL | MAY_BE_STRING),
590        F0("settype",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
591        FC("is_null",                      zend_is_type_info),
592        F0("is_resource",                  MAY_BE_FALSE | MAY_BE_TRUE), // TODO: inline with support for closed resources
593        FC("is_bool",                      zend_is_type_info),
594        FC("is_long",                      zend_is_type_info),
595        FC("is_float",                     zend_is_type_info),
596        FC("is_int",                       zend_is_type_info),
597        FC("is_integer",                   zend_is_type_info),
598        FC("is_double",                    zend_is_type_info),
599        FC("is_real",                      zend_is_type_info),
600        F0("is_numeric",                   MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
601        FC("is_string",                    zend_is_type_info),
602        FC("is_array",                     zend_is_type_info),
603        F0("is_object",                    MAY_BE_FALSE | MAY_BE_TRUE), // TODO: inline with support for incomplete class
604        F0("is_scalar",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
605        F0("is_callable",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
606        F0("pclose",                       MAY_BE_FALSE | MAY_BE_LONG),
607        F1("popen",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
608        F0("readfile",                     MAY_BE_FALSE | MAY_BE_LONG),
609        F0("rewind",                       MAY_BE_FALSE | MAY_BE_TRUE),
610        F0("rmdir",                        MAY_BE_FALSE | MAY_BE_TRUE),
611        F0("umask",                        MAY_BE_FALSE | MAY_BE_LONG),
612        F0("fclose",                       MAY_BE_FALSE | MAY_BE_TRUE),
613        F0("feof",                         MAY_BE_FALSE | MAY_BE_TRUE),
614        F1("fgetc",                        MAY_BE_FALSE | MAY_BE_STRING),
615        F1("fgets",                        MAY_BE_FALSE | MAY_BE_STRING),
616        F1("fgetss",                       MAY_BE_FALSE | MAY_BE_STRING),
617        F1("fread",                        MAY_BE_FALSE | MAY_BE_STRING),
618        F1("fopen",                        MAY_BE_FALSE | MAY_BE_RESOURCE),
619        F0("fpassthru",                    MAY_BE_FALSE | MAY_BE_LONG),
620        F0("ftruncate",                    MAY_BE_FALSE | MAY_BE_TRUE),
621        F1("fstat",                        MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG),
622        F0("fseek",                        MAY_BE_FALSE | MAY_BE_LONG),
623        F0("ftell",                        MAY_BE_FALSE | MAY_BE_LONG),
624        F0("fflush",                       MAY_BE_FALSE | MAY_BE_TRUE),
625        F0("fwrite",                       MAY_BE_FALSE | MAY_BE_LONG),
626        F0("fputs",                        MAY_BE_FALSE | MAY_BE_LONG),
627        F0("mkdir",                        MAY_BE_FALSE | MAY_BE_TRUE),
628        F0("rename",                       MAY_BE_FALSE | MAY_BE_TRUE),
629        F0("copy",                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
630        F1("tempnam",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
631        F1("tmpfile",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
632        F1("file",                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
633        F1("file_get_contents",            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
634        F0("file_put_contents",            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
635        F0("stream_select",                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
636        F1("stream_context_create",        MAY_BE_FALSE | MAY_BE_RESOURCE),
637        F0("stream_context_set_params",    MAY_BE_FALSE | MAY_BE_TRUE),
638        F1("stream_context_get_params",    MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
639        F0("stream_context_set_option",    MAY_BE_FALSE | MAY_BE_TRUE),
640        FN("stream_context_get_options",   MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
641        FN("stream_context_get_default",   MAY_BE_FALSE | MAY_BE_RESOURCE),
642        FN("stream_context_set_default",   MAY_BE_FALSE | MAY_BE_RESOURCE),
643        FN("stream_filter_prepend",        MAY_BE_FALSE | MAY_BE_RESOURCE),
644        FN("stream_filter_append",         MAY_BE_FALSE | MAY_BE_RESOURCE),
645        F0("stream_filter_remove",         MAY_BE_FALSE | MAY_BE_TRUE),
646        F1("stream_socket_client",         MAY_BE_FALSE | MAY_BE_RESOURCE),
647        F1("stream_socket_server",         MAY_BE_FALSE | MAY_BE_RESOURCE),
648        F1("stream_socket_accept",         MAY_BE_FALSE | MAY_BE_RESOURCE),
649        F1("stream_socket_get_name",       MAY_BE_FALSE | MAY_BE_STRING),
650        F1("stream_socket_recvfrom",       MAY_BE_FALSE | MAY_BE_STRING),
651        F0("stream_socket_sendto",         MAY_BE_FALSE | MAY_BE_LONG),
652        F0("stream_socket_enable_crypto",  MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
653#ifdef HAVE_SHUTDOWN
654        F0("stream_socket_shutdown",       MAY_BE_FALSE | MAY_BE_TRUE),
655#endif
656#if HAVE_SOCKETPAIR
657        F1("stream_socket_pair",           MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_RESOURCE),
658#endif
659        F0("stream_copy_to_stream",        MAY_BE_FALSE | MAY_BE_LONG),
660        F1("stream_get_contents",          MAY_BE_FALSE | MAY_BE_STRING),
661        F0("stream_supports_lock",         MAY_BE_FALSE | MAY_BE_TRUE),
662        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),
663        F0("fputcsv",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
664        F0("flock",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
665        F1("get_meta_tags",                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_STRING),
666        F0("stream_set_read_buffer",       MAY_BE_FALSE | MAY_BE_LONG),
667        F0("stream_set_write_buffer",      MAY_BE_FALSE | MAY_BE_LONG),
668        F0("set_file_buffer",              MAY_BE_FALSE | MAY_BE_LONG),
669        F0("stream_set_chunk_size",        MAY_BE_FALSE | MAY_BE_LONG),
670        F0("set_socket_blocking",          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
671        F0("stream_set_blocking",          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
672        F0("socket_set_blocking",          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
673        F1("stream_get_meta_data",         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
674        F1("stream_get_line",              MAY_BE_FALSE | MAY_BE_STRING),
675        F0("stream_wrapper_register",      MAY_BE_FALSE | MAY_BE_TRUE),
676        F0("stream_register_wrapper",      MAY_BE_FALSE | MAY_BE_TRUE),
677        F0("stream_wrapper_unregister",    MAY_BE_FALSE | MAY_BE_TRUE),
678        F0("stream_wrapper_restore",       MAY_BE_FALSE | MAY_BE_TRUE),
679        F1("stream_get_wrappers",          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
680        F1("stream_get_transports",        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
681        F1("stream_resolve_include_path",  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
682        F0("stream_is_local",              MAY_BE_FALSE | MAY_BE_TRUE),
683        F1("get_headers",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING | MAY_BE_ARRAY_OF_ARRAY),
684#if HAVE_SYS_TIME_H || defined(PHP_WIN32)
685        F0("stream_set_timeout",           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
686        F0("socket_set_timeout",           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
687#endif
688        F1("socket_get_status",            MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
689#if (!defined(__BEOS__) && !defined(NETWARE) && HAVE_REALPATH) || defined(ZTS)
690        F1("realpath",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
691#endif
692#ifdef HAVE_FNMATCH
693        F0("fnmatch",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
694#endif
695        F1("fsockopen",                    MAY_BE_FALSE | MAY_BE_RESOURCE),
696        F1("pfsockopen",                   MAY_BE_FALSE | MAY_BE_RESOURCE),
697        F1("pack",                         MAY_BE_FALSE | MAY_BE_STRING),
698        F1("unpack",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
699        F1("get_browser",                  MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_OBJECT | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
700        F1("crypt",                        MAY_BE_NULL | MAY_BE_STRING),
701        FN("opendir",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
702        F0("closedir",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
703        F0("chdir",                        MAY_BE_FALSE | MAY_BE_TRUE),
704#if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
705        F0("chroot",                       MAY_BE_FALSE | MAY_BE_TRUE),
706#endif
707        F1("getcwd",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
708        F0("rewinddir",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
709        F1("readdir",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
710        F1("dir",                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
711        F1("scandir",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
712#ifdef HAVE_GLOB
713        F1("glob",                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
714#endif
715        F0("fileatime",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
716        F0("filectime",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
717        F0("filegroup",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
718        F0("fileinode",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
719        F0("filemtime",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
720        F0("fileowner",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
721        F0("fileperms",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
722        F0("filesize",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
723        F1("filetype",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
724        F0("file_exists",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
725        F0("is_writable",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
726        F0("is_writeable",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
727        F0("is_readable",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
728        F0("is_executable",                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
729        F0("is_file",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
730        F0("is_dir",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
731        F0("is_link",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
732        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),
733        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),
734#ifndef NETWARE
735        F0("chown",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
736        F0("chgrp",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
737#endif
738#if HAVE_LCHOWN
739        F0("lchown",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
740#endif
741#if HAVE_LCHOWN
742        F0("lchgrp",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
743#endif
744        F0("chmod",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
745#if HAVE_UTIME
746        F0("touch",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
747#endif
748        F0("clearstatcache",               MAY_BE_NULL),
749        F0("disk_total_space",             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
750        F0("disk_free_space",              MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
751        F0("diskfreespace",                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_DOUBLE),
752        F0("realpath_cache_size",          MAY_BE_NULL | MAY_BE_LONG),
753        F1("realpath_cache_get",           MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ARRAY),
754        F0("mail",                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
755        F0("ezmlm_hash",                   MAY_BE_NULL | MAY_BE_LONG),
756#ifdef HAVE_SYSLOG_H
757        F0("openlog",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
758        F0("syslog",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
759        F0("closelog",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
760#endif
761        F0("lcg_value",                    MAY_BE_DOUBLE),
762        F1("metaphone",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
763        F0("ob_start",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
764        F0("ob_flush",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
765        F0("ob_clean",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
766        F0("ob_end_flush",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
767        F0("ob_end_clean",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
768        F1("ob_get_flush",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
769        F1("ob_get_clean",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
770        F0("ob_get_length",                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
771        F0("ob_get_level",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
772        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),
773        FN("ob_get_contents",              MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
774        F0("ob_implicit_flush",            MAY_BE_NULL),
775        F1("ob_list_handlers",             MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
776        F0("ksort",                        MAY_BE_FALSE | MAY_BE_TRUE),
777        F0("krsort",                       MAY_BE_FALSE | MAY_BE_TRUE),
778        F0("natsort",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
779        F0("natcasesort",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
780        F0("asort",                        MAY_BE_FALSE | MAY_BE_TRUE),
781        F0("arsort",                       MAY_BE_FALSE | MAY_BE_TRUE),
782        F0("sort",                         MAY_BE_FALSE | MAY_BE_TRUE),
783        F0("rsort",                        MAY_BE_FALSE | MAY_BE_TRUE),
784        F0("usort",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
785        F0("uasort",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
786        F0("uksort",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
787        F0("shuffle",                      MAY_BE_FALSE | MAY_BE_TRUE),
788        F0("array_walk",                   MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
789        F0("array_walk_recursive",         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
790        F0("count",                        MAY_BE_NULL | MAY_BE_LONG),
791        FN("end",                          UNKNOWN_INFO),
792        FN("prev",                         UNKNOWN_INFO),
793        FN("next",                         UNKNOWN_INFO),
794        FN("reset",                        UNKNOWN_INFO),
795        FN("current",                      UNKNOWN_INFO),
796        FN("key",                          MAY_BE_NULL | MAY_BE_LONG | MAY_BE_STRING),
797        FN("min",                          UNKNOWN_INFO),
798        FN("max",                          UNKNOWN_INFO),
799        F0("in_array",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
800        FN("array_search",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
801        F0("extract",                      MAY_BE_NULL | MAY_BE_LONG),
802        F1("compact",                      MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
803        F1("array_fill",                   MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
804        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),
805        FC("range",                        zend_range_info),
806        F0("array_multisort",              MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
807        F0("array_push",                   MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
808        FN("array_pop",                    UNKNOWN_INFO),
809        FN("array_shift",                  UNKNOWN_INFO),
810        F0("array_unshift",                MAY_BE_NULL | MAY_BE_LONG),
811        F1("array_splice",                 MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
812        F1("array_slice",                  MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
813        F1("array_merge",                  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_recursive",        MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
815        F1("array_replace",                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_recursive",      MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
817        F1("array_keys",                   MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
818        F1("array_values",                 MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
819        F1("array_count_values",           MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG),
820        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),
821        F1("array_reverse",                MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
822        F1("array_reduce",                 UNKNOWN_INFO),
823        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),
824        F1("array_flip",                   MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
825        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),
826        F1("array_rand",                   UNKNOWN_INFO),
827        FN("array_unique",                 MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
828        F1("array_intersect",              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_key",          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_ukey",         MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
831        F1("array_uintersect",             MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
832        F1("array_intersect_assoc",        MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
833        F1("array_uintersect_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_intersect_uassoc",       MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
835        F1("array_uintersect_uassoc",      MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
836        FN("array_diff",                   MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
837        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),
838        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),
839        F1("array_udiff",                  MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
840        F1("array_diff_assoc",             MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
841        F1("array_udiff_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_diff_uassoc",            MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
843        F1("array_udiff_uassoc",           MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
844        F0("array_sum",                    MAY_BE_NULL | MAY_BE_LONG | MAY_BE_DOUBLE),
845        F0("array_product",                MAY_BE_NULL | MAY_BE_LONG | MAY_BE_DOUBLE),
846        F1("array_filter",                 MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
847        FN("array_map",                    MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
848        F1("array_chunk",                  MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_ARRAY_OF_ANY),
849        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),
850        F0("array_key_exists",             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
851        F1("pos",                          UNKNOWN_INFO),
852        F0("sizeof",                       MAY_BE_NULL | MAY_BE_LONG),
853        F0("key_exists",                   MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
854        F0("assert",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
855        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),
856        F0("version_compare",              MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG),
857#if HAVE_FTOK
858        F0("ftok",                         MAY_BE_NULL | MAY_BE_LONG),
859#endif
860        F1("str_rot13",                    MAY_BE_NULL | MAY_BE_STRING),
861        F1("stream_get_filters",           MAY_BE_NULL | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
862        F0("stream_filter_register",       MAY_BE_FALSE | MAY_BE_TRUE),
863        F1("stream_bucket_make_writeable", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
864        F1("stream_bucket_prepend",        MAY_BE_FALSE | MAY_BE_OBJECT),
865        F1("stream_bucket_append",         MAY_BE_FALSE | MAY_BE_OBJECT),
866        F1("stream_bucket_new",            MAY_BE_FALSE | MAY_BE_OBJECT),
867        F0("output_add_rewrite_var",       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
868        F0("output_reset_rewrite_vars",    MAY_BE_FALSE),
869        F1("sys_get_temp_dir",             MAY_BE_NULL | MAY_BE_STRING),
870
871        /* ext/date */
872        F0("strtotime",                             MAY_BE_FALSE | MAY_BE_LONG),
873        F1("date",                                  MAY_BE_FALSE | MAY_BE_STRING),
874        F0("idate",                                 MAY_BE_FALSE | MAY_BE_LONG),
875        F1("gmdate",                                MAY_BE_FALSE | MAY_BE_STRING),
876        F0("mktime",                                MAY_BE_FALSE | MAY_BE_LONG),
877        F0("gmmktime",                              MAY_BE_FALSE | MAY_BE_LONG),
878        F0("checkdate",                             MAY_BE_FALSE | MAY_BE_TRUE),
879#ifdef HAVE_STRFTIME
880        F1("strftime",                              MAY_BE_FALSE | MAY_BE_STRING),
881        F1("gmstrftime",                            MAY_BE_FALSE | MAY_BE_STRING),
882#endif
883        F0("time",                                  MAY_BE_LONG),
884        F1("localtime",                             MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_LONG),
885        F1("getdate",                               MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_STRING),
886        F1("date_create",                           MAY_BE_FALSE | MAY_BE_OBJECT),
887        F1("date_create_immutable",                 MAY_BE_FALSE | MAY_BE_OBJECT),
888        F1("date_create_from_format",               MAY_BE_FALSE | MAY_BE_OBJECT),
889        F1("date_create_immutable_from_format",     MAY_BE_FALSE | MAY_BE_OBJECT),
890        F1("date_parse",                            MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
891        F1("date_parse_from_format",                MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
892        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),
893        F1("date_format",                           MAY_BE_FALSE | MAY_BE_STRING),
894        FN("date_modify",                           MAY_BE_FALSE | MAY_BE_OBJECT),
895        FN("date_add",                              MAY_BE_FALSE | MAY_BE_OBJECT),
896        FN("date_sub",                              MAY_BE_FALSE | MAY_BE_OBJECT),
897        F1("date_timezone_get",                     MAY_BE_FALSE | MAY_BE_OBJECT),
898        FN("date_timezone_set",                     MAY_BE_FALSE | MAY_BE_OBJECT),
899        F0("date_offset_get",                       MAY_BE_FALSE | MAY_BE_LONG),
900        F1("date_diff",                             MAY_BE_FALSE | MAY_BE_OBJECT),
901        FN("date_time_set",                         MAY_BE_FALSE | MAY_BE_OBJECT),
902        FN("date_date_set",                         MAY_BE_FALSE | MAY_BE_OBJECT),
903        FN("date_isodate_set",                      MAY_BE_FALSE | MAY_BE_OBJECT),
904        FN("date_timestamp_set",                    MAY_BE_FALSE | MAY_BE_OBJECT),
905        F0("date_timestamp_get",                    MAY_BE_FALSE | MAY_BE_LONG),
906        F1("timezone_open",                         MAY_BE_FALSE | MAY_BE_OBJECT),
907        F1("timezone_name_get",                     MAY_BE_FALSE | MAY_BE_STRING),
908        F1("timezone_name_from_abbr",               MAY_BE_FALSE | MAY_BE_STRING),
909        F0("timezone_offset_get",                   MAY_BE_FALSE | MAY_BE_LONG),
910        F1("timezone_transitions_get",              MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
911        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),
912        F1("timezone_identifiers_list",             MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
913        F1("timezone_abbreviations_list",           MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ARRAY),
914        F1("timezone_version_get",                  MAY_BE_STRING),
915        F1("date_interval_create_from_date_string", MAY_BE_FALSE | MAY_BE_OBJECT),
916        F1("date_interval_format",                  MAY_BE_FALSE | MAY_BE_STRING),
917        F0("date_default_timezone_set",             MAY_BE_FALSE | MAY_BE_TRUE),
918        F1("date_default_timezone_get",             MAY_BE_STRING),
919        F1("date_sunrise",                          MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE | MAY_BE_STRING),
920        F1("date_sunset",                           MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_DOUBLE | MAY_BE_STRING),
921        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),
922
923        /* ext/preg */
924        F0("preg_match",                                            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
925        F0("preg_match_all",                                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
926        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),
927        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),
928        F1("preg_filter",                                           MAY_BE_FALSE | MAY_BE_STRING | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_STRING),
929        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),
930        F1("preg_quote",                                            MAY_BE_NULL | MAY_BE_STRING),
931        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),
932        F0("preg_last_error",                               MAY_BE_NULL | MAY_BE_LONG),
933
934        /* ext/ereg */
935        F0("ereg",                                              MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
936        F1("ereg_replace",                              MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
937        F0("eregi",                                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
938        F1("eregi_replace",                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
939        F1("split",                                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
940        F1("spliti",                                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
941        F1("sql_regcase",                                   MAY_BE_NULL | MAY_BE_STRING),
942
943        /* ext/mysql */
944        F1("mysql_connect",                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
945        F1("mysql_pconnect",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
946        F0("mysql_close",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
947        F0("mysql_select_db",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
948        F0("mysql_create_db",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
949        F0("mysql_drop_db",                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
950        F1("mysql_query",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_RESOURCE),
951        F1("mysql_unbuffered_query",                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_RESOURCE),
952        F1("mysql_db_query",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_RESOURCE),
953        F1("mysql_list_dbs",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
954        F1("mysql_list_tables",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
955        F1("mysql_list_fields",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
956        F1("mysql_list_processes",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
957        F1("mysql_error",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
958        F0("mysql_errno",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
959        F0("mysql_affected_rows",                   MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
960        F0("mysql_insert_id",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
961        F1("mysql_result",                                                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
962        F0("mysql_num_rows",                                            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
963        F0("mysql_num_fields",                                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
964        F1("mysql_fetch_row",                                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_ANY),
965        F1("mysql_fetch_array",                                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
966        F1("mysql_fetch_assoc",                                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_ANY),
967        F1("mysql_fetch_object",                                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
968        F0("mysql_data_seek",                                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
969        F1("mysql_fetch_lengths",                                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
970        F1("mysql_fetch_field",                                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_OBJECT),
971        F0("mysql_field_seek",                                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
972        F0("mysql_free_result",                                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
973        F1("mysql_field_name",                                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
974        F1("mysql_field_table",                                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
975        F0("mysql_field_len",                                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
976        F1("mysql_field_type",                                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
977        F1("mysql_field_flags",                                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
978        F1("mysql_escape_string",                                       MAY_BE_NULL | MAY_BE_STRING),
979        F1("mysql_real_escape_string",                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
980        F1("mysql_stat",                                                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
981        F0("mysql_thread_id",                                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
982        F1("mysql_client_encoding",                                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
983        F0("mysql_ping",                                                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
984        F1("mysql_get_client_info",                                     MAY_BE_NULL | MAY_BE_STRING),
985        F1("mysql_get_host_info",                                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
986        F0("mysql_get_proto_info",                                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
987        F1("mysql_get_server_info",                                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
988        F1("mysql_info",                                                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
989        F0("mysql_set_charset",                                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
990        F1("mysql",                                                                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
991        F1("mysql_fieldname",                                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
992        F1("mysql_fieldtable",                                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
993        F0("mysql_fieldlen",                                            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
994        F1("mysql_fieldtype",                                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
995        F1("mysql_fieldflags",                                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
996        F0("mysql_selectdb",                                            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
997        F0("mysql_createdb",                                            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
998        F0("mysql_dropdb",                                                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
999        F0("mysql_freeresult",                                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1000        F0("mysql_numfields",                                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1001        F0("mysql_numrows",                                                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1002        F1("mysql_listdbs",                                                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1003        F1("mysql_listtables",                                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1004        F1("mysql_listfields",                                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1005        F1("mysql_db_name",                                                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1006        F1("mysql_dbname",                                                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1007        F1("mysql_tablename",                                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1008        F1("mysql_table_name",                                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1009
1010        /* ext/curl */
1011        F1("curl_init",                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1012        F1("curl_copy_handle",                      MAY_BE_NULL | MAY_BE_RESOURCE),
1013        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),
1014        F0("curl_setopt",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1015        F0("curl_setopt_array",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1016        FN("curl_exec",                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1017        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),
1018        F1("curl_error",                            MAY_BE_NULL | MAY_BE_STRING),
1019        F0("curl_errno",                            MAY_BE_NULL | MAY_BE_LONG),
1020        F0("curl_close",                            MAY_BE_NULL),
1021        F1("curl_strerror",                         MAY_BE_NULL | MAY_BE_STRING),
1022        F1("curl_multi_strerror",                   MAY_BE_NULL | MAY_BE_STRING),
1023        F0("curl_reset",                            MAY_BE_NULL),
1024        F1("curl_escape",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1025        F1("curl_unescape",                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1026        F0("curl_pause",                            MAY_BE_NULL | MAY_BE_LONG),
1027        F1("curl_multi_init",                       MAY_BE_NULL | MAY_BE_RESOURCE),
1028        F0("curl_multi_add_handle",                 MAY_BE_NULL | MAY_BE_LONG),
1029        F0("curl_multi_remove_handle",              MAY_BE_NULL | MAY_BE_LONG),
1030        F0("curl_multi_select",                     MAY_BE_NULL | MAY_BE_LONG),
1031        F0("curl_multi_exec",                       MAY_BE_NULL | MAY_BE_LONG),
1032        FN("curl_multi_getcontent",                 MAY_BE_NULL | MAY_BE_STRING),
1033        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),
1034        F0("curl_multi_close",                      MAY_BE_NULL),
1035        F0("curl_multi_setopt",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1036        F1("curl_share_init",                       MAY_BE_NULL | MAY_BE_RESOURCE),
1037        F0("curl_share_close",                      MAY_BE_NULL),
1038        F0("curl_share_setopt",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1039        F1("curl_file_create",                      MAY_BE_OBJECT),
1040
1041        /* ext/mbstring */
1042        F1("mb_convert_case",                       MAY_BE_FALSE | MAY_BE_STRING),
1043        F1("mb_strtoupper",                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1044        F1("mb_strtolower",                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1045        F1("mb_language",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
1046        F1("mb_internal_encoding",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
1047        F1("mb_http_input",                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1048        F1("mb_http_output",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
1049        F1("mb_detect_order",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1050        F1("mb_substitute_character",               MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG | MAY_BE_STRING),
1051        F0("mb_parse_str",                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1052        F1("mb_output_handler",                     MAY_BE_NULL | MAY_BE_STRING),
1053        F1("mb_preferred_mime_name",                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1054        F0("mb_strlen",                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1055        F0("mb_strpos",                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1056        F0("mb_strrpos",                            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1057        F0("mb_stripos",                            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1058        F0("mb_strripos",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1059        F1("mb_strstr",                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1060        F1("mb_strrchr",                            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1061        F1("mb_stristr",                            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1062        F1("mb_strrichr",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1063        F0("mb_substr_count",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1064        F1("mb_substr",                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1065        F1("mb_strcut",                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1066        F0("mb_strwidth",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1067        F1("mb_strimwidth",                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1068        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),
1069        F1("mb_detect_encoding",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1070        F1("mb_list_encodings",                     MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1071        F1("mb_encoding_aliases",                   MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1072        F1("mb_convert_kana",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1073        F1("mb_encode_mimeheader",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1074        F1("mb_decode_mimeheader",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1075        F1("mb_convert_variables",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1076        F1("mb_encode_numericentity",               MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1077        F1("mb_decode_numericentity",               MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1078        F0("mb_send_mail",                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1079        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),
1080        F0("mb_check_encoding",                     MAY_BE_FALSE | MAY_BE_TRUE),
1081
1082        F1("mb_regex_encoding",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
1083        F1("mb_regex_set_options",                  MAY_BE_FALSE | MAY_BE_STRING),
1084        F0("mb_ereg",                               MAY_BE_FALSE | MAY_BE_LONG),
1085        F0("mb_eregi",                              MAY_BE_FALSE | MAY_BE_LONG),
1086        F1("mb_ereg_replace",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1087        F1("mb_eregi_replace",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1088        F1("mb_ereg_replace_callback",              MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1089        F1("mb_split",                              MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1090        F0("mb_ereg_match",                         MAY_BE_FALSE | MAY_BE_TRUE),
1091        F0("mb_ereg_search",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1092        F1("mb_ereg_search_pos",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
1093        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),
1094        F0("mb_ereg_search_init",                   MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1095        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),
1096        F0("mb_ereg_search_getpos",                 MAY_BE_LONG),
1097        F0("mb_ereg_search_setpos",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1098
1099        F0("mbregex_encoding",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1100        F0("mbereg",                                MAY_BE_FALSE | MAY_BE_LONG),
1101        F0("mberegi",                               MAY_BE_FALSE | MAY_BE_LONG),
1102        F1("mbereg_replace",                        MAY_BE_FALSE | MAY_BE_STRING),
1103        F1("mberegi_replace",                       MAY_BE_FALSE | MAY_BE_STRING),
1104        F1("mbsplit",                               MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1105        F0("mbereg_match",                          MAY_BE_FALSE | MAY_BE_TRUE),
1106        F0("mbereg_search",                         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1107        F1("mbereg_search_pos",                     MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_LONG),
1108        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),
1109        F0("mbereg_search_init",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1110        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),
1111        F0("mbereg_search_getpos",                  MAY_BE_LONG),
1112        F0("mbereg_search_setpos",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1113
1114        /* ext/iconv */
1115        F1("iconv",                                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1116        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),
1117        F0("iconv_set_encoding",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1118        F0("iconv_strlen",                          MAY_BE_FALSE | MAY_BE_LONG),
1119        F1("iconv_substr",                          MAY_BE_FALSE | MAY_BE_STRING),
1120        F0("iconv_strpos",                          MAY_BE_FALSE | MAY_BE_LONG),
1121        F0("iconv_strrpos",                         MAY_BE_FALSE | MAY_BE_LONG),
1122        F1("iconv_mime_encode",                     MAY_BE_FALSE | MAY_BE_STRING),
1123        F1("iconv_mime_decode",                     MAY_BE_FALSE | MAY_BE_STRING),
1124        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),
1125
1126        /* ext/json */
1127        F1("json_encode",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1128        F1("json_decode",                           MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY),
1129        F0("json_last_error",                       MAY_BE_NULL | MAY_BE_LONG),
1130        F1("json_last_error_msg",                   MAY_BE_NULL | MAY_BE_STRING),
1131
1132        /* ext/xml */
1133        FN("xml_parser_create",                     MAY_BE_FALSE | MAY_BE_RESOURCE),
1134        FN("xml_parser_create_ns",                  MAY_BE_FALSE | MAY_BE_RESOURCE),
1135        F0("xml_set_object",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1136        F0("xml_set_element_handler",               MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1137        F0("xml_set_character_data_handler",        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1138        F0("xml_set_processing_instruction_handler",MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1139        F0("xml_set_default_handler",               MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1140        F0("xml_set_unparsed_entity_decl_handler",  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1141        F0("xml_set_notation_decl_handler",         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1142        F0("xml_set_external_entity_ref_handler",   MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1143        F0("xml_set_start_namespace_decl_handler",  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1144        F0("xml_set_end_namespace_decl_handler",    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1145        F0("xml_parse",                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1146        F0("xml_parse_into_struct",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1147        F0("xml_get_error_code",                    MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1148        F1("xml_error_string",                      MAY_BE_NULL | MAY_BE_STRING),
1149        F0("xml_get_current_line_number",           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1150        F0("xml_get_current_column_number",         MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1151        F0("xml_get_current_byte_index",            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1152        F0("xml_parser_free",                       MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1153        F0("xml_parser_set_option",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1154        F1("xml_parser_get_option",                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG | MAY_BE_STRING),
1155        F1("utf8_encode",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1156        F1("utf8_decode",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1157
1158        /* ext/zlib */
1159        F0("readgzfile",                            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1160        F0("gzrewind",                              MAY_BE_FALSE | MAY_BE_TRUE),
1161        F0("gzclose",                               MAY_BE_FALSE | MAY_BE_TRUE),
1162        F0("gzeof",                                 MAY_BE_FALSE | MAY_BE_TRUE),
1163        F1("gzgetc",                                MAY_BE_FALSE | MAY_BE_STRING),
1164        F1("gzgets",                                MAY_BE_FALSE | MAY_BE_STRING),
1165        F1("gzgetss",                               MAY_BE_FALSE | MAY_BE_STRING),
1166        F1("gzread",                                MAY_BE_FALSE | MAY_BE_STRING),
1167        F1("gzopen",                                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1168        F0("gzpassthru",                            MAY_BE_FALSE | MAY_BE_LONG),
1169        F0("gzseek",                                MAY_BE_FALSE | MAY_BE_LONG),
1170        F0("gztell",                                MAY_BE_FALSE | MAY_BE_LONG),
1171        F0("gzwrite",                               MAY_BE_FALSE | MAY_BE_LONG),
1172        F0("gzputs",                                MAY_BE_FALSE | MAY_BE_LONG),
1173        F1("gzfile",                                MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1174        F1("gzcompress",                            MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1175        F1("gzuncompress",                          MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1176        F1("gzdeflate",                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1177        F1("gzinflate",                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1178        F1("gzencode",                              MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1179        F1("gzdecode",                              MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1180        F1("zlib_encode",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1181        F1("zlib_decode",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1182        F1("zlib_get_coding_type",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1183        F1("ob_gzhandler",                          MAY_BE_FALSE | MAY_BE_STRING),
1184
1185        /* ext/hash */
1186        F1("hash",                                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1187        F1("hash_file",                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1188        F1("hash_hmac",                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1189        F1("hash_hmac_file",                        MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1190        F1("hash_init",                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1191        F0("hash_update",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1192        F0("hash_update_stream",                    MAY_BE_NULL | MAY_BE_LONG),
1193        F0("hash_update_file",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE),
1194        F1("hash_final",                            MAY_BE_NULL | MAY_BE_STRING),
1195        F1("hash_copy",                             MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_RESOURCE),
1196        F1("hash_algos",                            MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
1197        F1("hash_pbkdf2",                           MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1198        F1("mhash_keygen_s2k",                      MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1199        F0("mhash_get_block_size",                  MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_LONG),
1200        F1("mhash_get_hash_name",                   MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1201        F0("mhash_count",                           MAY_BE_NULL | MAY_BE_LONG),
1202        F1("mhash",                                 MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_STRING),
1203};
1204
1205static HashTable func_info;
1206int zend_func_info_rid = -1;
1207
1208uint32_t zend_get_func_info(const zend_call_info *call_info, const zend_ssa *ssa)
1209{
1210        uint32_t ret = 0;
1211
1212        if (call_info->callee_func->type == ZEND_INTERNAL_FUNCTION) {
1213                func_info_t *info;
1214
1215                if ((info = zend_hash_find_ptr(&func_info, Z_STR_P(CRT_CONSTANT_EX(call_info->caller_op_array, call_info->caller_init_opline->op2, ssa->rt_constants)))) != NULL) {
1216                        if (UNEXPECTED(zend_optimizer_is_disabled_func(info->name, info->name_len))) {
1217                                ret = MAY_BE_NULL;
1218                        } else if (info->info_func) {
1219                                ret = info->info_func(call_info, ssa);
1220                        } else {
1221                                ret = info->info;
1222                        }
1223#if 0
1224                } else {
1225                        fprintf(stderr, "Unknown internal function '%s'\n", func->common.function_name);
1226#endif
1227                }
1228        } else {
1229                // FIXME: the order of functions matters!!!
1230                zend_func_info *info = ZEND_FUNC_INFO((zend_op_array*)call_info->callee_func);
1231                if (info) {
1232                        ret = info->return_info.type;
1233                }
1234        }
1235        if (!ret) {
1236                ret = MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
1237                if (call_info->callee_func->type == ZEND_INTERNAL_FUNCTION) {
1238                        ret |= FUNC_MAY_WARN;
1239                }
1240                if (call_info->callee_func->common.fn_flags & ZEND_ACC_GENERATOR) {
1241                        ret = MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_OBJECT;
1242                } else  if (call_info->callee_func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) {
1243                        ret |= MAY_BE_REF;
1244                } else {
1245                        ret |= MAY_BE_RC1 | MAY_BE_RCN;
1246                }
1247        }
1248        return ret;
1249}
1250
1251int zend_func_info_startup(void)
1252{
1253        zend_extension dummy;
1254        size_t i;
1255
1256        if (zend_func_info_rid == -1) {
1257                zend_func_info_rid = zend_get_resource_handle(&dummy);
1258                if (zend_func_info_rid < 0) {
1259                        return FAILURE;
1260                }
1261
1262                zend_hash_init(&func_info, sizeof(func_infos)/sizeof(func_info_t), NULL, NULL, 1);
1263                for (i = 0; i < sizeof(func_infos)/sizeof(func_info_t); i++) {
1264                        if (zend_hash_str_add_ptr(&func_info, func_infos[i].name, func_infos[i].name_len, (void**)&func_infos[i]) == NULL) {
1265                                fprintf(stderr, "ERROR: Duplicate function info for \"%s\"\n", func_infos[i].name);
1266                        }
1267                }
1268        }
1269
1270        return SUCCESS;
1271}
1272
1273int zend_func_info_shutdown(void)
1274{
1275        if (zend_func_info_rid != -1) {
1276                zend_hash_destroy(&func_info);
1277                zend_func_info_rid = -1;
1278        }
1279        return SUCCESS;
1280}
1281
1282/*
1283 * Local variables:
1284 * tab-width: 4
1285 * c-basic-offset: 4
1286 * indent-tabs-mode: t
1287 * End:
1288 */
Note: See TracBrowser for help on using the repository browser.