Skip to content

Commit d2b902f

Browse files
committed
Add some stubs for SPL
Closes phpGH-5245
1 parent 9d0eccd commit d2b902f

File tree

8 files changed

+550
-158
lines changed

8 files changed

+550
-158
lines changed

ext/spl/php_spl.stub.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
<?php
22

3-
/* ext/spl/php_spl.c */
4-
53
function class_implements($what, bool $autoload = true): array|false {}
64

75
function class_parents($instance, bool $autoload = true): array|false {}
@@ -27,7 +25,6 @@ function spl_object_hash(object $obj): string {}
2725

2826
function spl_object_id(object $obj): int {}
2927

30-
/* ext/spl/spl_iterators.c */
3128
function iterator_apply(Traversable $iterator, callable $function, ?array $args = null): int {}
3229

3330
function iterator_count(Traversable $iterator): int {}

ext/spl/spl_array.c

Lines changed: 61 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "zend_exceptions.h"
2828

2929
#include "php_spl.h"
30+
#include "spl_array_arginfo.h"
3031
#include "spl_functions.h"
3132
#include "spl_engine.h"
3233
#include "spl_iterators.h"
@@ -780,6 +781,10 @@ SPL_METHOD(Array, getArrayCopy)
780781
zval *object = ZEND_THIS;
781782
spl_array_object *intern = Z_SPLARRAY_P(object);
782783

784+
if (zend_parse_parameters_none() == FAILURE) {
785+
RETURN_THROWS();
786+
}
787+
783788
RETURN_ARR(zend_array_dup(spl_array_get_hash_table(intern)));
784789
} /* }}} */
785790

@@ -1196,7 +1201,7 @@ SPL_METHOD(Array, __construct)
11961201
return; /* nothing to do */
11971202
}
11981203

1199-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z|lC", &array, &ar_flags, &ce_get_iterator) == FAILURE) {
1204+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|zlC", &array, &ar_flags, &ce_get_iterator) == FAILURE) {
12001205
RETURN_THROWS();
12011206
}
12021207

@@ -1225,7 +1230,7 @@ SPL_METHOD(ArrayIterator, __construct)
12251230
return; /* nothing to do */
12261231
}
12271232

1228-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z|l", &array, &ar_flags) == FAILURE) {
1233+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|zl", &array, &ar_flags) == FAILURE) {
12291234
RETURN_THROWS();
12301235
}
12311236

@@ -1673,7 +1678,7 @@ SPL_METHOD(Array, serialize)
16731678
smart_str buf = {0};
16741679

16751680
if (zend_parse_parameters_none() == FAILURE) {
1676-
return;
1681+
RETURN_THROWS();
16771682
}
16781683

16791684
PHP_VAR_SERIALIZE_INIT(var_hash);
@@ -1702,11 +1707,7 @@ SPL_METHOD(Array, serialize)
17021707
/* done */
17031708
PHP_VAR_SERIALIZE_DESTROY(var_hash);
17041709

1705-
if (buf.s) {
1706-
RETURN_NEW_STR(buf.s);
1707-
}
1708-
1709-
RETURN_NULL();
1710+
RETURN_NEW_STR(buf.s);
17101711
} /* }}} */
17111712

17121713
/* {{{ proto void ArrayObject::unserialize(string serialized)
@@ -1892,122 +1893,69 @@ SPL_METHOD(Array, __unserialize)
18921893
}
18931894
/* }}} */
18941895

1895-
/* {{{ arginfo and function table */
1896-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array___construct, 0, 0, 0)
1897-
ZEND_ARG_INFO(0, input)
1898-
ZEND_ARG_INFO(0, flags)
1899-
ZEND_ARG_INFO(0, iterator_class)
1900-
ZEND_END_ARG_INFO()
1901-
1902-
/* ArrayIterator::__construct and ArrayObject::__construct have different signatures */
1903-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_iterator___construct, 0, 0, 0)
1904-
ZEND_ARG_INFO(0, array)
1905-
ZEND_ARG_INFO(0, flags)
1906-
ZEND_END_ARG_INFO()
1907-
1908-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_offsetGet, 0, 0, 1)
1909-
ZEND_ARG_INFO(0, index)
1910-
ZEND_END_ARG_INFO()
1911-
1912-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_offsetSet, 0, 0, 2)
1913-
ZEND_ARG_INFO(0, index)
1914-
ZEND_ARG_INFO(0, newval)
1915-
ZEND_END_ARG_INFO()
1916-
1917-
ZEND_BEGIN_ARG_INFO(arginfo_array_append, 0)
1918-
ZEND_ARG_INFO(0, value)
1919-
ZEND_END_ARG_INFO()
1920-
1921-
ZEND_BEGIN_ARG_INFO(arginfo_array_seek, 0)
1922-
ZEND_ARG_INFO(0, position)
1923-
ZEND_END_ARG_INFO()
1924-
1925-
ZEND_BEGIN_ARG_INFO(arginfo_array_exchangeArray, 0)
1926-
ZEND_ARG_INFO(0, input)
1927-
ZEND_END_ARG_INFO()
1928-
1929-
ZEND_BEGIN_ARG_INFO(arginfo_array_setFlags, 0)
1930-
ZEND_ARG_INFO(0, flags)
1931-
ZEND_END_ARG_INFO()
1932-
1933-
ZEND_BEGIN_ARG_INFO(arginfo_array_setIteratorClass, 0)
1934-
ZEND_ARG_INFO(0, iteratorClass)
1935-
ZEND_END_ARG_INFO()
1936-
1937-
ZEND_BEGIN_ARG_INFO(arginfo_array_uXsort, 0)
1938-
ZEND_ARG_INFO(0, cmp_function)
1939-
ZEND_END_ARG_INFO();
1940-
1941-
ZEND_BEGIN_ARG_INFO(arginfo_array_unserialize, 0)
1942-
ZEND_ARG_INFO(0, serialized)
1943-
ZEND_END_ARG_INFO();
1944-
1945-
ZEND_BEGIN_ARG_INFO(arginfo_array_void, 0)
1946-
ZEND_END_ARG_INFO()
1947-
19481896
static const zend_function_entry spl_funcs_ArrayObject[] = {
1949-
SPL_ME(Array, __construct, arginfo_array___construct, ZEND_ACC_PUBLIC)
1950-
SPL_ME(Array, offsetExists, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
1951-
SPL_ME(Array, offsetGet, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
1952-
SPL_ME(Array, offsetSet, arginfo_array_offsetSet, ZEND_ACC_PUBLIC)
1953-
SPL_ME(Array, offsetUnset, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
1954-
SPL_ME(Array, append, arginfo_array_append, ZEND_ACC_PUBLIC)
1955-
SPL_ME(Array, getArrayCopy, arginfo_array_void, ZEND_ACC_PUBLIC)
1956-
SPL_ME(Array, count, arginfo_array_void, ZEND_ACC_PUBLIC)
1957-
SPL_ME(Array, getFlags, arginfo_array_void, ZEND_ACC_PUBLIC)
1958-
SPL_ME(Array, setFlags, arginfo_array_setFlags, ZEND_ACC_PUBLIC)
1959-
SPL_ME(Array, asort, arginfo_array_void, ZEND_ACC_PUBLIC)
1960-
SPL_ME(Array, ksort, arginfo_array_void, ZEND_ACC_PUBLIC)
1961-
SPL_ME(Array, uasort, arginfo_array_uXsort, ZEND_ACC_PUBLIC)
1962-
SPL_ME(Array, uksort, arginfo_array_uXsort, ZEND_ACC_PUBLIC)
1963-
SPL_ME(Array, natsort, arginfo_array_void, ZEND_ACC_PUBLIC)
1964-
SPL_ME(Array, natcasesort, arginfo_array_void, ZEND_ACC_PUBLIC)
1965-
SPL_ME(Array, unserialize, arginfo_array_unserialize, ZEND_ACC_PUBLIC)
1966-
SPL_ME(Array, serialize, arginfo_array_void, ZEND_ACC_PUBLIC)
1967-
SPL_ME(Array, __unserialize, arginfo_array_unserialize, ZEND_ACC_PUBLIC)
1968-
SPL_ME(Array, __serialize, arginfo_array_void, ZEND_ACC_PUBLIC)
1897+
SPL_ME(Array, __construct, arginfo_class_ArrayObject___construct, ZEND_ACC_PUBLIC)
1898+
SPL_ME(Array, offsetExists, arginfo_class_ArrayObject_offsetExists, ZEND_ACC_PUBLIC)
1899+
SPL_ME(Array, offsetGet, arginfo_class_ArrayObject_offsetGet, ZEND_ACC_PUBLIC)
1900+
SPL_ME(Array, offsetSet, arginfo_class_ArrayObject_offsetSet, ZEND_ACC_PUBLIC)
1901+
SPL_ME(Array, offsetUnset, arginfo_class_ArrayObject_offsetUnset, ZEND_ACC_PUBLIC)
1902+
SPL_ME(Array, append, arginfo_class_ArrayObject_append, ZEND_ACC_PUBLIC)
1903+
SPL_ME(Array, getArrayCopy, arginfo_class_ArrayObject_getArrayCopy, ZEND_ACC_PUBLIC)
1904+
SPL_ME(Array, count, arginfo_class_ArrayObject_count, ZEND_ACC_PUBLIC)
1905+
SPL_ME(Array, getFlags, arginfo_class_ArrayObject_getFlags, ZEND_ACC_PUBLIC)
1906+
SPL_ME(Array, setFlags, arginfo_class_ArrayObject_setFlags, ZEND_ACC_PUBLIC)
1907+
SPL_ME(Array, asort, arginfo_class_ArrayObject_asort, ZEND_ACC_PUBLIC)
1908+
SPL_ME(Array, ksort, arginfo_class_ArrayObject_ksort, ZEND_ACC_PUBLIC)
1909+
SPL_ME(Array, uasort, arginfo_class_ArrayObject_uasort, ZEND_ACC_PUBLIC)
1910+
SPL_ME(Array, uksort, arginfo_class_ArrayObject_uksort, ZEND_ACC_PUBLIC)
1911+
SPL_ME(Array, natsort, arginfo_class_ArrayObject_natsort, ZEND_ACC_PUBLIC)
1912+
SPL_ME(Array, natcasesort, arginfo_class_ArrayObject_natcasesort, ZEND_ACC_PUBLIC)
1913+
SPL_ME(Array, unserialize, arginfo_class_ArrayObject_unserialize, ZEND_ACC_PUBLIC)
1914+
SPL_ME(Array, serialize, arginfo_class_ArrayObject_serialize, ZEND_ACC_PUBLIC)
1915+
SPL_ME(Array, __unserialize, arginfo_class_ArrayObject___unserialize, ZEND_ACC_PUBLIC)
1916+
SPL_ME(Array, __serialize, arginfo_class_ArrayObject___serialize, ZEND_ACC_PUBLIC)
19691917
/* ArrayObject specific */
1970-
SPL_ME(Array, getIterator, arginfo_array_void, ZEND_ACC_PUBLIC)
1971-
SPL_ME(Array, exchangeArray, arginfo_array_exchangeArray, ZEND_ACC_PUBLIC)
1972-
SPL_ME(Array, setIteratorClass, arginfo_array_setIteratorClass, ZEND_ACC_PUBLIC)
1973-
SPL_ME(Array, getIteratorClass, arginfo_array_void, ZEND_ACC_PUBLIC)
1918+
SPL_ME(Array, getIterator, arginfo_class_ArrayObject_getIterator, ZEND_ACC_PUBLIC)
1919+
SPL_ME(Array, exchangeArray, arginfo_class_ArrayObject_exchangeArray, ZEND_ACC_PUBLIC)
1920+
SPL_ME(Array, setIteratorClass, arginfo_class_ArrayObject_setIteratorClass, ZEND_ACC_PUBLIC)
1921+
SPL_ME(Array, getIteratorClass, arginfo_class_ArrayObject_getIteratorClass, ZEND_ACC_PUBLIC)
19741922
PHP_FE_END
19751923
};
19761924

19771925
static const zend_function_entry spl_funcs_ArrayIterator[] = {
1978-
SPL_ME(ArrayIterator, __construct, arginfo_array_iterator___construct, ZEND_ACC_PUBLIC)
1979-
SPL_ME(Array, offsetExists, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
1980-
SPL_ME(Array, offsetGet, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
1981-
SPL_ME(Array, offsetSet, arginfo_array_offsetSet, ZEND_ACC_PUBLIC)
1982-
SPL_ME(Array, offsetUnset, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
1983-
SPL_ME(Array, append, arginfo_array_append, ZEND_ACC_PUBLIC)
1984-
SPL_ME(Array, getArrayCopy, arginfo_array_void, ZEND_ACC_PUBLIC)
1985-
SPL_ME(Array, count, arginfo_array_void, ZEND_ACC_PUBLIC)
1986-
SPL_ME(Array, getFlags, arginfo_array_void, ZEND_ACC_PUBLIC)
1987-
SPL_ME(Array, setFlags, arginfo_array_setFlags, ZEND_ACC_PUBLIC)
1988-
SPL_ME(Array, asort, arginfo_array_void, ZEND_ACC_PUBLIC)
1989-
SPL_ME(Array, ksort, arginfo_array_void, ZEND_ACC_PUBLIC)
1990-
SPL_ME(Array, uasort, arginfo_array_uXsort, ZEND_ACC_PUBLIC)
1991-
SPL_ME(Array, uksort, arginfo_array_uXsort, ZEND_ACC_PUBLIC)
1992-
SPL_ME(Array, natsort, arginfo_array_void, ZEND_ACC_PUBLIC)
1993-
SPL_ME(Array, natcasesort, arginfo_array_void, ZEND_ACC_PUBLIC)
1994-
SPL_ME(Array, unserialize, arginfo_array_unserialize, ZEND_ACC_PUBLIC)
1995-
SPL_ME(Array, serialize, arginfo_array_void, ZEND_ACC_PUBLIC)
1996-
SPL_ME(Array, __unserialize, arginfo_array_unserialize, ZEND_ACC_PUBLIC)
1997-
SPL_ME(Array, __serialize, arginfo_array_void, ZEND_ACC_PUBLIC)
1926+
SPL_ME(ArrayIterator, __construct, arginfo_class_ArrayIterator___construct, ZEND_ACC_PUBLIC)
1927+
SPL_ME(Array, offsetExists, arginfo_class_ArrayIterator_offsetExists, ZEND_ACC_PUBLIC)
1928+
SPL_ME(Array, offsetGet, arginfo_class_ArrayIterator_offsetGet, ZEND_ACC_PUBLIC)
1929+
SPL_ME(Array, offsetSet, arginfo_class_ArrayIterator_offsetSet, ZEND_ACC_PUBLIC)
1930+
SPL_ME(Array, offsetUnset, arginfo_class_ArrayIterator_offsetUnset, ZEND_ACC_PUBLIC)
1931+
SPL_ME(Array, append, arginfo_class_ArrayIterator_append, ZEND_ACC_PUBLIC)
1932+
SPL_ME(Array, getArrayCopy, arginfo_class_ArrayIterator_getArrayCopy, ZEND_ACC_PUBLIC)
1933+
SPL_ME(Array, count, arginfo_class_ArrayIterator_count, ZEND_ACC_PUBLIC)
1934+
SPL_ME(Array, getFlags, arginfo_class_ArrayIterator_getFlags, ZEND_ACC_PUBLIC)
1935+
SPL_ME(Array, setFlags, arginfo_class_ArrayIterator_setFlags, ZEND_ACC_PUBLIC)
1936+
SPL_ME(Array, asort, arginfo_class_ArrayIterator_asort, ZEND_ACC_PUBLIC)
1937+
SPL_ME(Array, ksort, arginfo_class_ArrayIterator_ksort, ZEND_ACC_PUBLIC)
1938+
SPL_ME(Array, uasort, arginfo_class_ArrayIterator_uasort, ZEND_ACC_PUBLIC)
1939+
SPL_ME(Array, uksort, arginfo_class_ArrayIterator_uksort, ZEND_ACC_PUBLIC)
1940+
SPL_ME(Array, natsort, arginfo_class_ArrayIterator_natsort, ZEND_ACC_PUBLIC)
1941+
SPL_ME(Array, natcasesort, arginfo_class_ArrayIterator_natcasesort, ZEND_ACC_PUBLIC)
1942+
SPL_ME(Array, unserialize, arginfo_class_ArrayIterator_unserialize, ZEND_ACC_PUBLIC)
1943+
SPL_ME(Array, serialize, arginfo_class_ArrayIterator_serialize, ZEND_ACC_PUBLIC)
1944+
SPL_ME(Array, __unserialize, arginfo_class_ArrayIterator___unserialize, ZEND_ACC_PUBLIC)
1945+
SPL_ME(Array, __serialize, arginfo_class_ArrayIterator___serialize, ZEND_ACC_PUBLIC)
19981946
/* ArrayIterator specific */
1999-
SPL_ME(Array, rewind, arginfo_array_void, ZEND_ACC_PUBLIC)
2000-
SPL_ME(Array, current, arginfo_array_void, ZEND_ACC_PUBLIC)
2001-
SPL_ME(Array, key, arginfo_array_void, ZEND_ACC_PUBLIC)
2002-
SPL_ME(Array, next, arginfo_array_void, ZEND_ACC_PUBLIC)
2003-
SPL_ME(Array, valid, arginfo_array_void, ZEND_ACC_PUBLIC)
2004-
SPL_ME(Array, seek, arginfo_array_seek, ZEND_ACC_PUBLIC)
1947+
SPL_ME(Array, rewind, arginfo_class_ArrayIterator_rewind, ZEND_ACC_PUBLIC)
1948+
SPL_ME(Array, current, arginfo_class_ArrayIterator_current, ZEND_ACC_PUBLIC)
1949+
SPL_ME(Array, key, arginfo_class_ArrayIterator_key, ZEND_ACC_PUBLIC)
1950+
SPL_ME(Array, next, arginfo_class_ArrayIterator_next, ZEND_ACC_PUBLIC)
1951+
SPL_ME(Array, valid, arginfo_class_ArrayIterator_valid, ZEND_ACC_PUBLIC)
1952+
SPL_ME(Array, seek, arginfo_class_ArrayIterator_seek, ZEND_ACC_PUBLIC)
20051953
PHP_FE_END
20061954
};
20071955

20081956
static const zend_function_entry spl_funcs_RecursiveArrayIterator[] = {
2009-
SPL_ME(Array, hasChildren, arginfo_array_void, ZEND_ACC_PUBLIC)
2010-
SPL_ME(Array, getChildren, arginfo_array_void, ZEND_ACC_PUBLIC)
1957+
SPL_ME(Array, hasChildren, arginfo_class_RecursiveArrayIterator_hasChildren, ZEND_ACC_PUBLIC)
1958+
SPL_ME(Array, getChildren, arginfo_class_RecursiveArrayIterator_getChildren, ZEND_ACC_PUBLIC)
20111959
PHP_FE_END
20121960
};
20131961
/* }}} */

0 commit comments

Comments
 (0)