]> granicus.if.org Git - php/commitdiff
Add stubs for SplHeap and SplPriorityQueue
authorMáté Kocsis <kocsismate@woohoolabs.com>
Sat, 14 Mar 2020 18:26:20 +0000 (19:26 +0100)
committerMáté Kocsis <kocsismate@woohoolabs.com>
Mon, 16 Mar 2020 11:04:56 +0000 (12:04 +0100)
Closes GH-5266

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

index d7df5bd5e53f8cf4ad414ab1383b26984372e753..6f756507b6f9c1cc07fed98b5eecd27e662ba12d 100644 (file)
@@ -26,6 +26,7 @@
 #include "spl_engine.h"
 #include "spl_iterators.h"
 #include "spl_heap.h"
+#include "spl_heap_arginfo.h"
 #include "spl_exceptions.h"
 
 #define PTR_HEAP_BLOCK_SIZE 64
@@ -1125,69 +1126,48 @@ zend_object_iterator *spl_pqueue_get_iterator(zend_class_entry *ce, zval *object
 }
 /* }}} */
 
-ZEND_BEGIN_ARG_INFO(arginfo_heap_insert, 0)
-       ZEND_ARG_INFO(0, value)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_heap_compare, 0)
-       ZEND_ARG_INFO(0, value1)
-       ZEND_ARG_INFO(0, value2)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_pqueue_insert, 0)
-       ZEND_ARG_INFO(0, value)
-       ZEND_ARG_INFO(0, priority)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_pqueue_setflags, 0)
-       ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_splheap_void, 0)
-ZEND_END_ARG_INFO()
-
 static const zend_function_entry spl_funcs_SplMinHeap[] = {
-       SPL_ME(SplMinHeap, compare, arginfo_heap_compare, ZEND_ACC_PROTECTED)
+       SPL_ME(SplMinHeap, compare, arginfo_class_SplMinHeap_compare, ZEND_ACC_PROTECTED)
        PHP_FE_END
 };
 static const zend_function_entry spl_funcs_SplMaxHeap[] = {
-       SPL_ME(SplMaxHeap, compare, arginfo_heap_compare, ZEND_ACC_PROTECTED)
+       SPL_ME(SplMaxHeap, compare, arginfo_class_SplMaxHeap_compare, ZEND_ACC_PROTECTED)
        PHP_FE_END
 };
 
 static const zend_function_entry spl_funcs_SplPriorityQueue[] = {
-       SPL_ME(SplPriorityQueue, compare,               arginfo_heap_compare,    ZEND_ACC_PUBLIC)
-       SPL_ME(SplPriorityQueue, insert,                arginfo_pqueue_insert,   ZEND_ACC_PUBLIC)
-       SPL_ME(SplPriorityQueue, setExtractFlags,       arginfo_pqueue_setflags, ZEND_ACC_PUBLIC)
-       SPL_ME(SplPriorityQueue, getExtractFlags,       arginfo_splheap_void,    ZEND_ACC_PUBLIC)
-       SPL_ME(SplPriorityQueue, top,                   arginfo_splheap_void,    ZEND_ACC_PUBLIC)
-       SPL_ME(SplPriorityQueue, extract,               arginfo_splheap_void,    ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap,          count,                 arginfo_splheap_void,    ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap,          isEmpty,               arginfo_splheap_void,    ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap,          rewind,                arginfo_splheap_void,    ZEND_ACC_PUBLIC)
-       SPL_ME(SplPriorityQueue, current,               arginfo_splheap_void,    ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap,          key,                   arginfo_splheap_void,    ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap,          next,                  arginfo_splheap_void,    ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap,          valid,                 arginfo_splheap_void,    ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap,          recoverFromCorruption, arginfo_splheap_void,    ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap,          isCorrupted,           arginfo_splheap_void,    ZEND_ACC_PUBLIC)
+       SPL_ME(SplPriorityQueue, compare,               arginfo_class_SplPriorityQueue_compare,                 ZEND_ACC_PUBLIC)
+       SPL_ME(SplPriorityQueue, insert,                arginfo_class_SplPriorityQueue_insert,                  ZEND_ACC_PUBLIC)
+       SPL_ME(SplPriorityQueue, setExtractFlags,       arginfo_class_SplPriorityQueue_setExtractFlags, ZEND_ACC_PUBLIC)
+       SPL_ME(SplPriorityQueue, getExtractFlags,       arginfo_class_SplPriorityQueue_getExtractFlags, ZEND_ACC_PUBLIC)
+       SPL_ME(SplPriorityQueue, top,                   arginfo_class_SplPriorityQueue_top,                             ZEND_ACC_PUBLIC)
+       SPL_ME(SplPriorityQueue, extract,               arginfo_class_SplPriorityQueue_extract,                 ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap,          count,                 arginfo_class_SplPriorityQueue_count,                   ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap,          isEmpty,               arginfo_class_SplPriorityQueue_isEmpty,                 ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap,          rewind,                arginfo_class_SplPriorityQueue_rewind,                  ZEND_ACC_PUBLIC)
+       SPL_ME(SplPriorityQueue, current,               arginfo_class_SplPriorityQueue_current,                 ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap,          key,                   arginfo_class_SplPriorityQueue_key,                             ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap,          next,                  arginfo_class_SplPriorityQueue_next,                    ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap,          valid,                 arginfo_class_SplPriorityQueue_valid,                   ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap,          recoverFromCorruption, arginfo_class_SplPriorityQueue_recoverFromCorruption, ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap,          isCorrupted,           arginfo_class_SplPriorityQueue_isCorrupted,             ZEND_ACC_PUBLIC)
        PHP_FE_END
 };
 
 static const zend_function_entry spl_funcs_SplHeap[] = {
-       SPL_ME(SplHeap, extract,               arginfo_splheap_void, ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap, insert,                arginfo_heap_insert, ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap, top,                   arginfo_splheap_void, ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap, count,                 arginfo_splheap_void, ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap, isEmpty,               arginfo_splheap_void, ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap, rewind,                arginfo_splheap_void, ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap, current,               arginfo_splheap_void, ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap, key,                   arginfo_splheap_void, ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap, next,                  arginfo_splheap_void, ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap, valid,                 arginfo_splheap_void, ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap, recoverFromCorruption, arginfo_splheap_void, ZEND_ACC_PUBLIC)
-       SPL_ME(SplHeap, isCorrupted,           arginfo_splheap_void, ZEND_ACC_PUBLIC)
-       ZEND_FENTRY(compare, NULL, arginfo_heap_compare, ZEND_ACC_PROTECTED|ZEND_ACC_ABSTRACT)
+       SPL_ME(SplHeap, extract,               arginfo_class_SplHeap_extract,                           ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap, insert,                arginfo_class_SplHeap_insert,                            ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap, top,                   arginfo_class_SplHeap_top,                                       ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap, count,                 arginfo_class_SplHeap_count,                                     ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap, isEmpty,               arginfo_class_SplHeap_isEmpty,                           ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap, rewind,                arginfo_class_SplHeap_rewind,                            ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap, current,               arginfo_class_SplHeap_current,                           ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap, key,                   arginfo_class_SplHeap_key,                                       ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap, next,                  arginfo_class_SplHeap_next,                                      ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap, valid,                 arginfo_class_SplHeap_valid,                                     ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap, recoverFromCorruption, arginfo_class_SplHeap_recoverFromCorruption, ZEND_ACC_PUBLIC)
+       SPL_ME(SplHeap, isCorrupted,           arginfo_class_SplHeap_isCorrupted,                       ZEND_ACC_PUBLIC)
+       ZEND_FENTRY(compare, NULL, arginfo_class_SplHeap_compare, ZEND_ACC_PROTECTED|ZEND_ACC_ABSTRACT)
        PHP_FE_END
 };
 /* }}} */
diff --git a/ext/spl/spl_heap.stub.php b/ext/spl/spl_heap.stub.php
new file mode 100644 (file)
index 0000000..d86894e
--- /dev/null
@@ -0,0 +1,126 @@
+<?php
+
+class SplPriorityQueue implements Iterator, Countable
+{
+    /**
+     * @param mixed $priority1
+     * @param mixed $priority2
+     * @return int
+     */
+    public function compare($priority1, $priority2) {}
+
+    /**
+     * @param mixed $value
+     * @param mixed $priority
+     * @return bool
+     */
+    public function insert($value, $priority) {}
+
+    /** @return int */
+    public function setExtractFlags(int $flags) {}
+
+    /** @return mixed */
+    public function top() {}
+
+    /** @return mixed */
+    public function extract() {}
+
+    /** @return int */
+    public function count() {}
+
+    /** @return bool */
+    public function isEmpty() {}
+
+    /** @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() {}
+
+    /** @return bool */
+    public function recoverFromCorruption() {}
+
+    /** @return bool */
+    public function isCorrupted() {}
+
+    /** @return int */
+    public function getExtractFlags() {}
+}
+
+abstract class SplHeap implements Iterator, Countable
+{
+    /** @return mixed */
+    public function extract() {}
+
+    /**
+     * @param mixed $value
+     * @return bool
+     */
+    public function insert($value) {}
+
+    /** @return mixed */
+    public function top() {}
+
+    /** @return int */
+    public function count() {}
+
+    /** @return bool */
+    public function isEmpty() {}
+
+    /** @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() {}
+
+    /** @return bool */
+    public function recoverFromCorruption() {}
+
+    /**
+     * @param mixed $value1
+     * @param mixed $value2
+     * @return int
+     */
+    abstract protected function compare($value1, $value2);
+
+    /** @return bool */
+    public function isCorrupted() {}
+}
+
+class SplMinHeap extends SplHeap
+{
+    /**
+     * @param mixed $value1
+     * @param mixed $value2
+     * @return int
+     */
+    protected function compare($value1, $value2) {}
+}
+
+class SplMaxHeap extends SplHeap
+{
+    /**
+     * @param mixed $value1
+     * @param mixed $value2
+     * @return int
+     */
+    protected function compare($value1, $value2) {}
+}
diff --git a/ext/spl/spl_heap_arginfo.h b/ext/spl/spl_heap_arginfo.h
new file mode 100644 (file)
index 0000000..574b7eb
--- /dev/null
@@ -0,0 +1,75 @@
+/* This is a generated file, edit the .stub.php file instead. */
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplPriorityQueue_compare, 0, 0, 2)
+       ZEND_ARG_INFO(0, priority1)
+       ZEND_ARG_INFO(0, priority2)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplPriorityQueue_insert, 0, 0, 2)
+       ZEND_ARG_INFO(0, value)
+       ZEND_ARG_INFO(0, priority)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplPriorityQueue_setExtractFlags, 0, 0, 1)
+       ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplPriorityQueue_top, 0, 0, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplPriorityQueue_extract arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_count arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_isEmpty arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_rewind arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_current arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_key arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_next arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_valid arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_recoverFromCorruption arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_isCorrupted arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_getExtractFlags arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_extract arginfo_class_SplPriorityQueue_top
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplHeap_insert, 0, 0, 1)
+       ZEND_ARG_INFO(0, value)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplHeap_top arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_count arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_isEmpty arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_rewind arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_current arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_key arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_next arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_valid arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_recoverFromCorruption arginfo_class_SplPriorityQueue_top
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplHeap_compare, 0, 0, 2)
+       ZEND_ARG_INFO(0, value1)
+       ZEND_ARG_INFO(0, value2)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplHeap_isCorrupted arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplMinHeap_compare arginfo_class_SplHeap_compare
+
+#define arginfo_class_SplMaxHeap_compare arginfo_class_SplHeap_compare