diff options
author | Máté Kocsis <kocsismate@woohoolabs.com> | 2020-03-06 10:01:10 +0100 |
---|---|---|
committer | Máté Kocsis <kocsismate@woohoolabs.com> | 2020-03-10 11:41:48 +0100 |
commit | d2b902f174b2e8c98bf5d4e257924a96b1323776 (patch) | |
tree | 68230827162b0392db375008a4841e1b3538f395 | |
parent | 9d0eccd980535eff78141ebaddea18372c05d6a6 (diff) | |
download | php-git-d2b902f174b2e8c98bf5d4e257924a96b1323776.tar.gz |
Add some stubs for SPL
Closes GH-5245
-rwxr-xr-x | ext/spl/php_spl.stub.php | 3 | ||||
-rw-r--r-- | ext/spl/spl_array.c | 174 | ||||
-rwxr-xr-x | ext/spl/spl_array.stub.php | 225 | ||||
-rw-r--r-- | ext/spl/spl_array_arginfo.h | 136 | ||||
-rw-r--r-- | ext/spl/spl_fixedarray.c | 58 | ||||
-rwxr-xr-x | ext/spl/spl_fixedarray.stub.php | 64 | ||||
-rw-r--r-- | ext/spl/spl_fixedarray_arginfo.h | 46 | ||||
-rw-r--r-- | ext/spl/tests/bug71412.phpt | 2 |
8 files changed, 550 insertions, 158 deletions
diff --git a/ext/spl/php_spl.stub.php b/ext/spl/php_spl.stub.php index 8bf6e79c74..b9c5335b70 100755 --- a/ext/spl/php_spl.stub.php +++ b/ext/spl/php_spl.stub.php @@ -1,7 +1,5 @@ <?php -/* ext/spl/php_spl.c */ - function class_implements($what, bool $autoload = true): array|false {} function class_parents($instance, bool $autoload = true): array|false {} @@ -27,7 +25,6 @@ function spl_object_hash(object $obj): string {} function spl_object_id(object $obj): int {} -/* ext/spl/spl_iterators.c */ function iterator_apply(Traversable $iterator, callable $function, ?array $args = null): int {} function iterator_count(Traversable $iterator): int {} diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index bc1713ee84..434dfc634f 100644 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -27,6 +27,7 @@ #include "zend_exceptions.h" #include "php_spl.h" +#include "spl_array_arginfo.h" #include "spl_functions.h" #include "spl_engine.h" #include "spl_iterators.h" @@ -780,6 +781,10 @@ SPL_METHOD(Array, getArrayCopy) zval *object = ZEND_THIS; spl_array_object *intern = Z_SPLARRAY_P(object); + if (zend_parse_parameters_none() == FAILURE) { + RETURN_THROWS(); + } + RETURN_ARR(zend_array_dup(spl_array_get_hash_table(intern))); } /* }}} */ @@ -1196,7 +1201,7 @@ SPL_METHOD(Array, __construct) return; /* nothing to do */ } - if (zend_parse_parameters(ZEND_NUM_ARGS(), "z|lC", &array, &ar_flags, &ce_get_iterator) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|zlC", &array, &ar_flags, &ce_get_iterator) == FAILURE) { RETURN_THROWS(); } @@ -1225,7 +1230,7 @@ SPL_METHOD(ArrayIterator, __construct) return; /* nothing to do */ } - if (zend_parse_parameters(ZEND_NUM_ARGS(), "z|l", &array, &ar_flags) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|zl", &array, &ar_flags) == FAILURE) { RETURN_THROWS(); } @@ -1673,7 +1678,7 @@ SPL_METHOD(Array, serialize) smart_str buf = {0}; if (zend_parse_parameters_none() == FAILURE) { - return; + RETURN_THROWS(); } PHP_VAR_SERIALIZE_INIT(var_hash); @@ -1702,11 +1707,7 @@ SPL_METHOD(Array, serialize) /* done */ PHP_VAR_SERIALIZE_DESTROY(var_hash); - if (buf.s) { - RETURN_NEW_STR(buf.s); - } - - RETURN_NULL(); + RETURN_NEW_STR(buf.s); } /* }}} */ /* {{{ proto void ArrayObject::unserialize(string serialized) @@ -1892,122 +1893,69 @@ SPL_METHOD(Array, __unserialize) } /* }}} */ -/* {{{ arginfo and function table */ -ZEND_BEGIN_ARG_INFO_EX(arginfo_array___construct, 0, 0, 0) - ZEND_ARG_INFO(0, input) - ZEND_ARG_INFO(0, flags) - ZEND_ARG_INFO(0, iterator_class) -ZEND_END_ARG_INFO() - -/* ArrayIterator::__construct and ArrayObject::__construct have different signatures */ -ZEND_BEGIN_ARG_INFO_EX(arginfo_array_iterator___construct, 0, 0, 0) - ZEND_ARG_INFO(0, array) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_array_offsetGet, 0, 0, 1) - ZEND_ARG_INFO(0, index) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_array_offsetSet, 0, 0, 2) - ZEND_ARG_INFO(0, index) - ZEND_ARG_INFO(0, newval) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_array_append, 0) - ZEND_ARG_INFO(0, value) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_array_seek, 0) - ZEND_ARG_INFO(0, position) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_array_exchangeArray, 0) - ZEND_ARG_INFO(0, input) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_array_setFlags, 0) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_array_setIteratorClass, 0) - ZEND_ARG_INFO(0, iteratorClass) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_array_uXsort, 0) - ZEND_ARG_INFO(0, cmp_function) -ZEND_END_ARG_INFO(); - -ZEND_BEGIN_ARG_INFO(arginfo_array_unserialize, 0) - ZEND_ARG_INFO(0, serialized) -ZEND_END_ARG_INFO(); - -ZEND_BEGIN_ARG_INFO(arginfo_array_void, 0) -ZEND_END_ARG_INFO() - static const zend_function_entry spl_funcs_ArrayObject[] = { - SPL_ME(Array, __construct, arginfo_array___construct, ZEND_ACC_PUBLIC) - SPL_ME(Array, offsetExists, arginfo_array_offsetGet, ZEND_ACC_PUBLIC) - SPL_ME(Array, offsetGet, arginfo_array_offsetGet, ZEND_ACC_PUBLIC) - SPL_ME(Array, offsetSet, arginfo_array_offsetSet, ZEND_ACC_PUBLIC) - SPL_ME(Array, offsetUnset, arginfo_array_offsetGet, ZEND_ACC_PUBLIC) - SPL_ME(Array, append, arginfo_array_append, ZEND_ACC_PUBLIC) - SPL_ME(Array, getArrayCopy, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, count, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, getFlags, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, setFlags, arginfo_array_setFlags, ZEND_ACC_PUBLIC) - SPL_ME(Array, asort, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, ksort, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, uasort, arginfo_array_uXsort, ZEND_ACC_PUBLIC) - SPL_ME(Array, uksort, arginfo_array_uXsort, ZEND_ACC_PUBLIC) - SPL_ME(Array, natsort, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, natcasesort, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, unserialize, arginfo_array_unserialize, ZEND_ACC_PUBLIC) - SPL_ME(Array, serialize, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, __unserialize, arginfo_array_unserialize, ZEND_ACC_PUBLIC) - SPL_ME(Array, __serialize, arginfo_array_void, ZEND_ACC_PUBLIC) + SPL_ME(Array, __construct, arginfo_class_ArrayObject___construct, ZEND_ACC_PUBLIC) + SPL_ME(Array, offsetExists, arginfo_class_ArrayObject_offsetExists, ZEND_ACC_PUBLIC) + SPL_ME(Array, offsetGet, arginfo_class_ArrayObject_offsetGet, ZEND_ACC_PUBLIC) + SPL_ME(Array, offsetSet, arginfo_class_ArrayObject_offsetSet, ZEND_ACC_PUBLIC) + SPL_ME(Array, offsetUnset, arginfo_class_ArrayObject_offsetUnset, ZEND_ACC_PUBLIC) + SPL_ME(Array, append, arginfo_class_ArrayObject_append, ZEND_ACC_PUBLIC) + SPL_ME(Array, getArrayCopy, arginfo_class_ArrayObject_getArrayCopy, ZEND_ACC_PUBLIC) + SPL_ME(Array, count, arginfo_class_ArrayObject_count, ZEND_ACC_PUBLIC) + SPL_ME(Array, getFlags, arginfo_class_ArrayObject_getFlags, ZEND_ACC_PUBLIC) + SPL_ME(Array, setFlags, arginfo_class_ArrayObject_setFlags, ZEND_ACC_PUBLIC) + SPL_ME(Array, asort, arginfo_class_ArrayObject_asort, ZEND_ACC_PUBLIC) + SPL_ME(Array, ksort, arginfo_class_ArrayObject_ksort, ZEND_ACC_PUBLIC) + SPL_ME(Array, uasort, arginfo_class_ArrayObject_uasort, ZEND_ACC_PUBLIC) + SPL_ME(Array, uksort, arginfo_class_ArrayObject_uksort, ZEND_ACC_PUBLIC) + SPL_ME(Array, natsort, arginfo_class_ArrayObject_natsort, ZEND_ACC_PUBLIC) + SPL_ME(Array, natcasesort, arginfo_class_ArrayObject_natcasesort, ZEND_ACC_PUBLIC) + SPL_ME(Array, unserialize, arginfo_class_ArrayObject_unserialize, ZEND_ACC_PUBLIC) + SPL_ME(Array, serialize, arginfo_class_ArrayObject_serialize, ZEND_ACC_PUBLIC) + SPL_ME(Array, __unserialize, arginfo_class_ArrayObject___unserialize, ZEND_ACC_PUBLIC) + SPL_ME(Array, __serialize, arginfo_class_ArrayObject___serialize, ZEND_ACC_PUBLIC) /* ArrayObject specific */ - SPL_ME(Array, getIterator, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, exchangeArray, arginfo_array_exchangeArray, ZEND_ACC_PUBLIC) - SPL_ME(Array, setIteratorClass, arginfo_array_setIteratorClass, ZEND_ACC_PUBLIC) - SPL_ME(Array, getIteratorClass, arginfo_array_void, ZEND_ACC_PUBLIC) + SPL_ME(Array, getIterator, arginfo_class_ArrayObject_getIterator, ZEND_ACC_PUBLIC) + SPL_ME(Array, exchangeArray, arginfo_class_ArrayObject_exchangeArray, ZEND_ACC_PUBLIC) + SPL_ME(Array, setIteratorClass, arginfo_class_ArrayObject_setIteratorClass, ZEND_ACC_PUBLIC) + SPL_ME(Array, getIteratorClass, arginfo_class_ArrayObject_getIteratorClass, ZEND_ACC_PUBLIC) PHP_FE_END }; static const zend_function_entry spl_funcs_ArrayIterator[] = { - SPL_ME(ArrayIterator, __construct, arginfo_array_iterator___construct, ZEND_ACC_PUBLIC) - SPL_ME(Array, offsetExists, arginfo_array_offsetGet, ZEND_ACC_PUBLIC) - SPL_ME(Array, offsetGet, arginfo_array_offsetGet, ZEND_ACC_PUBLIC) - SPL_ME(Array, offsetSet, arginfo_array_offsetSet, ZEND_ACC_PUBLIC) - SPL_ME(Array, offsetUnset, arginfo_array_offsetGet, ZEND_ACC_PUBLIC) - SPL_ME(Array, append, arginfo_array_append, ZEND_ACC_PUBLIC) - SPL_ME(Array, getArrayCopy, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, count, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, getFlags, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, setFlags, arginfo_array_setFlags, ZEND_ACC_PUBLIC) - SPL_ME(Array, asort, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, ksort, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, uasort, arginfo_array_uXsort, ZEND_ACC_PUBLIC) - SPL_ME(Array, uksort, arginfo_array_uXsort, ZEND_ACC_PUBLIC) - SPL_ME(Array, natsort, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, natcasesort, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, unserialize, arginfo_array_unserialize, ZEND_ACC_PUBLIC) - SPL_ME(Array, serialize, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, __unserialize, arginfo_array_unserialize, ZEND_ACC_PUBLIC) - SPL_ME(Array, __serialize, arginfo_array_void, ZEND_ACC_PUBLIC) + SPL_ME(ArrayIterator, __construct, arginfo_class_ArrayIterator___construct, ZEND_ACC_PUBLIC) + SPL_ME(Array, offsetExists, arginfo_class_ArrayIterator_offsetExists, ZEND_ACC_PUBLIC) + SPL_ME(Array, offsetGet, arginfo_class_ArrayIterator_offsetGet, ZEND_ACC_PUBLIC) + SPL_ME(Array, offsetSet, arginfo_class_ArrayIterator_offsetSet, ZEND_ACC_PUBLIC) + SPL_ME(Array, offsetUnset, arginfo_class_ArrayIterator_offsetUnset, ZEND_ACC_PUBLIC) + SPL_ME(Array, append, arginfo_class_ArrayIterator_append, ZEND_ACC_PUBLIC) + SPL_ME(Array, getArrayCopy, arginfo_class_ArrayIterator_getArrayCopy, ZEND_ACC_PUBLIC) + SPL_ME(Array, count, arginfo_class_ArrayIterator_count, ZEND_ACC_PUBLIC) + SPL_ME(Array, getFlags, arginfo_class_ArrayIterator_getFlags, ZEND_ACC_PUBLIC) + SPL_ME(Array, setFlags, arginfo_class_ArrayIterator_setFlags, ZEND_ACC_PUBLIC) + SPL_ME(Array, asort, arginfo_class_ArrayIterator_asort, ZEND_ACC_PUBLIC) + SPL_ME(Array, ksort, arginfo_class_ArrayIterator_ksort, ZEND_ACC_PUBLIC) + SPL_ME(Array, uasort, arginfo_class_ArrayIterator_uasort, ZEND_ACC_PUBLIC) + SPL_ME(Array, uksort, arginfo_class_ArrayIterator_uksort, ZEND_ACC_PUBLIC) + SPL_ME(Array, natsort, arginfo_class_ArrayIterator_natsort, ZEND_ACC_PUBLIC) + SPL_ME(Array, natcasesort, arginfo_class_ArrayIterator_natcasesort, ZEND_ACC_PUBLIC) + SPL_ME(Array, unserialize, arginfo_class_ArrayIterator_unserialize, ZEND_ACC_PUBLIC) + SPL_ME(Array, serialize, arginfo_class_ArrayIterator_serialize, ZEND_ACC_PUBLIC) + SPL_ME(Array, __unserialize, arginfo_class_ArrayIterator___unserialize, ZEND_ACC_PUBLIC) + SPL_ME(Array, __serialize, arginfo_class_ArrayIterator___serialize, ZEND_ACC_PUBLIC) /* ArrayIterator specific */ - SPL_ME(Array, rewind, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, current, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, key, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, next, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, valid, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, seek, arginfo_array_seek, ZEND_ACC_PUBLIC) + SPL_ME(Array, rewind, arginfo_class_ArrayIterator_rewind, ZEND_ACC_PUBLIC) + SPL_ME(Array, current, arginfo_class_ArrayIterator_current, ZEND_ACC_PUBLIC) + SPL_ME(Array, key, arginfo_class_ArrayIterator_key, ZEND_ACC_PUBLIC) + SPL_ME(Array, next, arginfo_class_ArrayIterator_next, ZEND_ACC_PUBLIC) + SPL_ME(Array, valid, arginfo_class_ArrayIterator_valid, ZEND_ACC_PUBLIC) + SPL_ME(Array, seek, arginfo_class_ArrayIterator_seek, ZEND_ACC_PUBLIC) PHP_FE_END }; static const zend_function_entry spl_funcs_RecursiveArrayIterator[] = { - SPL_ME(Array, hasChildren, arginfo_array_void, ZEND_ACC_PUBLIC) - SPL_ME(Array, getChildren, arginfo_array_void, ZEND_ACC_PUBLIC) + SPL_ME(Array, hasChildren, arginfo_class_RecursiveArrayIterator_hasChildren, ZEND_ACC_PUBLIC) + SPL_ME(Array, getChildren, arginfo_class_RecursiveArrayIterator_getChildren, ZEND_ACC_PUBLIC) PHP_FE_END }; /* }}} */ diff --git a/ext/spl/spl_array.stub.php b/ext/spl/spl_array.stub.php new file mode 100755 index 0000000000..aa9996c193 --- /dev/null +++ b/ext/spl/spl_array.stub.php @@ -0,0 +1,225 @@ +<?php + +class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Countable +{ + /** @param array|object $input */ + public function __construct($input = [], int $flags = 0, string $iterator_class = ArrayIterator::class) {} + + /** + * @param mixed $index + * @return bool + */ + public function offsetExists($index) {} + + /** + * @param mixed $index + * @return mixed + */ + public function offsetGet($index) {} + + /** + * @param mixed $index + * @param mixed $value + * @return void + */ + public function offsetSet($index, $value) {} + + /** + * @param mixed $index + * @return void + */ + public function offsetUnset($index) {} + + /** + * @param mixed $value + * @return void + */ + public function append($value) {} + + /** @return array */ + public function getArrayCopy() {} + + /** @return int */ + public function count() {} + + /** @return int */ + public function getFlags() {} + + /** @return void */ + public function setFlags(int $flags) {} + + /** + * @param int $sort_flags + * @return bool + */ + public function asort($sort_flags = SORT_REGULAR) {} + + /** + * @param int $sort_flags + * @return bool + */ + public function ksort($sort_flags = SORT_REGULAR) {} + + /** + * @param callback $cmp_function + * @return bool + */ + public function uasort($cmp_function) {} + + /** + * @param callback $cmp_function + * @return bool + */ + public function uksort($cmp_function) {} + + /** @return bool */ + public function natsort() {} + + /** @return bool */ + public function natcasesort() {} + + /** @return void */ + public function unserialize(string $serialized) {} + + /** @return string */ + public function serialize() {} + + /** @return array */ + public function __serialize() {} + + /** @return void */ + public function __unserialize(array $data) {} + + /** @return Iterator */ + public function getIterator() {} + + /** + * @param array|object $input + * @return array|null + */ + public function exchangeArray($input) {} + + /** @return void */ + public function setIteratorClass(string $iteratorClass) {} + + /** @return string */ + public function getIteratorClass() {} +} + +class ArrayIterator implements SeekableIterator, ArrayAccess, Serializable, Countable +{ + /** @param array|object $array */ + public function __construct($array = [], int $flags = 0) {} + + /** + * @param mixed $index + * @return bool + */ + public function offsetExists($index) {} + + /** + * @param mixed $index + * @return mixed + */ + public function offsetGet($index) {} + + /** + * @param mixed $index + * @param mixed $value + * @return void + */ + public function offsetSet($index, $value) {} + + /** + * @param mixed $index + * @return void + */ + public function offsetUnset($index) {} + + /** + * @param mixed $value + * @return void + */ + public function append($value) {} + + /** @return array */ + public function getArrayCopy() {} + + /** @return int */ + public function count() {} + + /** @return int */ + public function getFlags() {} + + /** @return void */ + public function setFlags(int $flags) {} + + /** + * @param int $sort_flags + * @return bool + */ + public function asort($sort_flags = SORT_REGULAR) {} + + /** + * @param int $sort_flags + * @return bool + */ + public function ksort($sort_flags = SORT_REGULAR) {} + + /** + * @param callback $cmp_function + * @return bool + */ + public function uasort($cmp_function) {} + + /** + * @param callback $cmp_function + * @return bool + */ + public function uksort($cmp_function) {} + + /** @return bool */ + public function natsort() {} + + /** @return bool */ + public function natcasesort() {} + + /** @return void */ + public function unserialize(string $serialized) {} + + /** @return string */ + public function serialize() {} + + /** @return array */ + public function __serialize() {} + + /** @return void */ + public function __unserialize(array $data) {} + + /** @return void */ + public function rewind() {} + + /** @return mixed */ + public function current() {} + + /** @return mixed */ + public function key() {} + + /** @return void */ + public function next() {} + + /** @return bool */ + public function valid() {} + + /** @return void */ + public function seek(int $position) {} +} + +class RecursiveArrayIterator extends ArrayIterator implements RecursiveIterator +{ + /** @return bool */ + public function hasChildren() {} + + /** @return RecursiveArrayIterator|null */ + public function getChildren() {} +} diff --git a/ext/spl/spl_array_arginfo.h b/ext/spl/spl_array_arginfo.h new file mode 100644 index 0000000000..57cc430ca7 --- /dev/null +++ b/ext/spl/spl_array_arginfo.h @@ -0,0 +1,136 @@ +/* This is a generated file, edit the .stub.php file instead. */ + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject___construct, 0, 0, 0) + ZEND_ARG_INFO(0, input) + ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, iterator_class, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_offsetExists, 0, 0, 1) + ZEND_ARG_INFO(0, index) +ZEND_END_ARG_INFO() + +#define arginfo_class_ArrayObject_offsetGet arginfo_class_ArrayObject_offsetExists + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_offsetSet, 0, 0, 2) + ZEND_ARG_INFO(0, index) + ZEND_ARG_INFO(0, value) +ZEND_END_ARG_INFO() + +#define arginfo_class_ArrayObject_offsetUnset arginfo_class_ArrayObject_offsetExists + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_append, 0, 0, 1) + ZEND_ARG_INFO(0, value) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_getArrayCopy, 0, 0, 0) +ZEND_END_ARG_INFO() + +#define arginfo_class_ArrayObject_count arginfo_class_ArrayObject_getArrayCopy + +#define arginfo_class_ArrayObject_getFlags arginfo_class_ArrayObject_getArrayCopy + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_setFlags, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_asort, 0, 0, 0) + ZEND_ARG_INFO(0, sort_flags) +ZEND_END_ARG_INFO() + +#define arginfo_class_ArrayObject_ksort arginfo_class_ArrayObject_asort + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_uasort, 0, 0, 1) + ZEND_ARG_INFO(0, cmp_function) +ZEND_END_ARG_INFO() + +#define arginfo_class_ArrayObject_uksort arginfo_class_ArrayObject_uasort + +#define arginfo_class_ArrayObject_natsort arginfo_class_ArrayObject_getArrayCopy + +#define arginfo_class_ArrayObject_natcasesort arginfo_class_ArrayObject_getArrayCopy + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_unserialize, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, serialized, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#define arginfo_class_ArrayObject_serialize arginfo_class_ArrayObject_getArrayCopy + +#define arginfo_class_ArrayObject___serialize arginfo_class_ArrayObject_getArrayCopy + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject___unserialize, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, data, IS_ARRAY, 0) +ZEND_END_ARG_INFO() + +#define arginfo_class_ArrayObject_getIterator arginfo_class_ArrayObject_getArrayCopy + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_exchangeArray, 0, 0, 1) + ZEND_ARG_INFO(0, input) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_setIteratorClass, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, iteratorClass, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#define arginfo_class_ArrayObject_getIteratorClass arginfo_class_ArrayObject_getArrayCopy + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayIterator___construct, 0, 0, 0) + ZEND_ARG_INFO(0, array) + ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0) +ZEND_END_ARG_INFO() + +#define arginfo_class_ArrayIterator_offsetExists arginfo_class_ArrayObject_offsetExists + +#define arginfo_class_ArrayIterator_offsetGet arginfo_class_ArrayObject_offsetExists + +#define arginfo_class_ArrayIterator_offsetSet arginfo_class_ArrayObject_offsetSet + +#define arginfo_class_ArrayIterator_offsetUnset arginfo_class_ArrayObject_offsetExists + +#define arginfo_class_ArrayIterator_append arginfo_class_ArrayObject_append + +#define arginfo_class_ArrayIterator_getArrayCopy arginfo_class_ArrayObject_getArrayCopy + +#define arginfo_class_ArrayIterator_count arginfo_class_ArrayObject_getArrayCopy + +#define arginfo_class_ArrayIterator_getFlags arginfo_class_ArrayObject_getArrayCopy + +#define arginfo_class_ArrayIterator_setFlags arginfo_class_ArrayObject_setFlags + +#define arginfo_class_ArrayIterator_asort arginfo_class_ArrayObject_asort + +#define arginfo_class_ArrayIterator_ksort arginfo_class_ArrayObject_asort + +#define arginfo_class_ArrayIterator_uasort arginfo_class_ArrayObject_uasort + +#define arginfo_class_ArrayIterator_uksort arginfo_class_ArrayObject_uasort + +#define arginfo_class_ArrayIterator_natsort arginfo_class_ArrayObject_getArrayCopy + +#define arginfo_class_ArrayIterator_natcasesort arginfo_class_ArrayObject_getArrayCopy + +#define arginfo_class_ArrayIterator_unserialize arginfo_class_ArrayObject_unserialize + +#define arginfo_class_ArrayIterator_serialize arginfo_class_ArrayObject_getArrayCopy + +#define arginfo_class_ArrayIterator___serialize arginfo_class_ArrayObject_getArrayCopy + +#define arginfo_class_ArrayIterator___unserialize arginfo_class_ArrayObject___unserialize + +#define arginfo_class_ArrayIterator_rewind arginfo_class_ArrayObject_getArrayCopy + +#define arginfo_class_ArrayIterator_current arginfo_class_ArrayObject_getArrayCopy + +#define arginfo_class_ArrayIterator_key arginfo_class_ArrayObject_getArrayCopy + +#define arginfo_class_ArrayIterator_next arginfo_class_ArrayObject_getArrayCopy + +#define arginfo_class_ArrayIterator_valid arginfo_class_ArrayObject_getArrayCopy + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayIterator_seek, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, position, IS_LONG, 0) +ZEND_END_ARG_INFO() + +#define arginfo_class_RecursiveArrayIterator_hasChildren arginfo_class_ArrayObject_getArrayCopy + +#define arginfo_class_RecursiveArrayIterator_getChildren arginfo_class_ArrayObject_getArrayCopy diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c index b423774d8e..099398de6a 100644 --- a/ext/spl/spl_fixedarray.c +++ b/ext/spl/spl_fixedarray.c @@ -25,6 +25,7 @@ #include "zend_exceptions.h" #include "php_spl.h" +#include "spl_fixedarray_arginfo.h" #include "spl_functions.h" #include "spl_engine.h" #include "spl_fixedarray.h" @@ -1000,48 +1001,23 @@ zend_object_iterator *spl_fixedarray_get_iterator(zend_class_entry *ce, zval *ob } /* }}} */ -ZEND_BEGIN_ARG_INFO_EX(arginfo_splfixedarray_construct, 0, 0, 0) - ZEND_ARG_INFO(0, size) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_fixedarray_offsetGet, 0, 0, 1) - ZEND_ARG_INFO(0, index) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_fixedarray_offsetSet, 0, 0, 2) - ZEND_ARG_INFO(0, index) - ZEND_ARG_INFO(0, newval) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_fixedarray_setSize, 0) - ZEND_ARG_INFO(0, value) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_fixedarray_fromArray, 0, 0, 1) - ZEND_ARG_INFO(0, array) - ZEND_ARG_INFO(0, save_indexes) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_splfixedarray_void, 0) -ZEND_END_ARG_INFO() - static const zend_function_entry spl_funcs_SplFixedArray[] = { /* {{{ */ - SPL_ME(SplFixedArray, __construct, arginfo_splfixedarray_construct,ZEND_ACC_PUBLIC) - SPL_ME(SplFixedArray, __wakeup, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC) - SPL_ME(SplFixedArray, count, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC) - SPL_ME(SplFixedArray, toArray, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC) - SPL_ME(SplFixedArray, fromArray, arginfo_fixedarray_fromArray, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) - SPL_ME(SplFixedArray, getSize, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC) - SPL_ME(SplFixedArray, setSize, arginfo_fixedarray_setSize, ZEND_ACC_PUBLIC) - SPL_ME(SplFixedArray, offsetExists, arginfo_fixedarray_offsetGet, ZEND_ACC_PUBLIC) - SPL_ME(SplFixedArray, offsetGet, arginfo_fixedarray_offsetGet, ZEND_ACC_PUBLIC) - SPL_ME(SplFixedArray, offsetSet, arginfo_fixedarray_offsetSet, ZEND_ACC_PUBLIC) - SPL_ME(SplFixedArray, offsetUnset, arginfo_fixedarray_offsetGet, ZEND_ACC_PUBLIC) - SPL_ME(SplFixedArray, rewind, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC) - SPL_ME(SplFixedArray, current, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC) - SPL_ME(SplFixedArray, key, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC) - SPL_ME(SplFixedArray, next, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC) - SPL_ME(SplFixedArray, valid, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC) + SPL_ME(SplFixedArray, __construct, arginfo_class_SplFixedArray___construct, ZEND_ACC_PUBLIC) + SPL_ME(SplFixedArray, __wakeup, arginfo_class_SplFixedArray___wakeup, ZEND_ACC_PUBLIC) + SPL_ME(SplFixedArray, count, arginfo_class_SplFixedArray_count, ZEND_ACC_PUBLIC) + SPL_ME(SplFixedArray, toArray, arginfo_class_SplFixedArray_toArray, ZEND_ACC_PUBLIC) + SPL_ME(SplFixedArray, fromArray, arginfo_class_SplFixedArray_fromArray, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) + SPL_ME(SplFixedArray, getSize, arginfo_class_SplFixedArray_getSize, ZEND_ACC_PUBLIC) + SPL_ME(SplFixedArray, setSize, arginfo_class_SplFixedArray_setSize, ZEND_ACC_PUBLIC) + SPL_ME(SplFixedArray, offsetExists, arginfo_class_SplFixedArray_offsetExists, ZEND_ACC_PUBLIC) + SPL_ME(SplFixedArray, offsetGet, arginfo_class_SplFixedArray_offsetGet, ZEND_ACC_PUBLIC) + SPL_ME(SplFixedArray, offsetSet, arginfo_class_SplFixedArray_offsetSet, ZEND_ACC_PUBLIC) + SPL_ME(SplFixedArray, offsetUnset, arginfo_class_SplFixedArray_offsetUnset, ZEND_ACC_PUBLIC) + SPL_ME(SplFixedArray, rewind, arginfo_class_SplFixedArray_rewind, ZEND_ACC_PUBLIC) + SPL_ME(SplFixedArray, current, arginfo_class_SplFixedArray_current, ZEND_ACC_PUBLIC) + SPL_ME(SplFixedArray, key, arginfo_class_SplFixedArray_key, ZEND_ACC_PUBLIC) + SPL_ME(SplFixedArray, next, arginfo_class_SplFixedArray_next, ZEND_ACC_PUBLIC) + SPL_ME(SplFixedArray, valid, arginfo_class_SplFixedArray_valid, ZEND_ACC_PUBLIC) PHP_FE_END }; /* }}} */ diff --git a/ext/spl/spl_fixedarray.stub.php b/ext/spl/spl_fixedarray.stub.php new file mode 100755 index 0000000000..4785f8d6e1 --- /dev/null +++ b/ext/spl/spl_fixedarray.stub.php @@ -0,0 +1,64 @@ +<?php + +class SplFixedArray implements Iterator, ArrayAccess, Countable +{ + public function __construct(int $size = 0) {} + + /** @return void */ + public function __wakeup() {} + + /** @return int */ + public function count() {} + + /** @return array */ + public function toArray() {} + + /** @return SplFixedArray */ + public static function fromArray(array $array, bool $save_indexes = true) {} + + /** @return int */ + public function getSize() {} + + /** @return bool */ + public function setSize(int $size) {} + + /** + * @param mixed $index + * @return bool + */ + public function offsetExists($index) {} + + /** + * @param mixed $index + * @return mixed + */ + public function offsetGet($index) {} + + /** + * @param mixed $index + * @param mixed $value + * @return void + */ + public function offsetSet($index, $value) {} + + /** + * @param int $index + * @return void + */ + public function offsetUnset($index) {} + + /** @return void */ + public function rewind() {} + + /** @return mixed */ + public function current() {} + + /** @return int */ + public function key() {} + + /** @return void */ + public function next() {} + + /** @return bool */ + public function valid() {} +} diff --git a/ext/spl/spl_fixedarray_arginfo.h b/ext/spl/spl_fixedarray_arginfo.h new file mode 100644 index 0000000000..d25d2313bc --- /dev/null +++ b/ext/spl/spl_fixedarray_arginfo.h @@ -0,0 +1,46 @@ +/* This is a generated file, edit the .stub.php file instead. */ + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFixedArray___construct, 0, 0, 0) + ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFixedArray___wakeup, 0, 0, 0) +ZEND_END_ARG_INFO() + +#define arginfo_class_SplFixedArray_count arginfo_class_SplFixedArray___wakeup + +#define arginfo_class_SplFixedArray_toArray arginfo_class_SplFixedArray___wakeup + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFixedArray_fromArray, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, save_indexes, _IS_BOOL, 0) +ZEND_END_ARG_INFO() + +#define arginfo_class_SplFixedArray_getSize arginfo_class_SplFixedArray___wakeup + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFixedArray_setSize, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFixedArray_offsetExists, 0, 0, 1) + ZEND_ARG_INFO(0, index) +ZEND_END_ARG_INFO() + +#define arginfo_class_SplFixedArray_offsetGet arginfo_class_SplFixedArray_offsetExists + +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFixedArray_offsetSet, 0, 0, 2) + ZEND_ARG_INFO(0, index) + ZEND_ARG_INFO(0, value) +ZEND_END_ARG_INFO() + +#define arginfo_class_SplFixedArray_offsetUnset arginfo_class_SplFixedArray_offsetExists + +#define arginfo_class_SplFixedArray_rewind arginfo_class_SplFixedArray___wakeup + +#define arginfo_class_SplFixedArray_current arginfo_class_SplFixedArray___wakeup + +#define arginfo_class_SplFixedArray_key arginfo_class_SplFixedArray___wakeup + +#define arginfo_class_SplFixedArray_next arginfo_class_SplFixedArray___wakeup + +#define arginfo_class_SplFixedArray_valid arginfo_class_SplFixedArray___wakeup diff --git a/ext/spl/tests/bug71412.phpt b/ext/spl/tests/bug71412.phpt index 7857f27ace..ac4b0e701a 100644 --- a/ext/spl/tests/bug71412.phpt +++ b/ext/spl/tests/bug71412.phpt @@ -9,6 +9,6 @@ Method [ <internal:SPL, ctor> public method __construct ] { - Parameters [2] { Parameter #0 [ <optional> $array ] - Parameter #1 [ <optional> $flags ] + Parameter #1 [ <optional> int $flags ] } } |