summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRasmus Lerdorf <rasmus@php.net>2015-06-21 21:49:07 -0400
committerRasmus Lerdorf <rasmus@php.net>2015-06-21 21:50:09 -0400
commitd2356541d0386e3f0b6d593e2cc046ced68ff050 (patch)
tree4671492402e815ac24db6e21768486bf3760d16b
parent5314f13fc6f88d013550806a9bb5ee0821845b1c (diff)
downloadphp-git-d2356541d0386e3f0b6d593e2cc046ced68ff050.tar.gz
Fix arginfo for built-in engine functions
-rw-r--r--Zend/zend_builtin_functions.c281
-rw-r--r--scripts/dev/genarginfo.php74
2 files changed, 285 insertions, 70 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 8ea758adcc..b0c660dddb 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -102,148 +102,289 @@ static ZEND_FUNCTION(gc_disable);
ZEND_BEGIN_ARG_INFO(arginfo_zend__void, 0)
ZEND_END_ARG_INFO()
+/* string zend_version(void) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_version, 0, 0, IS_STRING, 0, 0)
+ZEND_END_ARG_INFO()
+
+/* int gc_collect_cycles(void) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gc_collect_cycles, 0, 0, IS_LONG, 0, 0)
+ZEND_END_ARG_INFO()
+
+/* void gc_enabled(void) */
+ZEND_BEGIN_ARG_INFO_EX(arginfo_gc_enabled, 0, 0, 0)
+ZEND_END_ARG_INFO()
+
+/* void gc_enable(void) */
+ZEND_BEGIN_ARG_INFO_EX(arginfo_gc_enable, 0, 0, 0)
+ZEND_END_ARG_INFO()
+
+/* void gc_disable(void) */
+ZEND_BEGIN_ARG_INFO_EX(arginfo_gc_disable, 0, 0, 0)
+ZEND_END_ARG_INFO()
+
+/* int func_num_args(void) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_func_num_args, 0, 0, IS_LONG, 0, 0)
+ZEND_END_ARG_INFO()
+
+/* mixed func_get_arg(int arg_num) */
ZEND_BEGIN_ARG_INFO_EX(arginfo_func_get_arg, 0, 0, 1)
- ZEND_ARG_INFO(0, arg_num)
+ ZEND_ARG_TYPE_INFO(0, arg_num, IS_LONG, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_strlen, 0, 0, 1)
- ZEND_ARG_INFO(0, str)
+/* array func_get_args() */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_func_get_args, 0, 0, IS_ARRAY, 0, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_strcmp, 0, 0, 2)
- ZEND_ARG_INFO(0, str1)
- ZEND_ARG_INFO(0, str2)
+/* int strlen(string str) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strlen, 0, 1, IS_LONG, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_strncmp, 0, 0, 3)
- ZEND_ARG_INFO(0, str1)
- ZEND_ARG_INFO(0, str2)
- ZEND_ARG_INFO(0, len)
+/* int strcmp(string str1, string str2) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strcmp, 0, 2, IS_LONG, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, str1, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, str2, IS_STRING, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_each, 0, 0, 1)
- ZEND_ARG_INFO(1, arr)
+/* int strncmp(string str1, string str2, int len) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strncmp, 0, 3, IS_LONG, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, str1, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, str2, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, len, IS_LONG, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_error_reporting, 0, 0, 0)
- ZEND_ARG_INFO(0, new_error_level)
+/* int strcasecmp(string str1, string str2) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strcasecmp, 0, 2, IS_LONG, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, str1, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, str2, IS_STRING, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_define, 0, 0, 3)
- ZEND_ARG_INFO(0, constant_name)
+/* int strncasecmp(string str1, string str2, int len) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strncasecmp, 0, 3, IS_LONG, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, str1, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, str2, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, len, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+/* array each(array arr) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_each, 0, 1, IS_ARRAY, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, arr, IS_ARRAY, 0)
+ZEND_END_ARG_INFO()
+
+/* int error_reporting([int new_error_level]) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_error_reporting, 0, 0, IS_LONG, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, new_error_level, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+/* bool define(string constant_name, mixed value[, boolean case_insensitive=false]) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_define, 0, 2, _IS_BOOL, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, constant_name, IS_STRING, 0)
ZEND_ARG_INFO(0, value)
- ZEND_ARG_INFO(0, case_insensitive)
+ ZEND_ARG_TYPE_INFO(0, case_insensitive=false, _IS_BOOL, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_defined, 0, 0, 1)
- ZEND_ARG_INFO(0, constant_name)
+/* bool defined(string constant_name) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_defined, 0, 1, _IS_BOOL, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, constant_name, IS_STRING, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_get_class, 0, 0, 0)
+/* string get_class([object object]) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_class, 0, 0, IS_STRING, 0, 0)
ZEND_ARG_INFO(0, object)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_is_subclass_of, 0, 0, 2)
+/* string get_called_class() */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_called_class, 0, 0, IS_STRING, 0, 0)
+ZEND_END_ARG_INFO()
+
+/* string get_parent_class([mixed object]) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_parent_class, 0, 0, IS_STRING, 0, 0)
ZEND_ARG_INFO(0, object)
- ZEND_ARG_INFO(0, class_name)
- ZEND_ARG_INFO(0, allow_string)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_get_class_vars, 0, 0, 1)
- ZEND_ARG_INFO(0, class_name)
+/* bool is_subclass_of(mixed object_or_string, string class_name [, bool allow_string=true]) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_is_subclass_of, 0, 2, _IS_BOOL, 0, 0)
+ ZEND_ARG_INFO(0, object_or_string)
+ ZEND_ARG_TYPE_INFO(0, class_name, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, allow_string=true, _IS_BOOL, 0)
+ZEND_END_ARG_INFO()
+
+/* bool is_a(mixed object_or_string, string class_name [, bool allow_string=false]) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_is_a, 0, 2, _IS_BOOL, 0, 0)
+ ZEND_ARG_INFO(0, object_or_string)
+ ZEND_ARG_TYPE_INFO(0, class_name, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, allow_string=false, _IS_BOOL, 0)
+ZEND_END_ARG_INFO()
+
+/* array get_class_vars(string class_name) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_class_vars, 0, 1, IS_ARRAY, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, class_name, IS_STRING, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_get_object_vars, 0, 0, 1)
+/* array get_object_vars(object obj) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_object_vars, 0, 1, IS_ARRAY, 0, 0)
ZEND_ARG_INFO(0, obj)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_get_class_methods, 0, 0, 1)
+/* array get_class_methods(mixed class) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_class_methods, 0, 1, IS_ARRAY, 0, 0)
ZEND_ARG_INFO(0, class)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_method_exists, 0, 0, 2)
+/* bool method_exists(object object, string method) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_method_exists, 0, 2, _IS_BOOL, 0, 0)
ZEND_ARG_INFO(0, object)
- ZEND_ARG_INFO(0, method)
+ ZEND_ARG_TYPE_INFO(0, method, IS_STRING, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_property_exists, 0, 0, 2)
+/* bool property_exists(mixed object_or_class, string property_name) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_property_exists, 0, 2, _IS_BOOL, 0, 0)
ZEND_ARG_INFO(0, object_or_class)
- ZEND_ARG_INFO(0, property_name)
+ ZEND_ARG_TYPE_INFO(0, property_name, IS_STRING, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_exists, 0, 0, 1)
- ZEND_ARG_INFO(0, classname)
- ZEND_ARG_INFO(0, autoload)
+/* bool class_exists(string classname [, bool autoload]) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_exists, 0, 1, _IS_BOOL, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, classname, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, autoload, _IS_BOOL, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_trait_exists, 0, 0, 1)
- ZEND_ARG_INFO(0, traitname)
- ZEND_ARG_INFO(0, autoload)
+/* bool interface_exists(string classname [, bool autoload]) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_interface_exists, 0, 1, _IS_BOOL, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, classname, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, autoload, _IS_BOOL, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_function_exists, 0, 0, 1)
- ZEND_ARG_INFO(0, function_name)
+/* bool trait_exists(string traitname [, bool autoload]) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_trait_exists, 0, 1, _IS_BOOL, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, traitname, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, autoload, _IS_BOOL, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_alias, 0, 0, 2)
- ZEND_ARG_INFO(0, user_class_name)
- ZEND_ARG_INFO(0, alias_name)
- ZEND_ARG_INFO(0, autoload)
+/* bool function_exists(string function_name) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_function_exists, 0, 1, _IS_BOOL, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, function_name, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+/* bool class_alias(string user_class_name , string alias_name [, bool autoload]) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_alias, 0, 2, _IS_BOOL, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, user_class_name, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, alias_name, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, autoload, _IS_BOOL, 0)
ZEND_END_ARG_INFO()
#if ZEND_DEBUG
+/* void leak([int num_bytes=3]) */
+ZEND_BEGIN_ARG_INFO_EX(arginfo_leak, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, num_bytes=3, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+/* void leak_variable(mixed variable [, bool leak_data]) */
ZEND_BEGIN_ARG_INFO_EX(arginfo_leak_variable, 0, 0, 1)
ZEND_ARG_INFO(0, variable)
- ZEND_ARG_INFO(0, leak_data)
+ ZEND_ARG_TYPE_INFO(0, leak_data, _IS_BOOL, 0)
+ZEND_END_ARG_INFO()
+
+/* void crash(void) */
+ZEND_BEGIN_ARG_INFO_EX(arginfo_crash, 0, 0, 0)
ZEND_END_ARG_INFO()
#endif
+/* array get_included_files(void) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_included_files, 0, 0, IS_ARRAY, 0, 0)
+ZEND_END_ARG_INFO()
+
+/* void trigger_error(string message [, int error_type]) */
ZEND_BEGIN_ARG_INFO_EX(arginfo_trigger_error, 0, 0, 1)
- ZEND_ARG_INFO(0, message)
- ZEND_ARG_INFO(0, error_type)
+ ZEND_ARG_TYPE_INFO(0, message, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, error_type, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+/* string set_error_handler(string error_handler [, int error_types]) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_set_error_handler, 0, 1, IS_STRING, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, error_handler, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, error_types, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+/* void restore_error_handler(void) */
+ZEND_BEGIN_ARG_INFO_EX(arginfo_restore_error_handler, 0, 0, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_set_error_handler, 0, 0, 1)
- ZEND_ARG_INFO(0, error_handler)
- ZEND_ARG_INFO(0, error_types)
+/* string set_exception_handler(callable exception_handler) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_set_exception_handler, 0, 1, IS_STRING, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, exception_handler, IS_CALLABLE, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_set_exception_handler, 0, 0, 1)
- ZEND_ARG_INFO(0, exception_handler)
+/* void restore_exception_handler(void) */
+ZEND_BEGIN_ARG_INFO_EX(arginfo_restore_exception_handler, 0, 0, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_create_function, 0, 0, 2)
- ZEND_ARG_INFO(0, args)
- ZEND_ARG_INFO(0, code)
+/* array get_declared_traits() */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_declared_traits, 0, 0, IS_ARRAY, 0, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_get_resource_type, 0, 0, 1)
- ZEND_ARG_INFO(0, res)
+/* array get_declared_classes() */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_declared_classes, 0, 0, IS_ARRAY, 0, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_get_resources, 0, 0, 0)
- ZEND_ARG_INFO(0, type)
+/* array get_declared_interfaces() */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_declared_interfaces, 0, 0, IS_ARRAY, 0, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_get_loaded_extensions, 0, 0, 0)
- ZEND_ARG_INFO(0, zend_extensions)
+/* array get_defined_functions(void) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_defined_functions, 0, 0, IS_ARRAY, 0, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_get_defined_constants, 0, 0, 0)
- ZEND_ARG_INFO(0, categorize)
+/* array get_defined_vars(void) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_defined_vars, 0, 0, IS_ARRAY, 0, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_debug_backtrace, 0, 0, 0)
- ZEND_ARG_INFO(0, options)
- ZEND_ARG_INFO(0, limit)
+/* string create_function(string args, string code) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_create_function, 0, 2, IS_STRING, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, args, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, code, IS_STRING, 0)
ZEND_END_ARG_INFO()
+/* string get_resource_type(resource res) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_resource_type, 0, 1, IS_STRING, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, res, IS_RESOURCE, 0)
+ZEND_END_ARG_INFO()
+
+/* array get_resources([string resouce_type]) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_resources, 0, 0, IS_ARRAY, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, resouce_type, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+/* array get_loaded_extensions([bool zend_extensions]) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_loaded_extensions, 0, 0, IS_ARRAY, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, zend_extensions, _IS_BOOL, 0)
+ZEND_END_ARG_INFO()
+
+/* array get_defined_constants([bool categorize]) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_defined_constants, 0, 0, IS_ARRAY, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, categorize, _IS_BOOL, 0)
+ZEND_END_ARG_INFO()
+
+/* void debug_print_backtrace([int options[, int limit]]) */
ZEND_BEGIN_ARG_INFO_EX(arginfo_debug_print_backtrace, 0, 0, 0)
- ZEND_ARG_INFO(0, options)
+ ZEND_ARG_TYPE_INFO(0, options, IS_LONG, 0)
+ ZEND_ARG_TYPE_INFO(0, limit, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+/* array debug_backtrace([int options[, int limit]]) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_debug_backtrace, 0, 0, IS_ARRAY, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, options, IS_LONG, 0)
+ ZEND_ARG_TYPE_INFO(0, limit, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+/* bool extension_loaded(string extension_name) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_extension_loaded, 0, 1, _IS_BOOL, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, extension_name, IS_STRING, 0)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_extension_loaded, 0, 0, 1)
- ZEND_ARG_INFO(0, extension_name)
+/* array get_extension_funcs(string extension_name) */
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_extension_funcs, 0, 1, IS_ARRAY, 0, 0)
+ ZEND_ARG_TYPE_INFO(0, extension_name, IS_STRING, 0)
ZEND_END_ARG_INFO()
#ifdef ZEND_DEBUG
@@ -775,7 +916,7 @@ static void copy_constant_array(zval *dst, zval *src) /* {{{ */
}
/* }}} */
-/* {{{ proto bool define(string constant_name, mixed value, boolean case_insensitive=false)
+/* {{{ proto bool define(string constant_name, mixed value[, boolean case_insensitive=false])
Define a new constant */
ZEND_FUNCTION(define)
{
@@ -1566,7 +1707,7 @@ ZEND_FUNCTION(class_alias)
/* }}} */
#if ZEND_DEBUG
-/* {{{ proto void leak(int num_bytes=3)
+/* {{{ proto void leak([int num_bytes=3])
Cause an intentional memory leak, for testing/debugging purposes */
ZEND_FUNCTION(leak)
{
diff --git a/scripts/dev/genarginfo.php b/scripts/dev/genarginfo.php
new file mode 100644
index 0000000000..de69f5b045
--- /dev/null
+++ b/scripts/dev/genarginfo.php
@@ -0,0 +1,74 @@
+#!/usr/bin/env php
+<?php
+
+$types = [
+ 'string'=>'IS_STRING',
+ 'int'=>'IS_LONG',
+ 'float'=>'IS_DOUBLE',
+ 'double'=>'IS_DOUBLE',
+ 'bool'=>'_IS_BOOL',
+ 'boolean'=>'_IS_BOOL',
+ 'array'=>'IS_ARRAY',
+ 'objects'=>'IS_OBJECT',
+ 'resource'=>'IS_RESOURCE',
+ 'callable'=>'IS_CALLABLE',
+ 'callback'=>'IS_CALLABLE'
+];
+
+$file_contents = file_get_contents($argv[1]);
+$m = preg_match_all("~^\s*/\*\s+\{{3}\s+proto\s+(\S+)\s+(\w+)\s*\((.*?)\)~mU", $file_contents, $matches);
+if($m) {
+ $rets = $names = $param_strs = [];
+ foreach($matches[1] as $mk => $mv) {
+ $origs[] = $matches[0][$mk];
+ $rets[] = $matches[1][$mk];
+ $names[] = $matches[2][$mk];
+ $param_strs[] = $matches[3][$mk];
+ }
+ foreach($names as $k => $name) {
+ $ret = $rets[$k];
+ $param_str = $param_strs[$k];
+ list(,$orig) = explode('proto ', $origs[$k]);
+ list($count, $optional, $args) = parse_params($param_str);
+ $required = $count - $optional;
+ echo "/* ".trim($orig)." */\n";
+ if(!empty($types[$ret])) {
+ echo "ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_{$name}, 0, {$required}, {$types[$ret]}, 0, 0)\n";
+ } else {
+ echo "ZEND_BEGIN_ARG_INFO_EX(arginfo_{$name}, 0, 0, {$required})\n";
+ }
+ foreach($args as $arg) {
+ list($type,$name) = explode(' ', $arg, 2);
+ list($name,) = explode('|', $name, 2); // No |'s in the names - choose the first
+ $type=trim($type);
+ if(!empty($types[$type])) {
+ echo "\tZEND_ARG_TYPE_INFO(0, {$name}, {$types[$type]}, 0)\n";
+ } else {
+ echo "\tZEND_ARG_INFO(0, {$name})\n";
+ }
+ }
+ echo "ZEND_END_ARG_INFO()\n\n";
+ }
+} else {
+ echo "No function prototypes found in {$argv[1]}\n";
+}
+
+function parse_params($str) {
+ $str = trim(strtolower($str));
+ if(empty($str) || $str=='void') return [0,0,[]];
+ $params = explode(',', $str);
+ $optional = 0;
+ $args = [];
+ foreach($params as $i=>$p) {
+ $p = trim($p);
+ if($p[0]=='[') {
+ $optional++;
+ $p = ltrim($p, '[ ');
+ } else if($i) {
+ if(substr($params[$i-1],-1)=='[') $optional++;
+ }
+ $p = rtrim($p, ' ][');
+ $args[$i] = $p;
+ }
+ return [$i+1,$optional, $args];
+}