]> granicus.if.org Git - php/commitdiff
Add stubs for SplObjectStorage and MultipleIterator
authorMáté Kocsis <kocsismate@woohoolabs.com>
Sat, 14 Mar 2020 19:16:19 +0000 (20:16 +0100)
committerMáté Kocsis <kocsismate@woohoolabs.com>
Mon, 16 Mar 2020 11:05:23 +0000 (12:05 +0100)
Closes GH-5267

ext/spl/spl_observer.c
ext/spl/spl_observer.stub.php [new file with mode: 0644]
ext/spl/spl_observer_arginfo.h [new file with mode: 0644]

index 2e08645d312b1eec5fdd60d375f67eae25ecb7e8..51dc8a4297724c1826891d6756dadf1f89672d0e 100644 (file)
@@ -32,6 +32,7 @@
 #include "spl_functions.h"
 #include "spl_engine.h"
 #include "spl_observer.h"
+#include "spl_observer_arginfo.h"
 #include "spl_iterators.h"
 #include "spl_array.h"
 #include "spl_exceptions.h"
@@ -41,30 +42,15 @@ SPL_METHOD(SplSubject, attach);
 SPL_METHOD(SplSubject, detach);
 SPL_METHOD(SplSubject, notify);
 
-ZEND_BEGIN_ARG_INFO(arginfo_SplObserver_update, 0)
-       ZEND_ARG_OBJ_INFO(0, subject, SplSubject, 0)
-ZEND_END_ARG_INFO();
-
 static const zend_function_entry spl_funcs_SplObserver[] = {
-       SPL_ABSTRACT_ME(SplObserver, update,   arginfo_SplObserver_update)
+       SPL_ABSTRACT_ME(SplObserver, update,   arginfo_class_SplObserver_update)
        PHP_FE_END
 };
 
-ZEND_BEGIN_ARG_INFO(arginfo_SplSubject_attach, 0)
-       ZEND_ARG_OBJ_INFO(0, observer, SplObserver, 0)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(arginfo_SplSubject_void, 0)
-ZEND_END_ARG_INFO();
-
-/*ZEND_BEGIN_ARG_INFO_EX(arginfo_SplSubject_notify, 0, 0, 1)
-       ZEND_ARG_OBJ_INFO(0, ignore, SplObserver, 1)
-ZEND_END_ARG_INFO();*/
-
 static const zend_function_entry spl_funcs_SplSubject[] = {
-       SPL_ABSTRACT_ME(SplSubject,  attach,   arginfo_SplSubject_attach)
-       SPL_ABSTRACT_ME(SplSubject,  detach,   arginfo_SplSubject_attach)
-       SPL_ABSTRACT_ME(SplSubject,  notify,   arginfo_SplSubject_void)
+       SPL_ABSTRACT_ME(SplSubject,  attach,   arginfo_class_SplSubject_attach)
+       SPL_ABSTRACT_ME(SplSubject,  detach,   arginfo_class_SplSubject_detach)
+       SPL_ABSTRACT_ME(SplSubject,  notify,   arginfo_class_SplSubject_notify)
        PHP_FE_END
 };
 
@@ -942,62 +928,34 @@ SPL_METHOD(SplObjectStorage, __unserialize)
        object_properties_load(&intern->std, Z_ARRVAL_P(members_zv));
 }
 
-ZEND_BEGIN_ARG_INFO(arginfo_Object, 0)
-       ZEND_ARG_INFO(0, object)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_attach, 0, 0, 1)
-       ZEND_ARG_INFO(0, object)
-       ZEND_ARG_INFO(0, data)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(arginfo_Serialized, 0)
-       ZEND_ARG_INFO(0, serialized)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(arginfo_setInfo, 0)
-       ZEND_ARG_INFO(0, info)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(arginfo_getHash, 0)
-       ZEND_ARG_INFO(0, object)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetGet, 0, 0, 1)
-       ZEND_ARG_INFO(0, object)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_splobject_void, 0)
-ZEND_END_ARG_INFO()
-
 static const zend_function_entry spl_funcs_SplObjectStorage[] = {
-       SPL_ME(SplObjectStorage,  attach,      arginfo_attach,        0)
-       SPL_ME(SplObjectStorage,  detach,      arginfo_Object,        0)
-       SPL_ME(SplObjectStorage,  contains,    arginfo_Object,        0)
-       SPL_ME(SplObjectStorage,  addAll,      arginfo_Object,        0)
-       SPL_ME(SplObjectStorage,  removeAll,   arginfo_Object,        0)
-       SPL_ME(SplObjectStorage,  removeAllExcept,   arginfo_Object,  0)
-       SPL_ME(SplObjectStorage,  getInfo,     arginfo_splobject_void,0)
-       SPL_ME(SplObjectStorage,  setInfo,     arginfo_setInfo,       0)
-       SPL_ME(SplObjectStorage,  getHash,     arginfo_getHash,       0)
+       SPL_ME(SplObjectStorage,  attach,      arginfo_class_SplObjectStorage_attach,        0)
+       SPL_ME(SplObjectStorage,  detach,      arginfo_class_SplObjectStorage_detach,        0)
+       SPL_ME(SplObjectStorage,  contains,    arginfo_class_SplObjectStorage_contains,        0)
+       SPL_ME(SplObjectStorage,  addAll,      arginfo_class_SplObjectStorage_addAll,        0)
+       SPL_ME(SplObjectStorage,  removeAll,   arginfo_class_SplObjectStorage_removeAll,        0)
+       SPL_ME(SplObjectStorage,  removeAllExcept,   arginfo_class_SplObjectStorage_removeAllExcept,  0)
+       SPL_ME(SplObjectStorage,  getInfo,     arginfo_class_SplObjectStorage_getInfo,0)
+       SPL_ME(SplObjectStorage,  setInfo,     arginfo_class_SplObjectStorage_setInfo,       0)
+       SPL_ME(SplObjectStorage,  getHash,     arginfo_class_SplObjectStorage_getHash,       0)
        /* Countable */
-       SPL_ME(SplObjectStorage,  count,       arginfo_splobject_void,0)
+       SPL_ME(SplObjectStorage,  count,       arginfo_class_SplObjectStorage_count,0)
        /* Iterator */
-       SPL_ME(SplObjectStorage,  rewind,      arginfo_splobject_void,0)
-       SPL_ME(SplObjectStorage,  valid,       arginfo_splobject_void,0)
-       SPL_ME(SplObjectStorage,  key,         arginfo_splobject_void,0)
-       SPL_ME(SplObjectStorage,  current,     arginfo_splobject_void,0)
-       SPL_ME(SplObjectStorage,  next,        arginfo_splobject_void,0)
+       SPL_ME(SplObjectStorage,  rewind,      arginfo_class_SplObjectStorage_rewind,0)
+       SPL_ME(SplObjectStorage,  valid,       arginfo_class_SplObjectStorage_valid,0)
+       SPL_ME(SplObjectStorage,  key,         arginfo_class_SplObjectStorage_key,0)
+       SPL_ME(SplObjectStorage,  current,     arginfo_class_SplObjectStorage_current,0)
+       SPL_ME(SplObjectStorage,  next,        arginfo_class_SplObjectStorage_next,0)
        /* Serializable */
-       SPL_ME(SplObjectStorage,  unserialize, arginfo_Serialized,    0)
-       SPL_ME(SplObjectStorage,  serialize,   arginfo_splobject_void,0)
-       SPL_ME(SplObjectStorage,  __unserialize, arginfo_Serialized,    0)
-       SPL_ME(SplObjectStorage,  __serialize,   arginfo_splobject_void,0)
+       SPL_ME(SplObjectStorage,  unserialize, arginfo_class_SplObjectStorage_unserialize,    0)
+       SPL_ME(SplObjectStorage,  serialize,   arginfo_class_SplObjectStorage_serialize,0)
+       SPL_ME(SplObjectStorage,  __unserialize, arginfo_class_SplObjectStorage___unserialize,    0)
+       SPL_ME(SplObjectStorage,  __serialize,   arginfo_class_SplObjectStorage___serialize,0)
        /* ArrayAccess */
-       SPL_MA(SplObjectStorage, offsetExists, SplObjectStorage, contains, arginfo_offsetGet, 0)
-       SPL_MA(SplObjectStorage, offsetSet,    SplObjectStorage, attach,   arginfo_attach, 0)
-       SPL_MA(SplObjectStorage, offsetUnset,  SplObjectStorage, detach,   arginfo_offsetGet, 0)
-       SPL_ME(SplObjectStorage, offsetGet,    arginfo_offsetGet,     0)
+       SPL_MA(SplObjectStorage, offsetExists, SplObjectStorage, contains, arginfo_class_SplObjectStorage_offsetExists, 0)
+       SPL_MA(SplObjectStorage, offsetSet,    SplObjectStorage, attach,   arginfo_class_SplObjectStorage_offsetSet, 0)
+       SPL_MA(SplObjectStorage, offsetUnset,  SplObjectStorage, detach,   arginfo_class_SplObjectStorage_offsetUnset, 0)
+       SPL_ME(SplObjectStorage, offsetGet,    arginfo_class_SplObjectStorage_offsetGet,     0)
        PHP_FE_END
 };
 
@@ -1276,41 +1234,20 @@ SPL_METHOD(MultipleIterator, key)
 }
 /* }}} */
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_MultipleIterator_attachIterator, 0, 0, 1)
-       ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
-       ZEND_ARG_INFO(0, infos)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_MultipleIterator_detachIterator, 0, 0, 1)
-       ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_MultipleIterator_containsIterator, 0, 0, 1)
-       ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_MultipleIterator_setflags, 0, 0, 1)
-       ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_MultipleIterator_construct, 0, 0, 0)
-        ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO();
-
 static const zend_function_entry spl_funcs_MultipleIterator[] = {
-       SPL_ME(MultipleIterator,  __construct,            arginfo_MultipleIterator_construct,         0)
-       SPL_ME(MultipleIterator,  getFlags,               arginfo_splobject_void,                     0)
-       SPL_ME(MultipleIterator,  setFlags,               arginfo_MultipleIterator_setflags,          0)
-       SPL_ME(MultipleIterator,  attachIterator,         arginfo_MultipleIterator_attachIterator,    0)
-       SPL_MA(MultipleIterator,  detachIterator,         SplObjectStorage, detach,   arginfo_MultipleIterator_detachIterator,   0)
-       SPL_MA(MultipleIterator,  containsIterator,       SplObjectStorage, contains, arginfo_MultipleIterator_containsIterator, 0)
-       SPL_MA(MultipleIterator,  countIterators,         SplObjectStorage, count,    arginfo_splobject_void,                    0)
+       SPL_ME(MultipleIterator,  __construct,            arginfo_class_MultipleIterator___construct,           0)
+       SPL_ME(MultipleIterator,  getFlags,               arginfo_class_MultipleIterator_getFlags,                      0)
+       SPL_ME(MultipleIterator,  setFlags,               arginfo_class_MultipleIterator_setFlags,          0)
+       SPL_ME(MultipleIterator,  attachIterator,         arginfo_class_MultipleIterator_attachIterator,    0)
+       SPL_MA(MultipleIterator,  detachIterator,         SplObjectStorage, detach,   arginfo_class_MultipleIterator_detachIterator,    0)
+       SPL_MA(MultipleIterator,  containsIterator,       SplObjectStorage, contains, arginfo_class_MultipleIterator_containsIterator,  0)
+       SPL_MA(MultipleIterator,  countIterators,         SplObjectStorage, count,    arginfo_class_MultipleIterator_countIterators,    0)
        /* Iterator */
-       SPL_ME(MultipleIterator,  rewind,                 arginfo_splobject_void,                     0)
-       SPL_ME(MultipleIterator,  valid,                  arginfo_splobject_void,                     0)
-       SPL_ME(MultipleIterator,  key,                    arginfo_splobject_void,                     0)
-       SPL_ME(MultipleIterator,  current,                arginfo_splobject_void,                     0)
-       SPL_ME(MultipleIterator,  next,                   arginfo_splobject_void,                     0)
+       SPL_ME(MultipleIterator,  rewind,                 arginfo_class_MultipleIterator_rewind,                        0)
+       SPL_ME(MultipleIterator,  valid,                  arginfo_class_MultipleIterator_valid,                         0)
+       SPL_ME(MultipleIterator,  key,                    arginfo_class_MultipleIterator_key,                           0)
+       SPL_ME(MultipleIterator,  current,                arginfo_class_MultipleIterator_current,                       0)
+       SPL_ME(MultipleIterator,  next,                   arginfo_class_MultipleIterator_next,                          0)
        PHP_FE_END
 };
 
diff --git a/ext/spl/spl_observer.stub.php b/ext/spl/spl_observer.stub.php
new file mode 100644 (file)
index 0000000..377ee71
--- /dev/null
@@ -0,0 +1,152 @@
+<?php
+
+interface SplObserver
+{
+    /** @return void */
+    public function update(SplSubject $subject);
+}
+
+interface SplSubject
+{
+    /** @return void */
+    public function attach(SplObserver $observer);
+
+    /** @return void */
+    public function detach(SplObserver $observer);
+
+    /** @return void */
+    public function notify();
+}
+
+class SplObjectStorage implements Countable, Iterator, Serializable, ArrayAccess
+{
+    /**
+     * @param mixed $info
+     * @return void
+     */
+    public function attach(object $object, $info = null) {}
+
+    /** @return void */
+    public function detach(object $object) {}
+
+    /** @return bool */
+    public function contains(object $object) {}
+
+    /** @return int */
+    public function addAll(SplObjectStorage $storage) {}
+
+    /** @return void */
+    public function removeAll(SplObjectStorage $storage) {}
+
+    /** @return void */
+    public function removeAllExcept(SplObjectStorage $storage) {}
+
+    /** @return mixed */
+    public function getInfo() {}
+
+    /**
+     * @param mixed $info
+     * @return void
+     */
+    public function setInfo($info) {}
+
+    /** @return int */
+    public function count(int $mode = COUNT_NORMAL) {}
+
+    /** @return void */
+    public function rewind() {}
+
+    /** @return bool */
+    public function valid() {}
+
+    /** @return int */
+    public function key() {}
+
+    /** @return object */
+    public function current() {}
+
+    /** @return void */
+    public function next() {}
+
+    /** @return void */
+    public function unserialize(string $serialized) {}
+
+    /** @return string|null */
+    public function serialize() {}
+
+    /**
+     * @param object $object
+     * @return bool
+     */
+    public function offsetExists($object) {}
+
+    /**
+     * @param object $object
+     * @return string
+     */
+    public function offsetGet($object) {}
+
+    /**
+     * @param object $object
+     * @param mixed $info
+     * @return void
+     */
+    public function offsetSet($object, $info = null) {}
+
+    /**
+     * @param object $object
+     * @return void
+     */
+    public function offsetUnset($object) {}
+
+    /** @return string */
+    public function getHash(object $object) {}
+
+    /** @return array */
+    public function __serialize() {}
+
+    /** @return void */
+    public function __unserialize(array $data) {}
+}
+
+class MultipleIterator implements Iterator
+{
+    public function __construct(int $flags = MultipleIterator::MIT_NEED_ALL|MultipleIterator::MIT_KEYS_NUMERIC) {}
+
+    /** @return int */
+    public function getFlags() {}
+
+    /** @return void */
+    public function setFlags(int $flags) {}
+
+    /**
+    * @param Iterator $iterator
+    * @param int|string|null $info
+    * @return void
+    */
+    public function attachIterator(Iterator $iterator, $info = null) {}
+
+    /** @return void */
+    public function detachIterator(object $iterator) {}
+
+    /** @return bool */
+    public function containsIterator(object $iterator) {}
+
+    /** @return int */
+    public function countIterators() {}
+
+    /** @return void */
+    public function rewind() {}
+
+    /** @return bool */
+    public function valid() {}
+
+    /** @return array */
+    public function key() {}
+
+    /** @return array */
+    public function current() {}
+
+    /** @return void */
+    public function next() {}
+}
diff --git a/ext/spl/spl_observer_arginfo.h b/ext/spl/spl_observer_arginfo.h
new file mode 100644 (file)
index 0000000..f470b0a
--- /dev/null
@@ -0,0 +1,113 @@
+/* This is a generated file, edit the .stub.php file instead. */
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObserver_update, 0, 0, 1)
+       ZEND_ARG_OBJ_INFO(0, subject, SplSubject, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplSubject_attach, 0, 0, 1)
+       ZEND_ARG_OBJ_INFO(0, observer, SplObserver, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplSubject_detach arginfo_class_SplSubject_attach
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplSubject_notify, 0, 0, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_attach, 0, 0, 1)
+       ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0)
+       ZEND_ARG_INFO(0, info)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_detach, 0, 0, 1)
+       ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplObjectStorage_contains arginfo_class_SplObjectStorage_detach
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_addAll, 0, 0, 1)
+       ZEND_ARG_OBJ_INFO(0, storage, SplObjectStorage, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplObjectStorage_removeAll arginfo_class_SplObjectStorage_addAll
+
+#define arginfo_class_SplObjectStorage_removeAllExcept arginfo_class_SplObjectStorage_addAll
+
+#define arginfo_class_SplObjectStorage_getInfo arginfo_class_SplSubject_notify
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_setInfo, 0, 0, 1)
+       ZEND_ARG_INFO(0, info)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_count, 0, 0, 0)
+       ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplObjectStorage_rewind arginfo_class_SplSubject_notify
+
+#define arginfo_class_SplObjectStorage_valid arginfo_class_SplSubject_notify
+
+#define arginfo_class_SplObjectStorage_key arginfo_class_SplSubject_notify
+
+#define arginfo_class_SplObjectStorage_current arginfo_class_SplSubject_notify
+
+#define arginfo_class_SplObjectStorage_next arginfo_class_SplSubject_notify
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_unserialize, 0, 0, 1)
+       ZEND_ARG_TYPE_INFO(0, serialized, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplObjectStorage_serialize arginfo_class_SplSubject_notify
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_offsetExists, 0, 0, 1)
+       ZEND_ARG_INFO(0, object)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplObjectStorage_offsetGet arginfo_class_SplObjectStorage_offsetExists
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_offsetSet, 0, 0, 1)
+       ZEND_ARG_INFO(0, object)
+       ZEND_ARG_INFO(0, info)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplObjectStorage_offsetUnset arginfo_class_SplObjectStorage_offsetExists
+
+#define arginfo_class_SplObjectStorage_getHash arginfo_class_SplObjectStorage_detach
+
+#define arginfo_class_SplObjectStorage___serialize arginfo_class_SplSubject_notify
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage___unserialize, 0, 0, 1)
+       ZEND_ARG_TYPE_INFO(0, data, IS_ARRAY, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MultipleIterator___construct, 0, 0, 0)
+       ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_MultipleIterator_getFlags arginfo_class_SplSubject_notify
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MultipleIterator_setFlags, 0, 0, 1)
+       ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MultipleIterator_attachIterator, 0, 0, 1)
+       ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
+       ZEND_ARG_INFO(0, info)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MultipleIterator_detachIterator, 0, 0, 1)
+       ZEND_ARG_TYPE_INFO(0, iterator, IS_OBJECT, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_MultipleIterator_containsIterator arginfo_class_MultipleIterator_detachIterator
+
+#define arginfo_class_MultipleIterator_countIterators arginfo_class_SplSubject_notify
+
+#define arginfo_class_MultipleIterator_rewind arginfo_class_SplSubject_notify
+
+#define arginfo_class_MultipleIterator_valid arginfo_class_SplSubject_notify
+
+#define arginfo_class_MultipleIterator_key arginfo_class_SplSubject_notify
+
+#define arginfo_class_MultipleIterator_current arginfo_class_SplSubject_notify
+
+#define arginfo_class_MultipleIterator_next arginfo_class_SplSubject_notify