PHP  
 PHP: Test and Code Coverage Analysis
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

LCOV - code coverage report
Current view: top level - ext/opcache/Optimizer - zend_func_info.c (source / functions) Hit Total Coverage
Test: PHP Code Coverage Lines: 65 122 53.3 %
Date: 2019-04-07 Functions: 6 10 60.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :    +----------------------------------------------------------------------+
       3             :    | Zend Engine, Func Info                                               |
       4             :    +----------------------------------------------------------------------+
       5             :    | Copyright (c) 1998-2018 The PHP Group                                |
       6             :    +----------------------------------------------------------------------+
       7             :    | This source file is subject to version 3.01 of the PHP license,      |
       8             :    | that is bundled with this package in the file LICENSE, and is        |
       9             :    | available through the world-wide-web at the following url:           |
      10             :    | http://www.php.net/license/3_01.txt                                  |
      11             :    | If you did not receive a copy of the PHP license and are unable to   |
      12             :    | obtain it through the world-wide-web, please send a note to          |
      13             :    | license@php.net so we can mail you a copy immediately.               |
      14             :    +----------------------------------------------------------------------+
      15             :    | Authors: Dmitry Stogov <dmitry@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             : 
      31             : typedef uint32_t (*info_func_t)(const zend_call_info *call_info, const zend_ssa *ssa);
      32             : 
      33             : typedef 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             : 
      59           1 : static uint32_t zend_strlen_info(const zend_call_info *call_info, const zend_ssa *ssa)
      60             : {
      61           2 :         if (call_info->caller_init_opline->extended_value == (uint32_t)call_info->num_args &&
      62           1 :             call_info->num_args == 1) {
      63             : 
      64           1 :                 uint32_t tmp = 0;
      65           1 :                 if (call_info->arg_info[0].opline) {
      66           2 :                         uint32_t arg_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
      67             : 
      68           1 :                         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           1 :                                 tmp |= MAY_BE_LONG;
      70             :                         }
      71           1 :                         if (arg_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) {
      72             :                                 /* warning, and returns NULL */
      73           0 :                                 tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
      74             :                         }
      75             :                 } else {
      76           0 :                         tmp |= MAY_BE_LONG | FUNC_MAY_WARN | MAY_BE_NULL;
      77             :                 }
      78           1 :                 return tmp;
      79             :         } else {
      80             :                 /* warning, and returns NULL */
      81           0 :                 return FUNC_MAY_WARN | MAY_BE_NULL;
      82             :         }
      83             : }
      84             : 
      85           0 : static uint32_t zend_dechex_info(const zend_call_info *call_info, const zend_ssa *ssa)
      86             : {
      87           0 :         if (call_info->caller_init_opline->extended_value == (uint32_t)call_info->num_args &&
      88           0 :             call_info->num_args == 1) {
      89           0 :                 return MAY_BE_RC1 | MAY_BE_STRING;
      90             :         } else {
      91             :                 /* warning, and returns NULL */
      92           0 :                 return FUNC_MAY_WARN | MAY_BE_NULL;
      93             :         }
      94             : }
      95             : 
      96           0 : static uint32_t zend_range_info(const zend_call_info *call_info, const zend_ssa *ssa)
      97             : {
      98           0 :         if (call_info->caller_init_opline->extended_value == (uint32_t)call_info->num_args &&
      99           0 :             (call_info->num_args == 2 || call_info->num_args == 3)) {
     100             : 
     101           0 :                 uint32_t t1 = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
     102           0 :                 uint32_t t2 = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[1].opline);
     103           0 :                 uint32_t t3 = 0;
     104           0 :                 uint32_t tmp = FUNC_MAY_WARN | MAY_BE_RC1 | MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG;
     105             : 
     106           0 :                 if (call_info->num_args == 3) {
     107           0 :                         t3 = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[2].opline);
     108             :                 }
     109           0 :                 if ((t1 & MAY_BE_STRING) && (t2 & MAY_BE_STRING)) {
     110           0 :                         tmp |= MAY_BE_ARRAY_OF_LONG | MAY_BE_ARRAY_OF_DOUBLE | MAY_BE_ARRAY_OF_STRING;
     111             :                 }
     112           0 :                 if ((t1 & (MAY_BE_DOUBLE|MAY_BE_STRING))
     113           0 :                                 || (t2 & (MAY_BE_DOUBLE|MAY_BE_STRING))
     114           0 :                                 || (t3 & (MAY_BE_DOUBLE|MAY_BE_STRING))) {
     115           0 :                         tmp |= MAY_BE_ARRAY_OF_DOUBLE;
     116             :                 }
     117           0 :                 if ((t1 & (MAY_BE_ANY-(MAY_BE_STRING|MAY_BE_DOUBLE))) && (t2 & (MAY_BE_ANY-(MAY_BE_STRING|MAY_BE_DOUBLE)))) {
     118           0 :                         if ((t3 & MAY_BE_ANY) != MAY_BE_DOUBLE) {
     119           0 :                                 tmp |= MAY_BE_ARRAY_OF_LONG;
     120             :                         }
     121             :                 }
     122           0 :                 return tmp;
     123             :         } else {
     124             :                 /* may warning, and return FALSE */
     125           0 :                 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             : 
     129           0 : static uint32_t zend_is_type_info(const zend_call_info *call_info, const zend_ssa *ssa)
     130             : {
     131           0 :         if (call_info->caller_init_opline->extended_value == (uint32_t)call_info->num_args &&
     132           0 :             call_info->num_args == 1) {
     133           0 :                 return MAY_BE_FALSE | MAY_BE_TRUE;
     134             :         } else {
     135           0 :                 return MAY_BE_FALSE | MAY_BE_TRUE | FUNC_MAY_WARN;
     136             :         }
     137             : }
     138             : 
     139           0 : static uint32_t zend_l_ss_info(const zend_call_info *call_info, const zend_ssa *ssa)
     140             : {
     141           0 :         if (call_info->caller_init_opline->extended_value == (uint32_t)call_info->num_args &&
     142           0 :             call_info->num_args == 2) {
     143             : 
     144           0 :                 uint32_t arg1_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
     145           0 :                 uint32_t arg2_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[1].opline);
     146           0 :                 uint32_t tmp = 0;
     147             : 
     148           0 :                 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           0 :                     (arg2_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT))) {
     150           0 :                         tmp |= MAY_BE_LONG;
     151             :                 }
     152           0 :                 if ((arg1_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) ||
     153           0 :                     (arg2_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
     154             :                         /* warning, and returns NULL */
     155           0 :                         tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
     156             :                 }
     157           0 :                 return tmp;
     158             :         } else {
     159             :                 /* warning, and returns NULL */
     160           0 :                 return FUNC_MAY_WARN | MAY_BE_NULL | MAY_BE_LONG;
     161             :         }
     162             : }
     163             : 
     164           1 : static uint32_t zend_lb_ssn_info(const zend_call_info *call_info, const zend_ssa *ssa)
     165             : {
     166           2 :         if (call_info->caller_init_opline->extended_value == (uint32_t)call_info->num_args &&
     167           1 :             call_info->num_args == 3) {
     168           2 :                 uint32_t arg1_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
     169           2 :                 uint32_t arg2_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[1].opline);
     170           2 :                 uint32_t arg3_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[2].opline);
     171           1 :                 uint32_t tmp = 0;
     172             : 
     173           2 :                 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           2 :                     (arg2_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT)) &&
     175           1 :                     (arg3_info & (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_OBJECT))) {
     176           1 :                         tmp |= MAY_BE_LONG | MAY_BE_FALSE;
     177             :                 }
     178           1 :                 if ((arg1_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) ||
     179           0 :                     (arg2_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) ||
     180           0 :                     (arg3_info & (MAY_BE_STRING|MAY_BE_RESOURCE|MAY_BE_ARRAY|MAY_BE_OBJECT))) {
     181             :                         /* warning, and returns NULL */
     182           1 :                         tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
     183             :                 }
     184           1 :                 return tmp;
     185             :         } else {
     186             :                 /* warning, and returns NULL */
     187           0 :                 return FUNC_MAY_WARN | MAY_BE_NULL | MAY_BE_LONG;
     188             :         }
     189             : }
     190             : 
     191           1 : static uint32_t zend_b_s_info(const zend_call_info *call_info, const zend_ssa *ssa)
     192             : {
     193           2 :         if (call_info->caller_init_opline->extended_value == (uint32_t)call_info->num_args &&
     194           1 :             call_info->num_args == 1) {
     195             : 
     196           2 :                 uint32_t arg1_info = _ssa_op1_info(call_info->caller_op_array, ssa, call_info->arg_info[0].opline);
     197           1 :                 uint32_t tmp = 0;
     198             : 
     199           1 :                 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           1 :                         tmp |= MAY_BE_FALSE | MAY_BE_TRUE;
     201             :                 }
     202           1 :                 if (arg1_info & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) {
     203             :                         /* warning, and returns NULL */
     204           0 :                         tmp |= FUNC_MAY_WARN | MAY_BE_NULL;
     205             :                 }
     206           1 :                 return tmp;
     207             :         } else {
     208             :                 /* warning, and returns NULL */
     209           0 :                 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             : 
     215             : static 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             : 
    1205             : static HashTable func_info;
    1206             : int zend_func_info_rid = -1;
    1207             : 
    1208         297 : uint32_t zend_get_func_info(const zend_call_info *call_info, const zend_ssa *ssa)
    1209             : {
    1210         297 :         uint32_t ret = 0;
    1211             : 
    1212         297 :         if (call_info->callee_func->type == ZEND_INTERNAL_FUNCTION) {
    1213             :                 func_info_t *info;
    1214             : 
    1215         562 :                 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         220 :                         if (UNEXPECTED(zend_optimizer_is_disabled_func(info->name, info->name_len))) {
    1217           0 :                                 ret = MAY_BE_NULL;
    1218         220 :                         } else if (info->info_func) {
    1219           3 :                                 ret = info->info_func(call_info, ssa);
    1220             :                         } else {
    1221         217 :                                 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          16 :                 zend_func_info *info = ZEND_FUNC_INFO((zend_op_array*)call_info->callee_func);
    1231          16 :                 if (info) {
    1232          16 :                         ret = info->return_info.type;
    1233             :                 }
    1234             :         }
    1235         297 :         if (!ret) {
    1236          73 :                 ret = MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
    1237          73 :                 if (call_info->callee_func->type == ZEND_INTERNAL_FUNCTION) {
    1238          61 :                         ret |= FUNC_MAY_WARN;
    1239             :                 }
    1240          73 :                 if (call_info->callee_func->common.fn_flags & ZEND_ACC_GENERATOR) {
    1241           0 :                         ret = MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_OBJECT;
    1242          73 :                 } else  if (call_info->callee_func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) {
    1243           0 :                         ret |= MAY_BE_REF;
    1244             :                 } else {
    1245          73 :                         ret |= MAY_BE_RC1 | MAY_BE_RCN;
    1246             :                 }
    1247             :         }
    1248         297 :         return ret;
    1249             : }
    1250             : 
    1251         501 : int zend_func_info_startup(void)
    1252             : {
    1253             :         zend_extension dummy;
    1254             :         size_t i;
    1255             : 
    1256         501 :         if (zend_func_info_rid == -1) {
    1257         501 :                 zend_func_info_rid = zend_get_resource_handle(&dummy);
    1258         501 :                 if (zend_func_info_rid < 0) {
    1259           0 :                         return FAILURE;
    1260             :                 }
    1261             : 
    1262         501 :                 zend_hash_init(&func_info, sizeof(func_infos)/sizeof(func_info_t), NULL, NULL, 1);
    1263      440880 :                 for (i = 0; i < sizeof(func_infos)/sizeof(func_info_t); i++) {
    1264      880758 :                         if (zend_hash_str_add_ptr(&func_info, func_infos[i].name, func_infos[i].name_len, (void**)&func_infos[i]) == NULL) {
    1265           0 :                                 fprintf(stderr, "ERROR: Duplicate function info for \"%s\"\n", func_infos[i].name);
    1266             :                         }
    1267             :                 }
    1268             :         }
    1269             : 
    1270         501 :         return SUCCESS;
    1271             : }
    1272             : 
    1273       24639 : int zend_func_info_shutdown(void)
    1274             : {
    1275       24639 :         if (zend_func_info_rid != -1) {
    1276         501 :                 zend_hash_destroy(&func_info);
    1277         501 :                 zend_func_info_rid = -1;
    1278             :         }
    1279       24639 :         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             :  */

Generated by: LCOV version 1.10

Generated at Sun, 07 Apr 2019 20:56:51 +0000 (11 days ago)

Copyright © 2005-2019 The PHP Group
All rights reserved.