]> granicus.if.org Git - php/commitdiff
Add some stubs for SPL
authorMáté Kocsis <kocsismate@woohoolabs.com>
Fri, 6 Mar 2020 09:01:10 +0000 (10:01 +0100)
committerMáté Kocsis <kocsismate@woohoolabs.com>
Tue, 10 Mar 2020 10:41:48 +0000 (11:41 +0100)
Closes GH-5245

ext/spl/php_spl.stub.php
ext/spl/spl_array.c
ext/spl/spl_array.stub.php [new file with mode: 0755]
ext/spl/spl_array_arginfo.h [new file with mode: 0644]
ext/spl/spl_fixedarray.c
ext/spl/spl_fixedarray.stub.php [new file with mode: 0755]
ext/spl/spl_fixedarray_arginfo.h [new file with mode: 0644]
ext/spl/tests/bug71412.phpt

index 8bf6e79c743e7551bacc612c6818a73723c7dc91..b9c5335b70f4c1e20c2ea3373335bab43ccf5e2b 100755 (executable)
@@ -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 {}
index bc1713ee849d33e7d98d3b4a648ff117ae6fa31d..434dfc634f9cdc06609099e4d92ed905e88811cd 100644 (file)
@@ -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 (executable)
index 0000000..aa9996c
--- /dev/null
@@ -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 (file)
index 0000000..57cc430
--- /dev/null
@@ -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
index b423774d8e021320cddee1b85c77690e0ac880ef..099398de6a58a725aba74cebbb8d7c535e6f1c9e 100644 (file)
@@ -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 (executable)
index 0000000..4785f8d
--- /dev/null
@@ -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 (file)
index 0000000..d25d231
--- /dev/null
@@ -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
index 7857f27ace0bc57906e90db5387ac4f96b03dd64..ac4b0e701af459bc743a031489702807c6f843f2 100644 (file)
@@ -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 ]
   }
 }