From 587ff49eb64799c2e0eef6cec0135dabc22ecf89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Mon, 7 Jun 2021 18:15:52 +0200 Subject: [PATCH 1/5] Declare tentative return types for ext/spl - part 1 --- Zend/tests/foreach_004.phpt | 8 +- Zend/tests/iterator_key_by_ref.phpt | 1 + ext/phar/tests/phar_oo_004.phpt | 10 +- ext/phar/tests/phar_oo_008.phpt | 4 +- ext/spl/spl_array.stub.php | 208 ++++++------ ext/spl/spl_array_arginfo.h | 83 ++--- ext/spl/spl_directory.stub.php | 300 +++++++++--------- ext/spl/spl_directory_arginfo.h | 154 +++++---- ...SplFixedArray_override_offsetGet_only.phpt | 2 +- .../tests/arrayObject___construct_error2.phpt | 10 +- ext/spl/tests/arrayObject_count_basic1.phpt | 4 +- .../arrayObject_getIteratorClass_basic1.phpt | 14 +- ext/spl/tests/array_009a.phpt | 2 +- ext/spl/tests/array_017.phpt | 6 +- ext/spl/tests/array_019.phpt | 2 +- ext/spl/tests/array_020.phpt | 12 +- ext/spl/tests/array_024.phpt | 2 +- ext/spl/tests/bug31185.phpt | 8 +- ext/spl/tests/bug32134.phpt | 6 +- ext/spl/tests/bug33136.phpt | 4 +- ext/spl/tests/bug34548.phpt | 2 +- ext/spl/tests/bug36825.phpt | 2 +- ext/spl/tests/bug37457.phpt | 2 +- ext/spl/tests/bug42703.phpt | 2 +- ext/spl/tests/bug45826.phpt | 6 +- ext/spl/tests/bug51532.phpt | 2 +- ext/spl/tests/bug53362.phpt | 2 +- ext/spl/tests/bug62059.phpt | 8 +- ext/spl/tests/bug65328.phpt | 40 +-- ext/spl/tests/bug66405.phpt | 2 +- ext/spl/tests/bug66834.phpt | 14 +- ext/spl/tests/bug69264.phpt | 16 +- ext/spl/tests/bug69970.phpt | 2 +- ext/spl/tests/bug70730.phpt | 2 +- ext/spl/tests/bug74058.phpt | 12 +- ext/spl/tests/bug74478.phpt | 14 +- ext/spl/tests/bug74669.phpt | 2 +- ext/spl/tests/dllist_008.phpt | 2 +- ext/spl/tests/dualiterator.inc | 2 +- ext/spl/tests/fixedarray_002.phpt | 14 +- ext/spl/tests/fixedarray_018.phpt | 2 +- ext/spl/tests/heap_010.phpt | 2 +- ext/spl/tests/iterator_001.phpt | 2 +- ext/spl/tests/iterator_002.phpt | 10 +- ext/spl/tests/iterator_004.phpt | 2 +- ext/spl/tests/iterator_005.phpt | 6 +- ext/spl/tests/iterator_007.phpt | 12 +- ext/spl/tests/iterator_008.phpt | 10 +- ext/spl/tests/iterator_014.phpt | 4 +- ext/spl/tests/iterator_016.phpt | 2 +- ext/spl/tests/iterator_021.phpt | 4 +- ext/spl/tests/iterator_022.phpt | 6 +- ext/spl/tests/iterator_023.phpt | 4 +- ext/spl/tests/iterator_031.phpt | 2 +- ext/spl/tests/iterator_034.phpt | 6 +- ext/spl/tests/iterator_041.phpt | 14 +- ext/spl/tests/iterator_041a.phpt | 14 +- ext/spl/tests/iterator_041b.phpt | 14 +- ext/spl/tests/iterator_047.phpt | 6 +- ext/spl/tests/recursivedualiterator.inc | 16 +- ext/spl/tests/spl_iterator_apply_error.phpt | 2 +- .../tests/spl_iterator_to_array_error.phpt | 2 +- 62 files changed, 567 insertions(+), 563 deletions(-) diff --git a/Zend/tests/foreach_004.phpt b/Zend/tests/foreach_004.phpt index 8a7b915c2e969..008385b16cef5 100644 --- a/Zend/tests/foreach_004.phpt +++ b/Zend/tests/foreach_004.phpt @@ -16,10 +16,10 @@ class IT extends ArrayIterator { } } - function rewind() {$this->trap(__FUNCTION__); return parent::rewind();} - function valid() {$this->trap(__FUNCTION__); return parent::valid();} - function key() {$this->trap(__FUNCTION__); return parent::key();} - function next() {$this->trap(__FUNCTION__); return parent::next();} + function rewind(): void {$this->trap(__FUNCTION__); parent::rewind();} + function valid(): bool {$this->trap(__FUNCTION__); return parent::valid();} + function key(): mixed {$this->trap(__FUNCTION__); return parent::key();} + function next(): void {$this->trap(__FUNCTION__); parent::next();} } foreach(['rewind', 'valid', 'key', 'next'] as $trap) { diff --git a/Zend/tests/iterator_key_by_ref.phpt b/Zend/tests/iterator_key_by_ref.phpt index 3bd2bcfdb29d1..2559e7235d9c5 100644 --- a/Zend/tests/iterator_key_by_ref.phpt +++ b/Zend/tests/iterator_key_by_ref.phpt @@ -3,6 +3,7 @@ Iterator::key() with by-ref return --FILE-- $v) class MyCSVFile extends SplFileObject { - function current() + function current(): string|array|false { return parent::fgetcsv(',', '"'); } @@ -62,7 +62,7 @@ foreach($v as $k => $d) class MyCSVFile2 extends SplFileObject { - function getCurrentLine() + function getCurrentLine(): string { echo __METHOD__ . "\n"; return implode('|', parent::fgetcsv(',', '"')); diff --git a/ext/spl/spl_array.stub.php b/ext/spl/spl_array.stub.php index 3ae05c73140e4..0b52a574f0fcd 100644 --- a/ext/spl/spl_array.stub.php +++ b/ext/spl/spl_array.stub.php @@ -6,77 +6,77 @@ class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Count { public function __construct(array|object $array = [], int $flags = 0, string $iteratorClass = ArrayIterator::class) {} - /** @return bool */ - public function offsetExists(mixed $key) {} + /** @tentative-return-type */ + public function offsetExists(mixed $key): bool {} - /** @return mixed */ - public function offsetGet(mixed $key) {} + /** @tentative-return-type */ + public function offsetGet(mixed $key): mixed {} - /** @return void */ - public function offsetSet(mixed $key, mixed $value) {} + /** @tentative-return-type */ + public function offsetSet(mixed $key, mixed $value): void {} - /** @return void */ - public function offsetUnset(mixed $key) {} + /** @tentative-return-type */ + public function offsetUnset(mixed $key): void {} - /** @return void */ - public function append(mixed $value) {} + /** @tentative-return-type */ + public function append(mixed $value): void {} - /** @return array */ - public function getArrayCopy() {} + /** @tentative-return-type */ + public function getArrayCopy(): array {} - /** @return int */ - public function count() {} + /** @tentative-return-type */ + public function count(): int {} - /** @return int */ - public function getFlags() {} + /** @tentative-return-type */ + public function getFlags(): int {} - /** @return void */ - public function setFlags(int $flags) {} + /** @tentative-return-type */ + public function setFlags(int $flags): void {} - /** @return bool */ - public function asort(int $flags = SORT_REGULAR) {} + /** @tentative-return-type */ + public function asort(int $flags = SORT_REGULAR): bool {} - /** @return bool */ - public function ksort(int $flags = SORT_REGULAR) {} + /** @tentative-return-type */ + public function ksort(int $flags = SORT_REGULAR): bool {} - /** @return bool */ - public function uasort(callable $callback) {} + /** @tentative-return-type */ + public function uasort(callable $callback): bool {} - /** @return bool */ - public function uksort(callable $callback) {} + /** @tentative-return-type */ + public function uksort(callable $callback): bool {} - /** @return bool */ - public function natsort() {} + /** @tentative-return-type */ + public function natsort(): bool {} - /** @return bool */ - public function natcasesort() {} + /** @tentative-return-type */ + public function natcasesort(): bool {} - /** @return void */ - public function unserialize(string $data) {} + /** @tentative-return-type */ + public function unserialize(string $data): void {} - /** @return string */ - public function serialize() {} + /** @tentative-return-type */ + public function serialize(): string {} - /** @return array */ - public function __serialize() {} + /** @tentative-return-type */ + public function __serialize(): array {} - /** @return void */ - public function __unserialize(array $data) {} + /** @tentative-return-type */ + public function __unserialize(array $data): void {} - /** @return Iterator */ - public function getIterator() {} + /** @tentative-return-type */ + public function getIterator(): Iterator {} - /** @return array */ - public function exchangeArray(array|object $array) {} + /** @tentative-return-type */ + public function exchangeArray(array|object $array): array {} - /** @return void */ - public function setIteratorClass(string $iteratorClass) {} + /** @tentative-return-type */ + public function setIteratorClass(string $iteratorClass): void {} - /** @return string */ - public function getIteratorClass() {} + /** @tentative-return-type */ + public function getIteratorClass(): string {} - /** @return array */ - public function __debugInfo() {} + /** @tentative-return-type */ + public function __debugInfo(): array {} } class ArrayIterator implements SeekableIterator, ArrayAccess, Serializable, Countable @@ -84,149 +84,149 @@ class ArrayIterator implements SeekableIterator, ArrayAccess, Serializable, Coun public function __construct(array|object $array = [], int $flags = 0) {} /** - * @return bool + * @tentative-return-type * @implementation-alias ArrayObject::offsetExists */ - public function offsetExists(mixed $key) {} + public function offsetExists(mixed $key): bool {} /** - * @return mixed + * @tentative-return-type * @implementation-alias ArrayObject::offsetGet */ - public function offsetGet(mixed $key) {} + public function offsetGet(mixed $key): mixed {} /** - * @return void + * @tentative-return-type * @implementation-alias ArrayObject::offsetSet */ - public function offsetSet(mixed $key, mixed $value) {} + public function offsetSet(mixed $key, mixed $value): void {} /** - * @return void + * @tentative-return-type * @implementation-alias ArrayObject::offsetUnset */ - public function offsetUnset(mixed $key) {} + public function offsetUnset(mixed $key): void {} /** - * @return void + * @tentative-return-type * @implementation-alias ArrayObject::append */ - public function append(mixed $value) {} + public function append(mixed $value): void {} /** - * @return array + * @tentative-return-type * @implementation-alias ArrayObject::getArrayCopy */ - public function getArrayCopy() {} + public function getArrayCopy(): array {} /** - * @return int + * @tentative-return-type * @implementation-alias ArrayObject::count */ - public function count() {} + public function count(): int {} /** - * @return int + * @tentative-return-type * @implementation-alias ArrayObject::getFlags */ - public function getFlags() {} + public function getFlags(): int {} /** - * @return void + * @tentative-return-type * @implementation-alias ArrayObject::setFlags */ - public function setFlags(int $flags) {} + public function setFlags(int $flags): void {} /** - * @return bool + * @tentative-return-type * @implementation-alias ArrayObject::asort */ - public function asort(int $flags = SORT_REGULAR) {} + public function asort(int $flags = SORT_REGULAR): bool {} /** - * @return bool + * @tentative-return-type * @implementation-alias ArrayObject::ksort */ - public function ksort(int $flags = SORT_REGULAR) {} + public function ksort(int $flags = SORT_REGULAR): bool {} /** - * @return bool + * @tentative-return-type * @implementation-alias ArrayObject::uasort */ - public function uasort(callable $callback) {} + public function uasort(callable $callback): bool {} /** - * @return bool + * @tentative-return-type * @implementation-alias ArrayObject::uksort */ - public function uksort(callable $callback) {} + public function uksort(callable $callback): bool {} /** - * @return bool + * @tentative-return-type * @implementation-alias ArrayObject::natsort */ - public function natsort() {} + public function natsort(): bool {} /** - * @return bool + * @tentative-return-type * @implementation-alias ArrayObject::natcasesort */ - public function natcasesort() {} + public function natcasesort(): bool {} /** - * @return void + * @tentative-return-type * @implementation-alias ArrayObject::unserialize */ - public function unserialize(string $data) {} + public function unserialize(string $data): void {} /** - * @return string + * @tentative-return-type * @implementation-alias ArrayObject::serialize */ - public function serialize() {} + public function serialize(): string {} /** - * @return array + * @tentative-return-type * @implementation-alias ArrayObject::__serialize */ - public function __serialize() {} + public function __serialize(): array {} /** - * @return void + * @tentative-return-type * @implementation-alias ArrayObject::__unserialize */ - public function __unserialize(array $data) {} + public function __unserialize(array $data): void {} - /** @return void */ - public function rewind() {} + /** @tentative-return-type */ + public function rewind(): void {} - /** @return mixed */ - public function current() {} + /** @tentative-return-type */ + public function current(): mixed {} - /** @return mixed */ - public function key() {} + /** @tentative-return-type */ + public function key(): mixed {} - /** @return void */ - public function next() {} + /** @tentative-return-type */ + public function next(): void {} - /** @return bool */ - public function valid() {} + /** @tentative-return-type */ + public function valid(): bool {} - /** @return void */ - public function seek(int $offset) {} + /** @tentative-return-type */ + public function seek(int $offset): void {} /** - * @return array + * @tentative-return-type * @implementation-alias ArrayObject::__debugInfo */ - public function __debugInfo() {} + public function __debugInfo(): array {} } class RecursiveArrayIterator extends ArrayIterator implements RecursiveIterator { - /** @return bool */ - public function hasChildren() {} + /** @tentative-return-type */ + public function hasChildren(): bool {} - /** @return RecursiveArrayIterator|null */ - public function getChildren() {} + /** @tentative-return-type */ + public function getChildren(): ?RecursiveArrayIterator {} } diff --git a/ext/spl/spl_array_arginfo.h b/ext/spl/spl_array_arginfo.h index d78ed4f55069e..c20c02ccd2a89 100644 --- a/ext/spl/spl_array_arginfo.h +++ b/ext/spl/spl_array_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 309be43f56774d35e7bddd4bf7f119e0d4c99d12 */ + * Stub hash: d58390328052e8db45a6e388ab1b3fdf882be635 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject___construct, 0, 0, 0) ZEND_ARG_TYPE_MASK(0, array, MAY_BE_ARRAY|MAY_BE_OBJECT, "[]") @@ -7,73 +7,81 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject___construct, 0, 0, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, iteratorClass, IS_STRING, 0, "ArrayIterator::class") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_offsetExists, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject_offsetExists, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, key, IS_MIXED, 0) ZEND_END_ARG_INFO() -#define arginfo_class_ArrayObject_offsetGet arginfo_class_ArrayObject_offsetExists +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject_offsetGet, 0, 1, IS_MIXED, 0) + ZEND_ARG_TYPE_INFO(0, key, IS_MIXED, 0) +ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_offsetSet, 0, 0, 2) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject_offsetSet, 0, 2, IS_VOID, 0) ZEND_ARG_TYPE_INFO(0, key, IS_MIXED, 0) ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0) ZEND_END_ARG_INFO() -#define arginfo_class_ArrayObject_offsetUnset arginfo_class_ArrayObject_offsetExists +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject_offsetUnset, 0, 1, IS_VOID, 0) + ZEND_ARG_TYPE_INFO(0, key, IS_MIXED, 0) +ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_append, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject_append, 0, 1, IS_VOID, 0) ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_getArrayCopy, 0, 0, 0) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject_getArrayCopy, 0, 0, IS_ARRAY, 0) ZEND_END_ARG_INFO() -#define arginfo_class_ArrayObject_count arginfo_class_ArrayObject_getArrayCopy +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject_count, 0, 0, IS_LONG, 0) +ZEND_END_ARG_INFO() -#define arginfo_class_ArrayObject_getFlags arginfo_class_ArrayObject_getArrayCopy +#define arginfo_class_ArrayObject_getFlags arginfo_class_ArrayObject_count -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_setFlags, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject_setFlags, 0, 1, IS_VOID, 0) 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_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject_asort, 0, 0, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "SORT_REGULAR") 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_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject_uasort, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0) ZEND_END_ARG_INFO() #define arginfo_class_ArrayObject_uksort arginfo_class_ArrayObject_uasort -#define arginfo_class_ArrayObject_natsort arginfo_class_ArrayObject_getArrayCopy +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject_natsort, 0, 0, _IS_BOOL, 0) +ZEND_END_ARG_INFO() -#define arginfo_class_ArrayObject_natcasesort arginfo_class_ArrayObject_getArrayCopy +#define arginfo_class_ArrayObject_natcasesort arginfo_class_ArrayObject_natsort -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_unserialize, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject_unserialize, 0, 1, IS_VOID, 0) ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_END_ARG_INFO() -#define arginfo_class_ArrayObject_serialize arginfo_class_ArrayObject_getArrayCopy +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject_serialize, 0, 0, IS_STRING, 0) +ZEND_END_ARG_INFO() #define arginfo_class_ArrayObject___serialize arginfo_class_ArrayObject_getArrayCopy -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject___unserialize, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject___unserialize, 0, 1, IS_VOID, 0) 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_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(arginfo_class_ArrayObject_getIterator, 0, 0, Iterator, 0) +ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_exchangeArray, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject_exchangeArray, 0, 1, IS_ARRAY, 0) ZEND_ARG_TYPE_MASK(0, array, MAY_BE_ARRAY|MAY_BE_OBJECT, NULL) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_setIteratorClass, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayObject_setIteratorClass, 0, 1, IS_VOID, 0) ZEND_ARG_TYPE_INFO(0, iteratorClass, IS_STRING, 0) ZEND_END_ARG_INFO() -#define arginfo_class_ArrayObject_getIteratorClass arginfo_class_ArrayObject_getArrayCopy +#define arginfo_class_ArrayObject_getIteratorClass arginfo_class_ArrayObject_serialize #define arginfo_class_ArrayObject___debugInfo arginfo_class_ArrayObject_getArrayCopy @@ -84,19 +92,19 @@ 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_offsetGet arginfo_class_ArrayObject_offsetGet #define arginfo_class_ArrayIterator_offsetSet arginfo_class_ArrayObject_offsetSet -#define arginfo_class_ArrayIterator_offsetUnset arginfo_class_ArrayObject_offsetExists +#define arginfo_class_ArrayIterator_offsetUnset arginfo_class_ArrayObject_offsetUnset #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_count arginfo_class_ArrayObject_count -#define arginfo_class_ArrayIterator_getFlags arginfo_class_ArrayObject_getArrayCopy +#define arginfo_class_ArrayIterator_getFlags arginfo_class_ArrayObject_count #define arginfo_class_ArrayIterator_setFlags arginfo_class_ArrayObject_setFlags @@ -108,37 +116,40 @@ ZEND_END_ARG_INFO() #define arginfo_class_ArrayIterator_uksort arginfo_class_ArrayObject_uasort -#define arginfo_class_ArrayIterator_natsort arginfo_class_ArrayObject_getArrayCopy +#define arginfo_class_ArrayIterator_natsort arginfo_class_ArrayObject_natsort -#define arginfo_class_ArrayIterator_natcasesort arginfo_class_ArrayObject_getArrayCopy +#define arginfo_class_ArrayIterator_natcasesort arginfo_class_ArrayObject_natsort #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_serialize #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 +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayIterator_rewind, 0, 0, IS_VOID, 0) +ZEND_END_ARG_INFO() -#define arginfo_class_ArrayIterator_current arginfo_class_ArrayObject_getArrayCopy +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayIterator_current, 0, 0, IS_MIXED, 0) +ZEND_END_ARG_INFO() -#define arginfo_class_ArrayIterator_key arginfo_class_ArrayObject_getArrayCopy +#define arginfo_class_ArrayIterator_key arginfo_class_ArrayIterator_current -#define arginfo_class_ArrayIterator_next arginfo_class_ArrayObject_getArrayCopy +#define arginfo_class_ArrayIterator_next arginfo_class_ArrayIterator_rewind -#define arginfo_class_ArrayIterator_valid arginfo_class_ArrayObject_getArrayCopy +#define arginfo_class_ArrayIterator_valid arginfo_class_ArrayObject_natsort -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayIterator_seek, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ArrayIterator_seek, 0, 1, IS_VOID, 0) ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_END_ARG_INFO() #define arginfo_class_ArrayIterator___debugInfo arginfo_class_ArrayObject_getArrayCopy -#define arginfo_class_RecursiveArrayIterator_hasChildren arginfo_class_ArrayObject_getArrayCopy +#define arginfo_class_RecursiveArrayIterator_hasChildren arginfo_class_ArrayObject_natsort -#define arginfo_class_RecursiveArrayIterator_getChildren arginfo_class_ArrayObject_getArrayCopy +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(arginfo_class_RecursiveArrayIterator_getChildren, 0, 0, RecursiveArrayIterator, 1) +ZEND_END_ARG_INFO() ZEND_METHOD(ArrayObject, __construct); diff --git a/ext/spl/spl_directory.stub.php b/ext/spl/spl_directory.stub.php index 4cd5039d2c2af..96d7c607ffb53 100644 --- a/ext/spl/spl_directory.stub.php +++ b/ext/spl/spl_directory.stub.php @@ -6,121 +6,121 @@ class SplFileInfo implements Stringable { public function __construct(string $filename) {} - /** @return string */ - public function getPath() {} + /** @tentative-return-type */ + public function getPath(): string {} - /** @return string */ - public function getFilename() {} + /** @tentative-return-type */ + public function getFilename(): string {} - /** @return string */ - public function getExtension() {} + /** @tentative-return-type */ + public function getExtension(): string {} - /** @return string */ - public function getBasename(string $suffix = "") {} + /** @tentative-return-type */ + public function getBasename(string $suffix = ""): string {} - /** @return string */ - public function getPathname() {} + /** @tentative-return-type */ + public function getPathname(): string {} - /** @return int|false */ - public function getPerms() {} + /** @tentative-return-type */ + public function getPerms(): int|false {} - /** @return int|false */ - public function getInode() {} + /** @tentative-return-type */ + public function getInode(): int|false {} - /** @return int|false */ - public function getSize() {} + /** @tentative-return-type */ + public function getSize(): int|false {} - /** @return int|false */ - public function getOwner() {} + /** @tentative-return-type */ + public function getOwner(): int|false {} - /** @return int|false */ - public function getGroup() {} + /** @tentative-return-type */ + public function getGroup(): int|false {} - /** @return int|false */ - public function getATime() {} + /** @tentative-return-type */ + public function getATime(): int|false {} - /** @return int|false */ - public function getMTime() {} + /** @tentative-return-type */ + public function getMTime(): int|false {} - /** @return int|false */ - public function getCTime() {} + /** @tentative-return-type */ + public function getCTime(): int|false {} - /** @return string|false */ - public function getType() {} + /** @tentative-return-type */ + public function getType(): string|false {} - /** @return bool */ - public function isWritable() {} + /** @tentative-return-type */ + public function isWritable(): bool {} - /** @return bool */ - public function isReadable() {} + /** @tentative-return-type */ + public function isReadable(): bool {} - /** @return bool */ - public function isExecutable() {} + /** @tentative-return-type */ + public function isExecutable(): bool {} - /** @return bool */ - public function isFile() {} + /** @tentative-return-type */ + public function isFile(): bool {} - /** @return bool */ - public function isDir() {} + /** @tentative-return-type */ + public function isDir(): bool {} - /** @return bool */ - public function isLink() {} + /** @tentative-return-type */ + public function isLink(): bool {} - /** @return string|false */ - public function getLinkTarget() {} + /** @tentative-return-type */ + public function getLinkTarget(): string|false {} - /** @return string|false */ - public function getRealPath() {} + /** @tentative-return-type */ + public function getRealPath(): string|false {} - /** @return SplFileInfo */ - public function getFileInfo(?string $class = null) {} + /** @tentative-return-type */ + public function getFileInfo(?string $class = null): SplFileInfo {} - /** @return SplFileInfo|null */ - public function getPathInfo(?string $class = null) {} + /** @tentative-return-type */ + public function getPathInfo(?string $class = null): ?SplFileInfo {} /** * @param resource|null $context - * @return SplFileObject + * @tentative-return-type */ - public function openFile(string $mode = "r", bool $useIncludePath = false, $context = null) {} + public function openFile(string $mode = "r", bool $useIncludePath = false, $context = null): SplFileObject {} - /** @return void */ - public function setFileClass(string $class = SplFileObject::class) {} + /** @tentative-return-type */ + public function setFileClass(string $class = SplFileObject::class): void {} - /** @return void */ - public function setInfoClass(string $class = SplFileInfo::class) {} + /** @tentative-return-type */ + public function setInfoClass(string $class = SplFileInfo::class): void {} /** @implementation-alias SplFileInfo::getPathname */ public function __toString(): string {} - /** @return array */ - public function __debugInfo() {} + /** @tentative-return-type */ + public function __debugInfo(): array {} - /** @return void */ - final public function _bad_state_ex() {} + /** @tentative-return-type */ + final public function _bad_state_ex(): void {} } class DirectoryIterator extends SplFileInfo implements SeekableIterator { public function __construct(string $directory) {} - /** @return string */ - public function getFilename() {} + /** @tentative-return-type */ + public function getFilename(): string {} - /** @return string */ - public function getExtension() {} + /** @tentative-return-type */ + public function getExtension(): string {} - /** @return string */ - public function getBasename(string $suffix = "") {} + /** @tentative-return-type */ + public function getBasename(string $suffix = ""): string {} - /** @return bool */ - public function isDot() {} + /** @tentative-return-type */ + public function isDot(): bool {} - /** @return void */ - public function rewind() {} + /** @tentative-return-type */ + public function rewind(): void {} - /** @return bool */ - public function valid() {} + /** @tentative-return-type */ + public function valid(): bool {} /** @return int */ public function key() {} @@ -128,11 +128,11 @@ public function key() {} /** @return DirectoryIterator */ public function current() {} - /** @return void */ - public function next() {} + /** @tentative-return-type */ + public function next(): void {} - /** @return void */ - public function seek(int $offset) {} + /** @tentative-return-type */ + public function seek(int $offset): void {} /** @implementation-alias DirectoryIterator::getFilename */ public function __toString(): string {} @@ -142,8 +142,8 @@ class FilesystemIterator extends DirectoryIterator { public function __construct(string $directory, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS) {} - /** @return void */ - public function rewind() {} + /** @tentative-return-type */ + public function rewind(): void {} /** @return string */ public function key() {} @@ -151,28 +151,28 @@ public function key() {} /** @return string|SplFileInfo|FilesystemIterator */ public function current() {} - /** @return int */ - public function getFlags() {} + /** @tentative-return-type */ + public function getFlags(): int {} - /** @return void */ - public function setFlags(int $flags) {} + /** @tentative-return-type */ + public function setFlags(int $flags): void {} } class RecursiveDirectoryIterator extends FilesystemIterator implements RecursiveIterator { public function __construct(string $directory, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO) {} - /** @return bool */ - public function hasChildren(bool $allowLinks = false) {} + /** @tentative-return-type */ + public function hasChildren(bool $allowLinks = false): bool {} - /** @return RecursiveDirectoryIterator */ - public function getChildren() {} + /** @tentative-return-type */ + public function getChildren(): RecursiveDirectoryIterator {} - /** @return string */ - public function getSubPath() {} + /** @tentative-return-type */ + public function getSubPath(): string {} - /** @return string */ - public function getSubPathname() {} + /** @tentative-return-type */ + public function getSubPathname(): string {} } #ifdef HAVE_GLOB @@ -180,8 +180,8 @@ class GlobIterator extends FilesystemIterator implements Countable { public function __construct(string $pattern, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO) {} - /** @return int */ - public function count() {} + /** @tentative-return-type */ + public function count(): int {} } #endif @@ -190,101 +190,101 @@ class SplFileObject extends SplFileInfo implements RecursiveIterator, SeekableIt /** @param resource|null $context */ public function __construct(string $filename, string $mode = "r", bool $useIncludePath = false, $context = null) {} - /** @return void */ - public function rewind() {} + /** @tentative-return-type */ + public function rewind(): void {} - /** @return bool */ - public function eof() {} + /** @tentative-return-type */ + public function eof(): bool {} - /** @return bool */ - public function valid() {} + /** @tentative-return-type */ + public function valid(): bool {} - /** @return string */ - public function fgets() {} + /** @tentative-return-type */ + public function fgets(): string {} - /** @return string|false */ - public function fread(int $length) {} + /** @tentative-return-type */ + public function fread(int $length): string|false {} - /** @return array|false */ - public function fgetcsv(string $separator = ",", string $enclosure = "\"", string $escape = "\\") {} + /** @tentative-return-type */ + public function fgetcsv(string $separator = ",", string $enclosure = "\"", string $escape = "\\"): array|false|null {} - /** @return int|false */ - public function fputcsv(array $fields, string $separator = ",", string $enclosure = "\"", string $escape = "\\", string $eol = "\n") {} + /** @tentative-return-type */ + public function fputcsv(array $fields, string $separator = ",", string $enclosure = "\"", string $escape = "\\", string $eol = "\n"): int|false {} - /** @return void */ - public function setCsvControl(string $separator = ",", string $enclosure = "\"", string $escape = "\\") {} + /** @tentative-return-type */ + public function setCsvControl(string $separator = ",", string $enclosure = "\"", string $escape = "\\"): void {} - /** @return array */ - public function getCsvControl() {} + /** @tentative-return-type */ + public function getCsvControl(): array {} /** * @param int $wouldBlock - * @return bool + * @tentative-return-type */ - public function flock(int $operation, &$wouldBlock = null) {} + public function flock(int $operation, &$wouldBlock = null): bool {} - /** @return bool */ - public function fflush() {} + /** @tentative-return-type */ + public function fflush(): bool {} - /** @return int|false */ - public function ftell() {} + /** @tentative-return-type */ + public function ftell(): int|false {} - /** @return int */ - public function fseek(int $offset, int $whence = SEEK_SET) {} + /** @tentative-return-type */ + public function fseek(int $offset, int $whence = SEEK_SET): int {} - /** @return string|false */ - public function fgetc() {} + /** @tentative-return-type */ + public function fgetc(): string|false {} - /** @return int */ - public function fpassthru() {} + /** @tentative-return-type */ + public function fpassthru(): int {} - /** @return array|int|null */ - public function fscanf(string $format, mixed &...$vars) {} + /** @tentative-return-type */ + public function fscanf(string $format, mixed &...$vars): array|int|null {} - /** @return int|false */ - public function fwrite(string $data, int $length = 0) {} + /** @tentative-return-type */ + public function fwrite(string $data, int $length = 0): int|false {} - /** @return array */ - public function fstat() {} + /** @tentative-return-type */ + public function fstat(): array {} - /** @return bool */ - public function ftruncate(int $size) {} + /** @tentative-return-type */ + public function ftruncate(int $size): bool {} - /** @return string|array|false */ - public function current() {} + /** @tentative-return-type */ + public function current(): string|array|false {} - /** @return int */ - public function key() {} + /** @tentative-return-type */ + public function key(): int {} - /** @return void */ - public function next() {} + /** @tentative-return-type */ + public function next(): void {} - /** @return void */ - public function setFlags(int $flags) {} + /** @tentative-return-type */ + public function setFlags(int $flags): void {} - /** @return int */ - public function getFlags() {} + /** @tentative-return-type */ + public function getFlags(): int {} - /** @return void */ - public function setMaxLineLen(int $maxLength) {} + /** @tentative-return-type */ + public function setMaxLineLen(int $maxLength): void {} - /** @return int */ - public function getMaxLineLen() {} + /** @tentative-return-type */ + public function getMaxLineLen(): int {} - /** @return bool */ - public function hasChildren() {} + /** @tentative-return-type */ + public function hasChildren(): bool {} - /** @return RecursiveIterator|null */ - public function getChildren() {} + /** @tentative-return-type */ + public function getChildren(): ?RecursiveIterator {} - /** @return void */ - public function seek(int $line) {} + /** @tentative-return-type */ + public function seek(int $line): void {} /** - * @return string + * @tentative-return-type * @alias SplFileObject::fgets */ - public function getCurrentLine() {} + public function getCurrentLine(): string {} /** @implementation-alias SplFileObject::fgets */ public function __toString(): string {} diff --git a/ext/spl/spl_directory_arginfo.h b/ext/spl/spl_directory_arginfo.h index 2c5101cad4a56..8adaf55a7c032 100644 --- a/ext/spl/spl_directory_arginfo.h +++ b/ext/spl/spl_directory_arginfo.h @@ -1,83 +1,90 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 7d34368a9fcdde100433b57fe2ef88bb4334e403 */ + * Stub hash: 075912b601422bba070eab7618a915a01327eb5d */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_getPath, 0, 0, 0) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileInfo_getPath, 0, 0, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_class_SplFileInfo_getFilename arginfo_class_SplFileInfo_getPath #define arginfo_class_SplFileInfo_getExtension arginfo_class_SplFileInfo_getPath -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_getBasename, 0, 0, 0) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileInfo_getBasename, 0, 0, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, suffix, IS_STRING, 0, "\"\"") ZEND_END_ARG_INFO() #define arginfo_class_SplFileInfo_getPathname arginfo_class_SplFileInfo_getPath -#define arginfo_class_SplFileInfo_getPerms arginfo_class_SplFileInfo_getPath +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SplFileInfo_getPerms, 0, 0, MAY_BE_LONG|MAY_BE_FALSE) +ZEND_END_ARG_INFO() -#define arginfo_class_SplFileInfo_getInode arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileInfo_getInode arginfo_class_SplFileInfo_getPerms -#define arginfo_class_SplFileInfo_getSize arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileInfo_getSize arginfo_class_SplFileInfo_getPerms -#define arginfo_class_SplFileInfo_getOwner arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileInfo_getOwner arginfo_class_SplFileInfo_getPerms -#define arginfo_class_SplFileInfo_getGroup arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileInfo_getGroup arginfo_class_SplFileInfo_getPerms -#define arginfo_class_SplFileInfo_getATime arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileInfo_getATime arginfo_class_SplFileInfo_getPerms -#define arginfo_class_SplFileInfo_getMTime arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileInfo_getMTime arginfo_class_SplFileInfo_getPerms -#define arginfo_class_SplFileInfo_getCTime arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileInfo_getCTime arginfo_class_SplFileInfo_getPerms -#define arginfo_class_SplFileInfo_getType arginfo_class_SplFileInfo_getPath +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SplFileInfo_getType, 0, 0, MAY_BE_STRING|MAY_BE_FALSE) +ZEND_END_ARG_INFO() -#define arginfo_class_SplFileInfo_isWritable arginfo_class_SplFileInfo_getPath +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileInfo_isWritable, 0, 0, _IS_BOOL, 0) +ZEND_END_ARG_INFO() -#define arginfo_class_SplFileInfo_isReadable arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileInfo_isReadable arginfo_class_SplFileInfo_isWritable -#define arginfo_class_SplFileInfo_isExecutable arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileInfo_isExecutable arginfo_class_SplFileInfo_isWritable -#define arginfo_class_SplFileInfo_isFile arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileInfo_isFile arginfo_class_SplFileInfo_isWritable -#define arginfo_class_SplFileInfo_isDir arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileInfo_isDir arginfo_class_SplFileInfo_isWritable -#define arginfo_class_SplFileInfo_isLink arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileInfo_isLink arginfo_class_SplFileInfo_isWritable -#define arginfo_class_SplFileInfo_getLinkTarget arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileInfo_getLinkTarget arginfo_class_SplFileInfo_getType -#define arginfo_class_SplFileInfo_getRealPath arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileInfo_getRealPath arginfo_class_SplFileInfo_getType -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_getFileInfo, 0, 0, 0) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(arginfo_class_SplFileInfo_getFileInfo, 0, 0, SplFileInfo, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 1, "null") ZEND_END_ARG_INFO() -#define arginfo_class_SplFileInfo_getPathInfo arginfo_class_SplFileInfo_getFileInfo +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(arginfo_class_SplFileInfo_getPathInfo, 0, 0, SplFileInfo, 1) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 1, "null") +ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_openFile, 0, 0, 0) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(arginfo_class_SplFileInfo_openFile, 0, 0, SplFileObject, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_STRING, 0, "\"r\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, useIncludePath, _IS_BOOL, 0, "false") ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_setFileClass, 0, 0, 0) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileInfo_setFileClass, 0, 0, IS_VOID, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 0, "SplFileObject::class") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_setInfoClass, 0, 0, 0) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileInfo_setInfoClass, 0, 0, IS_VOID, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 0, "SplFileInfo::class") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_SplFileInfo___toString, 0, 0, IS_STRING, 0) ZEND_END_ARG_INFO() -#define arginfo_class_SplFileInfo___debugInfo arginfo_class_SplFileInfo_getPath +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileInfo___debugInfo, 0, 0, IS_ARRAY, 0) +ZEND_END_ARG_INFO() -#define arginfo_class_SplFileInfo__bad_state_ex arginfo_class_SplFileInfo_getPath +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileInfo__bad_state_ex, 0, 0, IS_VOID, 0) +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_class_DirectoryIterator___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0) @@ -89,19 +96,20 @@ ZEND_END_ARG_INFO() #define arginfo_class_DirectoryIterator_getBasename arginfo_class_SplFileInfo_getBasename -#define arginfo_class_DirectoryIterator_isDot arginfo_class_SplFileInfo_getPath +#define arginfo_class_DirectoryIterator_isDot arginfo_class_SplFileInfo_isWritable -#define arginfo_class_DirectoryIterator_rewind arginfo_class_SplFileInfo_getPath +#define arginfo_class_DirectoryIterator_rewind arginfo_class_SplFileInfo__bad_state_ex -#define arginfo_class_DirectoryIterator_valid arginfo_class_SplFileInfo_getPath +#define arginfo_class_DirectoryIterator_valid arginfo_class_SplFileInfo_isWritable -#define arginfo_class_DirectoryIterator_key arginfo_class_SplFileInfo_getPath +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_DirectoryIterator_key, 0, 0, 0) +ZEND_END_ARG_INFO() -#define arginfo_class_DirectoryIterator_current arginfo_class_SplFileInfo_getPath +#define arginfo_class_DirectoryIterator_current arginfo_class_DirectoryIterator_key -#define arginfo_class_DirectoryIterator_next arginfo_class_SplFileInfo_getPath +#define arginfo_class_DirectoryIterator_next arginfo_class_SplFileInfo__bad_state_ex -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_DirectoryIterator_seek, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_DirectoryIterator_seek, 0, 1, IS_VOID, 0) ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_END_ARG_INFO() @@ -112,15 +120,16 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FilesystemIterator___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS") ZEND_END_ARG_INFO() -#define arginfo_class_FilesystemIterator_rewind arginfo_class_SplFileInfo_getPath +#define arginfo_class_FilesystemIterator_rewind arginfo_class_SplFileInfo__bad_state_ex -#define arginfo_class_FilesystemIterator_key arginfo_class_SplFileInfo_getPath +#define arginfo_class_FilesystemIterator_key arginfo_class_DirectoryIterator_key -#define arginfo_class_FilesystemIterator_current arginfo_class_SplFileInfo_getPath +#define arginfo_class_FilesystemIterator_current arginfo_class_DirectoryIterator_key -#define arginfo_class_FilesystemIterator_getFlags arginfo_class_SplFileInfo_getPath +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_FilesystemIterator_getFlags, 0, 0, IS_LONG, 0) +ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FilesystemIterator_setFlags, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_FilesystemIterator_setFlags, 0, 1, IS_VOID, 0) ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0) ZEND_END_ARG_INFO() @@ -129,11 +138,12 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveDirectoryIterator___construct, 0, ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveDirectoryIterator_hasChildren, 0, 0, 0) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_RecursiveDirectoryIterator_hasChildren, 0, 0, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, allowLinks, _IS_BOOL, 0, "false") ZEND_END_ARG_INFO() -#define arginfo_class_RecursiveDirectoryIterator_getChildren arginfo_class_SplFileInfo_getPath +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(arginfo_class_RecursiveDirectoryIterator_getChildren, 0, 0, RecursiveDirectoryIterator, 0) +ZEND_END_ARG_INFO() #define arginfo_class_RecursiveDirectoryIterator_getSubPath arginfo_class_SplFileInfo_getPath @@ -147,7 +157,7 @@ ZEND_END_ARG_INFO() #endif #if defined(HAVE_GLOB) -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_GlobIterator_count, 0, 0, 0) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_GlobIterator_count, 0, 0, IS_LONG, 0) ZEND_END_ARG_INFO() #endif @@ -158,25 +168,25 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject___construct, 0, 0, 1) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null") ZEND_END_ARG_INFO() -#define arginfo_class_SplFileObject_rewind arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileObject_rewind arginfo_class_SplFileInfo__bad_state_ex -#define arginfo_class_SplFileObject_eof arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileObject_eof arginfo_class_SplFileInfo_isWritable -#define arginfo_class_SplFileObject_valid arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileObject_valid arginfo_class_SplFileInfo_isWritable #define arginfo_class_SplFileObject_fgets arginfo_class_SplFileInfo_getPath -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fread, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SplFileObject_fread, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fgetcsv, 0, 0, 0) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SplFileObject_fgetcsv, 0, 0, MAY_BE_ARRAY|MAY_BE_FALSE|MAY_BE_NULL) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\",\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\"\\\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, escape, IS_STRING, 0, "\"\\\\\"") ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fputcsv, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SplFileObject_fputcsv, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, fields, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\",\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\"\\\"\"") @@ -184,65 +194,71 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fputcsv, 0, 0, 1) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, eol, IS_STRING, 0, "\"\\n\"") ZEND_END_ARG_INFO() -#define arginfo_class_SplFileObject_setCsvControl arginfo_class_SplFileObject_fgetcsv +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileObject_setCsvControl, 0, 0, IS_VOID, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\",\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\"\\\"\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, escape, IS_STRING, 0, "\"\\\\\"") +ZEND_END_ARG_INFO() -#define arginfo_class_SplFileObject_getCsvControl arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileObject_getCsvControl arginfo_class_SplFileInfo___debugInfo -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_flock, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileObject_flock, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, operation, IS_LONG, 0) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, wouldBlock, "null") ZEND_END_ARG_INFO() -#define arginfo_class_SplFileObject_fflush arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileObject_fflush arginfo_class_SplFileInfo_isWritable -#define arginfo_class_SplFileObject_ftell arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileObject_ftell arginfo_class_SplFileInfo_getPerms -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fseek, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileObject_fseek, 0, 1, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, whence, IS_LONG, 0, "SEEK_SET") ZEND_END_ARG_INFO() -#define arginfo_class_SplFileObject_fgetc arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileObject_fgetc arginfo_class_SplFileInfo_getType -#define arginfo_class_SplFileObject_fpassthru arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileObject_fpassthru arginfo_class_FilesystemIterator_getFlags -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fscanf, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SplFileObject_fscanf, 0, 1, MAY_BE_ARRAY|MAY_BE_LONG|MAY_BE_NULL) ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0) ZEND_ARG_VARIADIC_TYPE_INFO(1, vars, IS_MIXED, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fwrite, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SplFileObject_fwrite, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 0, "0") ZEND_END_ARG_INFO() -#define arginfo_class_SplFileObject_fstat arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileObject_fstat arginfo_class_SplFileInfo___debugInfo -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_ftruncate, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileObject_ftruncate, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0) ZEND_END_ARG_INFO() -#define arginfo_class_SplFileObject_current arginfo_class_SplFileInfo_getPath +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SplFileObject_current, 0, 0, MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_FALSE) +ZEND_END_ARG_INFO() -#define arginfo_class_SplFileObject_key arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileObject_key arginfo_class_FilesystemIterator_getFlags -#define arginfo_class_SplFileObject_next arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileObject_next arginfo_class_SplFileInfo__bad_state_ex #define arginfo_class_SplFileObject_setFlags arginfo_class_FilesystemIterator_setFlags -#define arginfo_class_SplFileObject_getFlags arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileObject_getFlags arginfo_class_FilesystemIterator_getFlags -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_setMaxLineLen, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileObject_setMaxLineLen, 0, 1, IS_VOID, 0) ZEND_ARG_TYPE_INFO(0, maxLength, IS_LONG, 0) ZEND_END_ARG_INFO() -#define arginfo_class_SplFileObject_getMaxLineLen arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileObject_getMaxLineLen arginfo_class_FilesystemIterator_getFlags -#define arginfo_class_SplFileObject_hasChildren arginfo_class_SplFileInfo_getPath +#define arginfo_class_SplFileObject_hasChildren arginfo_class_SplFileInfo_isWritable -#define arginfo_class_SplFileObject_getChildren arginfo_class_SplFileInfo_getPath +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(arginfo_class_SplFileObject_getChildren, 0, 0, RecursiveIterator, 1) +ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_seek, 0, 0, 1) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileObject_seek, 0, 1, IS_VOID, 0) ZEND_ARG_TYPE_INFO(0, line, IS_LONG, 0) ZEND_END_ARG_INFO() diff --git a/ext/spl/tests/SplFixedArray_override_offsetGet_only.phpt b/ext/spl/tests/SplFixedArray_override_offsetGet_only.phpt index 4ad03a4c3469b..1d933825e2ae7 100644 --- a/ext/spl/tests/SplFixedArray_override_offsetGet_only.phpt +++ b/ext/spl/tests/SplFixedArray_override_offsetGet_only.phpt @@ -4,7 +4,7 @@ Overriding SplFixedArray::offsetGet() only count(), $ao->count()); ==ArrayIterator== current()); } diff --git a/ext/spl/tests/array_017.phpt b/ext/spl/tests/array_017.phpt index 1165133b35022..fb152543d7e2f 100644 --- a/ext/spl/tests/array_017.phpt +++ b/ext/spl/tests/array_017.phpt @@ -24,7 +24,7 @@ class ArrayIteratorEx extends ArrayIterator ,'$this'=>$this)); } - function setFlags($flags) + function setFlags($flags): void { echo __METHOD__ . "($flags)\n"; ArrayIterator::setFlags($flags); @@ -67,13 +67,13 @@ class ArrayObjectEx extends ArrayObject } } - function setFlags($flags) + function setFlags($flags): void { echo __METHOD__ . "($flags)\n"; ArrayObject::setFlags($flags); } - function getIterator() + function getIterator(): Iterator { echo __METHOD__ . "()\n"; $it = new ArrayIteratorEx($this, $this->getFlags()); diff --git a/ext/spl/tests/array_019.phpt b/ext/spl/tests/array_019.phpt index 7d1239c0bdc4f..867ede8d2c38d 100644 --- a/ext/spl/tests/array_019.phpt +++ b/ext/spl/tests/array_019.phpt @@ -9,7 +9,7 @@ $ar = new RecursiveArrayIterator(array(3)); foreach($ar as &$v) var_dump($v); class ArrayIteratorEx extends ArrayIterator { - function current() + function current(): mixed { return ArrayIterator::current(); } diff --git a/ext/spl/tests/array_020.phpt b/ext/spl/tests/array_020.phpt index fa96f92ab3300..61733b82c06d4 100644 --- a/ext/spl/tests/array_020.phpt +++ b/ext/spl/tests/array_020.phpt @@ -5,34 +5,34 @@ SPL: ArrayIterator overloading class ArrayIteratorEx extends ArrayIterator { - function rewind() + function rewind(): void { echo __METHOD__ . "\n"; ArrayIterator::rewind(); } - function valid() + function valid(): bool { echo __METHOD__ . "\n"; return ArrayIterator::valid(); } - function key() + function key(): mixed { echo __METHOD__ . "\n"; return ArrayIterator::key(); } - function current() + function current(): mixed { echo __METHOD__ . "\n"; return ArrayIterator::current(); } - function next() + function next(): void { echo __METHOD__ . "\n"; - return ArrayIterator::next(); + ArrayIterator::next(); } } diff --git a/ext/spl/tests/array_024.phpt b/ext/spl/tests/array_024.phpt index 6223b8072eec5..3c4621be107bb 100644 --- a/ext/spl/tests/array_024.phpt +++ b/ext/spl/tests/array_024.phpt @@ -5,7 +5,7 @@ SPL: ArrayObject with overridden count() $obj = new ArrayObject(array(1,2)); var_dump(count($obj)); class ArrayObject2 extends ArrayObject { - public function count() { + public function count(): int { return -parent::count(); } } diff --git a/ext/spl/tests/bug31185.phpt b/ext/spl/tests/bug31185.phpt index 88cb3dbf7ca5c..70ae1c00983d5 100644 --- a/ext/spl/tests/bug31185.phpt +++ b/ext/spl/tests/bug31185.phpt @@ -6,20 +6,20 @@ Bug #31185 (Crash when exceptions thrown from ArrayAccess::offsetUnset()) class FooBar implements ArrayAccess { private $array = array(); - public function offsetExists($index) { + public function offsetExists($index): bool { return isset($this->array[$index]); } - public function offsetGet($index) { + public function offsetGet($index): mixed { return $this->array[$index]; } - public function offsetSet($index, $value) { + public function offsetSet($index, $value): void { echo __METHOD__ . "($index, $value)\n"; $this->array[$index] = $value; } - public function offsetUnset($index) { + public function offsetUnset($index): void { throw new Exception('FAIL'); unset($this->array[$index]); } diff --git a/ext/spl/tests/bug32134.phpt b/ext/spl/tests/bug32134.phpt index a81924ed1d29e..a516532c46b86 100644 --- a/ext/spl/tests/bug32134.phpt +++ b/ext/spl/tests/bug32134.phpt @@ -11,7 +11,7 @@ class myArray extends ArrayIterator parent::__construct($array); } - public function offsetGet($index) + public function offsetGet($index): mixed { static $i = 0; echo __METHOD__ . "($index)\n"; @@ -19,10 +19,10 @@ class myArray extends ArrayIterator return parent::offsetGet($index); } - public function offsetSet($index, $newval) + public function offsetSet($index, $newval): void { echo __METHOD__ . "($index,$newval)\n"; - return parent::offsetSet($index, $newval); + parent::offsetSet($index, $newval); } } diff --git a/ext/spl/tests/bug33136.phpt b/ext/spl/tests/bug33136.phpt index 8b52eae5998de..35122909031f2 100644 --- a/ext/spl/tests/bug33136.phpt +++ b/ext/spl/tests/bug33136.phpt @@ -13,13 +13,13 @@ class Collection extends ArrayObject parent::__construct($this->data); } - function offsetGet($index) + function offsetGet($index): mixed { echo __METHOD__ . "($index)\n"; return parent::offsetGet($index); } - function offsetSet($index, $value) + function offsetSet($index, $value): void { echo __METHOD__ . "(" . (is_null($index) ? "NULL" : $index) . ",$value)\n"; parent::offsetSet($index, $value); diff --git a/ext/spl/tests/bug34548.phpt b/ext/spl/tests/bug34548.phpt index 4615b1306bd8a..5f3e00c7f3a19 100644 --- a/ext/spl/tests/bug34548.phpt +++ b/ext/spl/tests/bug34548.phpt @@ -10,7 +10,7 @@ class Collection extends ArrayObject foreach($dataArray as $value) $this->append($value); } - public function offsetSet($index, $value) + public function offsetSet($index, $value): void { parent::offsetSet($index, $value); } diff --git a/ext/spl/tests/bug36825.phpt b/ext/spl/tests/bug36825.phpt index 072009cf8424c..adbe0aff83a5e 100644 --- a/ext/spl/tests/bug36825.phpt +++ b/ext/spl/tests/bug36825.phpt @@ -5,7 +5,7 @@ Bug #36825 (Exceptions thrown in ArrayObject::offsetGet cause segfault) class foo extends ArrayObject { - public function offsetGet($key) + public function offsetGet($key): mixed { echo __METHOD__ . "($key)\n"; throw new Exception("hi"); diff --git a/ext/spl/tests/bug37457.phpt b/ext/spl/tests/bug37457.phpt index 792d5ae2a7a32..c8ee4df89702a 100644 --- a/ext/spl/tests/bug37457.phpt +++ b/ext/spl/tests/bug37457.phpt @@ -37,7 +37,7 @@ class Collection implements Iterator return $this->valid; } - public function rewind() + public function rewind(): void { echo __METHOD__ . "\n"; $this->valid = (false !== reset($this->array)); diff --git a/ext/spl/tests/bug42703.phpt b/ext/spl/tests/bug42703.phpt index b54425c3100df..af2b1b8459585 100644 --- a/ext/spl/tests/bug42703.phpt +++ b/ext/spl/tests/bug42703.phpt @@ -4,7 +4,7 @@ Bug #42703 (Exception raised in an iterator::current() causes segfault in Filter head = $head ? : new Node('HEAD'); @@ -221,10 +218,7 @@ class Node extends \RecursiveArrayIterator implements \Countable return $this->parent; } - /** - * @return Node - */ - public function current() + public function current(): Node { return $this->children[$this->index]; } @@ -232,55 +226,37 @@ class Node extends \RecursiveArrayIterator implements \Countable /** * @return scalar */ - public function key() + public function key(): mixed { return $this->index; } - /** - * @return void - */ - public function next() + public function next(): void { ++$this->index; } - /** - * @return void - */ - public function rewind() + public function rewind(): void { $this->index = 0; } - /** - * @return bool - */ - public function valid() + public function valid(): bool { return array_key_exists($this->index, $this->children); } - /** - * @return int - */ - public function count() + public function count(): int { return count($this->children); } - /** - * @return bool - */ - public function hasChildren() + public function hasChildren(): bool { return !empty($this->children); } - /** - * @return \RecursiveArrayIterator - */ - public function getChildren() + public function getChildren(): RecursiveArrayIterator { return new \RecursiveArrayIterator($this->children); } diff --git a/ext/spl/tests/bug66405.phpt b/ext/spl/tests/bug66405.phpt index b34e7b5074bc4..0a2da919ffa37 100644 --- a/ext/spl/tests/bug66405.phpt +++ b/ext/spl/tests/bug66405.phpt @@ -20,7 +20,7 @@ class Bug66405 extends RecursiveDirectoryIterator return $current; } - public function getChildren() + public function getChildren(): RecursiveDirectoryIterator { $children = parent::getChildren(); if (is_object($children)) { diff --git a/ext/spl/tests/bug66834.phpt b/ext/spl/tests/bug66834.phpt index c47a7f626369b..864ac3725c29e 100644 --- a/ext/spl/tests/bug66834.phpt +++ b/ext/spl/tests/bug66834.phpt @@ -6,12 +6,12 @@ SPL: Bug #66834 // overrides both offsetExists and offsetGet class ArrayObjectBoth extends ArrayObject { - public function offsetExists($offset) { + public function offsetExists($offset): bool { var_dump('Called: '.__METHOD__); return parent::offsetExists($offset); } - public function offsetGet($offset) { + public function offsetGet($offset): mixed { var_dump('Called: '.__METHOD__); return parent::offsetGet($offset); } @@ -20,7 +20,7 @@ class ArrayObjectBoth extends ArrayObject // overrides only offsetExists class ArrayObjectExists extends ArrayObject { - public function offsetExists($offset) { + public function offsetExists($offset): bool { var_dump('Called: '.__METHOD__); return parent::offsetExists($offset); } @@ -29,7 +29,7 @@ class ArrayObjectExists extends ArrayObject // overrides only offsetGet class ArrayObjectGet extends ArrayObject { - public function offsetGet($offset) { + public function offsetGet($offset): mixed { var_dump('Called: '.__METHOD__); return parent::offsetGet($offset); } @@ -38,14 +38,14 @@ class ArrayObjectGet extends ArrayObject // overrides only offsetGet and offsetSet class ArrayObjectGetSet extends ArrayObject { - public function offsetGet($offset) + public function offsetGet($offset): mixed { return parent::offsetGet(str_rot13($offset)); } - public function offsetSet($offset, $value) + public function offsetSet($offset, $value): void { - return parent::offsetSet(str_rot13($offset), $value); + parent::offsetSet(str_rot13($offset), $value); } } diff --git a/ext/spl/tests/bug69264.phpt b/ext/spl/tests/bug69264.phpt index 2f5251d1770ad..7e274c89f7519 100644 --- a/ext/spl/tests/bug69264.phpt +++ b/ext/spl/tests/bug69264.phpt @@ -3,49 +3,49 @@ Bug #69264 (__debugInfo() ignored while extending SPL classes) --FILE-- 42, 'parent' => count(parent::__debugInfo())]; } } class MyDoublyLinkedList extends SplDoublyLinkedList { - public function __debugInfo() { + public function __debugInfo(): array { return ['child' => 42, 'parent' => count(parent::__debugInfo())]; } } class MyObjectStorage extends SplObjectStorage { - public function __debugInfo() { + public function __debugInfo(): array { return ['child' => 42, 'parent' => count(parent::__debugInfo())]; } } class MyMultipleIterator extends MultipleIterator { - public function __debugInfo() { + public function __debugInfo(): array { return ['child' => 42, 'parent' => count(parent::__debugInfo())]; } } class MyArrayObject extends ArrayObject { - public function __debugInfo() { + public function __debugInfo(): array { return ['child' => 42, 'parent' => count(parent::__debugInfo())]; } } class MyArrayIterator extends ArrayIterator { - public function __debugInfo() { + public function __debugInfo(): array { return ['child' => 42, 'parent' => count(parent::__debugInfo())]; } } class MyMaxHeap extends SplMaxHeap { - public function __debugInfo() { + public function __debugInfo(): array { return ['child' => 42, 'parent' => count(parent::__debugInfo())]; } } class MyPriorityQueue extends SplPriorityQueue { - public function __debugInfo() { + public function __debugInfo(): array { return ['child' => 42, 'parent' => count(parent::__debugInfo())]; } } diff --git a/ext/spl/tests/bug69970.phpt b/ext/spl/tests/bug69970.phpt index c82d0b58c67ae..6f179a230b7d9 100644 --- a/ext/spl/tests/bug69970.phpt +++ b/ext/spl/tests/bug69970.phpt @@ -6,7 +6,7 @@ Bug #69970 (Use-after-free vulnerability in spl_recursive_it_move_forward_ex()) $count = 10; class RecursiveArrayIteratorIterator extends RecursiveIteratorIterator { - function rewind() { + function rewind(): void { echo "dummy\n"; } function endChildren() { diff --git a/ext/spl/tests/bug70730.phpt b/ext/spl/tests/bug70730.phpt index 9d522384262c4..fb02adf0b808c 100644 --- a/ext/spl/tests/bug70730.phpt +++ b/ext/spl/tests/bug70730.phpt @@ -11,7 +11,7 @@ class A extends \ArrayObject $this->foo = 'bar'; } - public function serialize() + public function serialize(): string { unset($this->foo); $result = parent::serialize(); diff --git a/ext/spl/tests/bug74058.phpt b/ext/spl/tests/bug74058.phpt index a416d8f15ae00..32c57153ec100 100644 --- a/ext/spl/tests/bug74058.phpt +++ b/ext/spl/tests/bug74058.phpt @@ -10,13 +10,13 @@ class MyArrayObject extends ArrayObject parent::__construct($input, ArrayObject::ARRAY_AS_PROPS); } - public function offsetSet($x, $v) + public function offsetSet($x, $v): void { echo "offsetSet('{$x}')\n"; - return parent::offsetSet($x, $v); + parent::offsetSet($x, $v); } - public function offsetGet($x) + public function offsetGet($x): mixed { echo "offsetGet('{$x}')\n"; return parent::offsetGet($x); @@ -30,13 +30,13 @@ class MyArray extends ArrayObject parent::__construct($input); } - public function offsetSet($x, $v) + public function offsetSet($x, $v): void { echo "offsetSet('{$x}')\n"; - return parent::offsetSet($x, $v); + parent::offsetSet($x, $v); } - public function offsetGet($x) + public function offsetGet($x): mixed { echo "offsetGet('{$x}')\n"; return parent::offsetGet($x); diff --git a/ext/spl/tests/bug74478.phpt b/ext/spl/tests/bug74478.phpt index 3609db53ee1ef..c491b666f5dcc 100644 --- a/ext/spl/tests/bug74478.phpt +++ b/ext/spl/tests/bug74478.phpt @@ -5,24 +5,24 @@ Bug #74478: null coalescing operator failing with SplFixedArray class MyFixedArray extends \SplFixedArray { - public function offsetExists($name) { + public function offsetExists($name): bool { echo "offsetExists($name)\n"; return parent::offsetExists($name); } - public function offsetGet($name) { + public function offsetGet($name): mixed { echo "offsetGet($name)\n"; return parent::offsetGet($name); } - public function offsetSet($name, $value) { + public function offsetSet($name, $value): void { echo "offsetSet($name)\n"; - return parent::offsetSet($name, $value); + parent::offsetSet($name, $value); } - public function offsetUnset($name) { + public function offsetUnset($name): void { echo "offsetUnset($name)\n"; - return parent::offsetUnset($name); + parent::offsetUnset($name); } -}; +} $fixedData = new MyFixedArray(10); var_dump(isset($fixedData[0][1][2])); diff --git a/ext/spl/tests/bug74669.phpt b/ext/spl/tests/bug74669.phpt index 98e9c8867229c..e942d2c5f0761 100644 --- a/ext/spl/tests/bug74669.phpt +++ b/ext/spl/tests/bug74669.phpt @@ -39,7 +39,7 @@ class Container implements Iterator return $this->iterator->valid(); } - public function rewind() + public function rewind(): void { $this->iterator->rewind(); } diff --git a/ext/spl/tests/dllist_008.phpt b/ext/spl/tests/dllist_008.phpt index 114b50c4f5c28..5daaa59e15183 100644 --- a/ext/spl/tests/dllist_008.phpt +++ b/ext/spl/tests/dllist_008.phpt @@ -7,7 +7,7 @@ $obj[] = 1; $obj[] = 2; var_dump(count($obj)); class SplDoublyLinkedList2 extends SplDoublyLinkedList{ - public function count() { + public function count(): int { return -parent::count(); } } diff --git a/ext/spl/tests/dualiterator.inc b/ext/spl/tests/dualiterator.inc index 0830ebe6449f3..a2c55b8bdda11 100644 --- a/ext/spl/tests/dualiterator.inc +++ b/ext/spl/tests/dualiterator.inc @@ -75,7 +75,7 @@ class DualIterator implements Iterator /** rewind both inner iterators */ - function rewind() + function rewind(): void { $this->lhs->rewind(); $this->rhs->rewind(); diff --git a/ext/spl/tests/fixedarray_002.phpt b/ext/spl/tests/fixedarray_002.phpt index fb05a3dc2cae9..4f6682e6df3a0 100644 --- a/ext/spl/tests/fixedarray_002.phpt +++ b/ext/spl/tests/fixedarray_002.phpt @@ -6,23 +6,23 @@ class A extends SplFixedArray { public $prop1 = NULL; public $prop2 = NULL; - public function count() { + public function count(): int { return 2; } - public function offsetGet($n) { + public function offsetGet($n): mixed { echo "A::offsetGet\n"; return parent::offsetGet($n); } - public function offsetSet($n, $v) { + public function offsetSet($n, $v): void { echo "A::offsetSet\n"; - return parent::offsetSet($n, $v); + parent::offsetSet($n, $v); } - public function offsetUnset($n) { + public function offsetUnset($n): void { echo "A::offsetUnset\n"; - return parent::offsetUnset($n); + parent::offsetUnset($n); } - public function offsetExists($n) { + public function offsetExists($n): bool { echo "A::offsetExists\n"; return parent::offsetExists($n); } diff --git a/ext/spl/tests/fixedarray_018.phpt b/ext/spl/tests/fixedarray_018.phpt index aa02fb5de1509..4f5560785e57d 100644 --- a/ext/spl/tests/fixedarray_018.phpt +++ b/ext/spl/tests/fixedarray_018.phpt @@ -5,7 +5,7 @@ SPL: FixedArray: overridden count() $obj = new SplFixedArray(2); var_dump(count($obj)); class SplFixedArray2 extends SplFixedArray { - public function count() { + public function count(): int { return -parent::count(); } } diff --git a/ext/spl/tests/heap_010.phpt b/ext/spl/tests/heap_010.phpt index 81e71c239852d..d708acb01c00c 100644 --- a/ext/spl/tests/heap_010.phpt +++ b/ext/spl/tests/heap_010.phpt @@ -7,7 +7,7 @@ $obj->insert(1); $obj->insert(2); var_dump(count($obj)); class SplMaxHeap2 extends SplMaxHeap{ - public function count() { + public function count(): int { return -parent::count(); } } diff --git a/ext/spl/tests/iterator_001.phpt b/ext/spl/tests/iterator_001.phpt index c8151533a8ee5..2517e0b566140 100644 --- a/ext/spl/tests/iterator_001.phpt +++ b/ext/spl/tests/iterator_001.phpt @@ -14,7 +14,7 @@ class NumericArrayIterator implements Iterator $this->a = $a; } - public function rewind() + public function rewind(): void { echo __METHOD__ . "\n"; $this->i = 0; diff --git a/ext/spl/tests/iterator_002.phpt b/ext/spl/tests/iterator_002.phpt index da790988fcbe9..d210fbe9d73a5 100644 --- a/ext/spl/tests/iterator_002.phpt +++ b/ext/spl/tests/iterator_002.phpt @@ -5,12 +5,12 @@ SPL: Iterator using getInnerIterator class RecursiceArrayIterator extends ArrayIterator implements RecursiveIterator { - function hasChildren() + function hasChildren(): bool { return is_array($this->current()); } - function getChildren() + function getChildren(): RecursiceArrayIterator { return new RecursiceArrayIterator($this->current()); } @@ -18,17 +18,17 @@ class RecursiceArrayIterator extends ArrayIterator implements RecursiveIterator class CrashIterator extends FilterIterator implements RecursiveIterator { - function accept() + function accept(): bool { return true; } - function hasChildren() + function hasChildren(): bool { return $this->getInnerIterator()->hasChildren(); } - function getChildren() + function getChildren(): RecursiceArrayIterator { return new RecursiceArrayIterator($this->getInnerIterator()->current()); } diff --git a/ext/spl/tests/iterator_004.phpt b/ext/spl/tests/iterator_004.phpt index d131593ad205c..bb849580308d7 100644 --- a/ext/spl/tests/iterator_004.phpt +++ b/ext/spl/tests/iterator_004.phpt @@ -14,7 +14,7 @@ class NumericArrayIterator implements Iterator $this->a = $a; } - public function rewind() + public function rewind(): void { echo __METHOD__ . "\n"; $this->i = 0; diff --git a/ext/spl/tests/iterator_005.phpt b/ext/spl/tests/iterator_005.phpt index 9f13889a18581..07584c14f9a4b 100644 --- a/ext/spl/tests/iterator_005.phpt +++ b/ext/spl/tests/iterator_005.phpt @@ -5,10 +5,10 @@ SPL: IteratorIterator and ArrayIterator/Object class ArrayIteratorEx extends ArrayIterator { - function rewind() + function rewind(): void { echo __METHOD__ . "\n"; - return parent::rewind(); + parent::rewind(); } } @@ -21,7 +21,7 @@ foreach(new IteratorIterator($it) as $v) class ArrayObjectEx extends ArrayObject { - function getIterator() + function getIterator(): Iterator { echo __METHOD__ . "\n"; return parent::getIterator(); diff --git a/ext/spl/tests/iterator_007.phpt b/ext/spl/tests/iterator_007.phpt index 8fb503c79a7a3..1b04a1d4c1887 100644 --- a/ext/spl/tests/iterator_007.phpt +++ b/ext/spl/tests/iterator_007.phpt @@ -5,27 +5,27 @@ SPL: NoRewindIterator class ArrayIteratorEx extends ArrayIterator { - function rewind() + function rewind(): void { echo __METHOD__ . "\n"; parent::rewind(); } - function valid() + function valid(): bool { echo __METHOD__ . "\n"; return parent::valid(); } - function current() + function current(): mixed { echo __METHOD__ . "\n"; return parent::current(); } - function key() + function key(): mixed { echo __METHOD__ . "\n"; return parent::key(); } - function next() + function next(): void { echo __METHOD__ . "\n"; parent::next(); @@ -34,7 +34,7 @@ class ArrayIteratorEx extends ArrayIterator class NoRewindIteratorEx extends NoRewindIterator { - function rewind() + function rewind(): void { echo __METHOD__ . "\n"; parent::rewind(); diff --git a/ext/spl/tests/iterator_008.phpt b/ext/spl/tests/iterator_008.phpt index 19c6038e3c4c5..875d190a8b323 100644 --- a/ext/spl/tests/iterator_008.phpt +++ b/ext/spl/tests/iterator_008.phpt @@ -5,27 +5,27 @@ SPL: InfiniteIterator class ArrayIteratorEx extends ArrayIterator { - function rewind() + function rewind(): void { echo __METHOD__ . "\n"; parent::rewind(); } - function valid() + function valid(): bool { echo __METHOD__ . "\n"; return parent::valid(); } - function current() + function current(): mixed { echo __METHOD__ . "\n"; return parent::current(); } - function key() + function key(): mixed { echo __METHOD__ . "\n"; return parent::key(); } - function next() + function next(): void { echo __METHOD__ . "\n"; parent::next(); diff --git a/ext/spl/tests/iterator_014.phpt b/ext/spl/tests/iterator_014.phpt index 363b2916fe9ce..5e15854ad10e9 100644 --- a/ext/spl/tests/iterator_014.phpt +++ b/ext/spl/tests/iterator_014.phpt @@ -5,7 +5,7 @@ SPL: RecursiveIteratorIterator and beginChildren/endChildren class MyRecursiveArrayIterator extends RecursiveArrayIterator { - function valid() + function valid(): bool { if (!parent::valid()) { @@ -18,7 +18,7 @@ class MyRecursiveArrayIterator extends RecursiveArrayIterator } } - function getChildren() + function getChildren(): ?RecursiveArrayIterator { echo __METHOD__ . "\n"; return parent::getChildren(); diff --git a/ext/spl/tests/iterator_016.phpt b/ext/spl/tests/iterator_016.phpt index 966c05d989c85..90a89ceff806f 100644 --- a/ext/spl/tests/iterator_016.phpt +++ b/ext/spl/tests/iterator_016.phpt @@ -5,7 +5,7 @@ SPL: RecursiveIteratorIterator and beginChildren/endChildren class Menu extends ArrayObject { - function getIterator() + function getIterator(): RecursiveArrayIterator { echo __METHOD__ . "\n"; return new RecursiveArrayIterator($this); diff --git a/ext/spl/tests/iterator_021.phpt b/ext/spl/tests/iterator_021.phpt index 433ced95e75ff..e495a5aaf3403 100644 --- a/ext/spl/tests/iterator_021.phpt +++ b/ext/spl/tests/iterator_021.phpt @@ -5,7 +5,7 @@ SPL: RecursiveIteratorIterator and hasChildren class MyRecursiveArrayIterator extends RecursiveArrayIterator { - function valid() + function valid(): bool { if (!parent::valid()) { @@ -18,7 +18,7 @@ class MyRecursiveArrayIterator extends RecursiveArrayIterator } } - function getChildren() + function getChildren(): ?RecursiveArrayIterator { echo __METHOD__ . "\n"; return parent::getChildren(); diff --git a/ext/spl/tests/iterator_022.phpt b/ext/spl/tests/iterator_022.phpt index ae79932828427..5a6829fa0bb37 100644 --- a/ext/spl/tests/iterator_022.phpt +++ b/ext/spl/tests/iterator_022.phpt @@ -5,13 +5,13 @@ SPL: RecursiveIteratorIterator and callHasChildren/callGetChildren class MyRecursiveArrayIterator extends RecursiveArrayIterator { - function getChildren() + function getChildren(): ?RecursiveArrayIterator { echo __METHOD__ . "\n"; return $this->current(); } - function valid() + function valid(): bool { if (!parent::valid()) { @@ -44,7 +44,7 @@ class RecursiveArrayIteratorIterator extends RecursiveIteratorIterator parent::rewind(); } - function valid() + function valid(): bool { echo __METHOD__ . "\n"; if ($this->skip) diff --git a/ext/spl/tests/iterator_023.phpt b/ext/spl/tests/iterator_023.phpt index b75b2bcb7a407..780a7c2c15b72 100644 --- a/ext/spl/tests/iterator_023.phpt +++ b/ext/spl/tests/iterator_023.phpt @@ -5,13 +5,13 @@ SPL: RecursiveIteratorIterator and catch getChildren class MyRecursiveArrayIterator extends RecursiveArrayIterator { - function getChildren() + function getChildren(): ?RecursiveArrayIterator { echo __METHOD__ . "\n"; return $this->current(); } - function valid() + function valid(): bool { if (!parent::valid()) { diff --git a/ext/spl/tests/iterator_031.phpt b/ext/spl/tests/iterator_031.phpt index d1aed21ac0692..249aec2aef962 100644 --- a/ext/spl/tests/iterator_031.phpt +++ b/ext/spl/tests/iterator_031.phpt @@ -5,7 +5,7 @@ SPL: AppendIterator::append() rewinds when necessary class MyArrayIterator extends ArrayIterator { - function rewind() + function rewind(): void { echo __METHOD__ . "\n"; parent::rewind(); diff --git a/ext/spl/tests/iterator_034.phpt b/ext/spl/tests/iterator_034.phpt index 76cc9589ce75c..df1488e4b4835 100644 --- a/ext/spl/tests/iterator_034.phpt +++ b/ext/spl/tests/iterator_034.phpt @@ -5,7 +5,7 @@ SPL: RecursiveIteratorIterator and break deep class MyRecursiveArrayIterator extends RecursiveArrayIterator { - function valid() + function valid(): bool { if (!parent::valid()) { @@ -18,13 +18,13 @@ class MyRecursiveArrayIterator extends RecursiveArrayIterator } } - function getChildren() + function getChildren(): ?RecursiveArrayIterator { echo __METHOD__ . "()\n"; return parent::getChildren(); } - function rewind() + function rewind(): void { echo __METHOD__ . "()\n"; parent::rewind(); diff --git a/ext/spl/tests/iterator_041.phpt b/ext/spl/tests/iterator_041.phpt index 98892c87e0d79..9431789c2e04c 100644 --- a/ext/spl/tests/iterator_041.phpt +++ b/ext/spl/tests/iterator_041.phpt @@ -24,34 +24,34 @@ class MyArrayIterator extends ArrayIterator self::fail(1, __FUNCTION__); } - function rewind() + function rewind(): void { self::fail(2, __FUNCTION__); - return parent::rewind(); + parent::rewind(); } - function valid() + function valid(): bool { self::fail(3, __FUNCTION__); return parent::valid(); } - function current() + function current(): mixed { self::fail(4, __FUNCTION__); return parent::current(); } - function key() + function key(): mixed { self::fail(5, __FUNCTION__); return parent::key(); } - function next() + function next(): void { self::fail(6, __FUNCTION__); - return parent::next(); + parent::next(); } function __destruct() diff --git a/ext/spl/tests/iterator_041a.phpt b/ext/spl/tests/iterator_041a.phpt index 37b4341297c50..9dd357adc0a4c 100644 --- a/ext/spl/tests/iterator_041a.phpt +++ b/ext/spl/tests/iterator_041a.phpt @@ -24,34 +24,34 @@ class MyArrayIterator extends ArrayIterator self::fail(1, __FUNCTION__); } - function rewind() + function rewind(): void { self::fail(2, __FUNCTION__); - return parent::rewind(); + parent::rewind(); } - function valid() + function valid(): bool { self::fail(3, __FUNCTION__); return parent::valid(); } - function current() + function current(): mixed { self::fail(4, __FUNCTION__); return parent::current(); } - function key() + function key(): mixed { self::fail(5, __FUNCTION__); return parent::key(); } - function next() + function next(): void { self::fail(6, __FUNCTION__); - return parent::next(); + parent::next(); } function __destruct() diff --git a/ext/spl/tests/iterator_041b.phpt b/ext/spl/tests/iterator_041b.phpt index 517b8fc5e46bb..723677dc30f47 100644 --- a/ext/spl/tests/iterator_041b.phpt +++ b/ext/spl/tests/iterator_041b.phpt @@ -24,34 +24,34 @@ class MyArrayIterator extends ArrayIterator self::fail(1, __FUNCTION__); } - function rewind() + function rewind(): void { self::fail(2, __FUNCTION__); - return parent::rewind(); + parent::rewind(); } - function valid() + function valid(): bool { self::fail(3, __FUNCTION__); return parent::valid(); } - function current() + function current(): mixed { self::fail(4, __FUNCTION__); return parent::current(); } - function key() + function key(): mixed { self::fail(5, __FUNCTION__); return parent::key(); } - function next() + function next(): void { self::fail(6, __FUNCTION__); - return parent::next(); + parent::next(); } function __destruct() diff --git a/ext/spl/tests/iterator_047.phpt b/ext/spl/tests/iterator_047.phpt index 9d7586bf4e24b..353990856bd8a 100644 --- a/ext/spl/tests/iterator_047.phpt +++ b/ext/spl/tests/iterator_047.phpt @@ -7,7 +7,7 @@ class MyRecursiveArrayIterator extends RecursiveArrayIterator { static public $fail = 0; - static function fail($state, $method) + static function fail($state, $method): void { if (self::$fail == $state) { @@ -15,14 +15,14 @@ class MyRecursiveArrayIterator extends RecursiveArrayIterator } } - function hasChildren() + function hasChildren(): bool { echo __METHOD__ . "()\n"; self::fail(1, __METHOD__); return parent::hasChildren(); } - function getChildren() + function getChildren(): ?RecursiveArrayIterator { echo __METHOD__ . "()\n"; self::fail(2, __METHOD__); diff --git a/ext/spl/tests/recursivedualiterator.inc b/ext/spl/tests/recursivedualiterator.inc index 45abf4c8f4556..cfb7ab9b6364e 100644 --- a/ext/spl/tests/recursivedualiterator.inc +++ b/ext/spl/tests/recursivedualiterator.inc @@ -30,17 +30,17 @@ class RecursiveDualIterator extends DualIterator implements RecursiveIterator parent::__construct($lhs, $rhs, $flags); } - /** @return whether both LHS and RHS have children + /** @return bool whether both LHS and RHS have children */ - function hasChildren() + function hasChildren(): bool { return $this->getLHS()->hasChildren() && $this->getRHS()->hasChildren(); } - /** @return new RecursiveDualIterator (late binding) for the two inner + /** @return RecursiveDualIterator (late binding) for the two inner * iterators current children. */ - function getChildren() + function getChildren(): object { if (empty($this->ref)) { @@ -50,19 +50,19 @@ class RecursiveDualIterator extends DualIterator implements RecursiveIterator $this->getLHS()->getChildren(), $this->getRHS()->getChildren(), $this->getFlags()); } - /** @return whether both inner iterators are valid, have same hasChildren() + /** @return bool whether both inner iterators are valid, have same hasChildren() * state and identical current and key values or both are non valid. */ - function areIdentical() + function areIdentical(): bool { return $this->getLHS()->hasChildren() === $this->getRHS()->hasChildren() && parent::areIdentical(); } - /** @return whether both inner iterators are valid, have same hasChildren() + /** @return bool whether both inner iterators are valid, have same hasChildren() * state and equal current and key values or both are invalid. */ - function areEqual() + function areEqual(): bool { return $this->getLHS()->hasChildren() === $this->getRHS()->hasChildren() && parent::areEqual(); diff --git a/ext/spl/tests/spl_iterator_apply_error.phpt b/ext/spl/tests/spl_iterator_apply_error.phpt index c73fe468a1009..2a5caa008670d 100644 --- a/ext/spl/tests/spl_iterator_apply_error.phpt +++ b/ext/spl/tests/spl_iterator_apply_error.phpt @@ -4,7 +4,7 @@ SPL: Error: iterator_apply when an iterator method (eg rewind) throws exception Date: Mon, 12 Jul 2021 12:10:40 +0200 Subject: [PATCH 2/5] Address review comments --- ext/spl/spl_directory.stub.php | 12 ++++++------ ext/spl/spl_directory_arginfo.h | 9 ++++----- ...plFileObject_getCurrentLine_invalid_override.phpt | 4 ++-- ext/spl/tests/recursivedualiterator.inc | 2 +- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/ext/spl/spl_directory.stub.php b/ext/spl/spl_directory.stub.php index 96d7c607ffb53..72d20b4740cee 100644 --- a/ext/spl/spl_directory.stub.php +++ b/ext/spl/spl_directory.stub.php @@ -123,10 +123,10 @@ public function rewind(): void {} public function valid(): bool {} /** @return int */ - public function key() {} + public function key() {} // TODO change return type to string /** @return DirectoryIterator */ - public function current() {} + public function current() {} // TODO fix return type so that FilesystemIterator::current() remains compatible /** @tentative-return-type */ public function next(): void {} @@ -145,8 +145,8 @@ public function __construct(string $directory, int $flags = FilesystemIterator:: /** @tentative-return-type */ public function rewind(): void {} - /** @return string */ - public function key() {} + /** @tentative-return-type */ + public function key(): string {} /** @return string|SplFileInfo|FilesystemIterator */ public function current() {} @@ -206,7 +206,7 @@ public function fgets(): string {} public function fread(int $length): string|false {} /** @tentative-return-type */ - public function fgetcsv(string $separator = ",", string $enclosure = "\"", string $escape = "\\"): array|false|null {} + public function fgetcsv(string $separator = ",", string $enclosure = "\"", string $escape = "\\"): array|false {} /** @tentative-return-type */ public function fputcsv(array $fields, string $separator = ",", string $enclosure = "\"", string $escape = "\\", string $eol = "\n"): int|false {} @@ -251,7 +251,7 @@ public function fstat(): array {} public function ftruncate(int $size): bool {} /** @tentative-return-type */ - public function current(): string|array|false {} + public function current(): string|false {} /** @tentative-return-type */ public function key(): int {} diff --git a/ext/spl/spl_directory_arginfo.h b/ext/spl/spl_directory_arginfo.h index 8adaf55a7c032..1cfb364793811 100644 --- a/ext/spl/spl_directory_arginfo.h +++ b/ext/spl/spl_directory_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 075912b601422bba070eab7618a915a01327eb5d */ + * Stub hash: d14bdc42fcf352bcfaadab01c44856d72ec4ee26 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) @@ -122,7 +122,7 @@ ZEND_END_ARG_INFO() #define arginfo_class_FilesystemIterator_rewind arginfo_class_SplFileInfo__bad_state_ex -#define arginfo_class_FilesystemIterator_key arginfo_class_DirectoryIterator_key +#define arginfo_class_FilesystemIterator_key arginfo_class_SplFileInfo_getPath #define arginfo_class_FilesystemIterator_current arginfo_class_DirectoryIterator_key @@ -180,7 +180,7 @@ ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SplFileObject_fr ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SplFileObject_fgetcsv, 0, 0, MAY_BE_ARRAY|MAY_BE_FALSE|MAY_BE_NULL) +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SplFileObject_fgetcsv, 0, 0, MAY_BE_ARRAY|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\",\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\"\\\"\"") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, escape, IS_STRING, 0, "\"\\\\\"") @@ -236,8 +236,7 @@ ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileObject_ft ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SplFileObject_current, 0, 0, MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_FALSE) -ZEND_END_ARG_INFO() +#define arginfo_class_SplFileObject_current arginfo_class_SplFileInfo_getType #define arginfo_class_SplFileObject_key arginfo_class_FilesystemIterator_getFlags diff --git a/ext/spl/tests/SplFileObject_getCurrentLine_invalid_override.phpt b/ext/spl/tests/SplFileObject_getCurrentLine_invalid_override.phpt index 3e578a604b9d6..bac194cd3b8f9 100644 --- a/ext/spl/tests/SplFileObject_getCurrentLine_invalid_override.phpt +++ b/ext/spl/tests/SplFileObject_getCurrentLine_invalid_override.phpt @@ -4,7 +4,7 @@ Invalid SplFileObject::getCurrentLine() return type --EXPECT-- -getCurrentLine(): Return value must be of type string, array returned +MySplFileObject::getCurrentLine(): Return value must be of type string, array returned diff --git a/ext/spl/tests/recursivedualiterator.inc b/ext/spl/tests/recursivedualiterator.inc index cfb7ab9b6364e..449608b095704 100644 --- a/ext/spl/tests/recursivedualiterator.inc +++ b/ext/spl/tests/recursivedualiterator.inc @@ -40,7 +40,7 @@ class RecursiveDualIterator extends DualIterator implements RecursiveIterator /** @return RecursiveDualIterator (late binding) for the two inner * iterators current children. */ - function getChildren(): object + function getChildren(): RecursiveDualIterator { if (empty($this->ref)) { From 6f075a6c6d775f83f6cd590e0531c257267188d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Mon, 12 Jul 2021 21:22:27 +0200 Subject: [PATCH 3/5] Address review suggestions and fix test --- ext/phar/tests/phar_oo_008.phpt | 12 +++++++----- ext/spl/spl_directory.stub.php | 4 ++-- ext/spl/spl_directory_arginfo.h | 5 +++-- ...plFileObject_getCurrentLine_invalid_override.phpt | 1 + ext/spl/tests/bug66405.phpt | 2 ++ 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/ext/phar/tests/phar_oo_008.phpt b/ext/phar/tests/phar_oo_008.phpt index 1a8f4c9061f22..eab1fa3c3542e 100644 --- a/ext/phar/tests/phar_oo_008.phpt +++ b/ext/phar/tests/phar_oo_008.phpt @@ -31,19 +31,20 @@ foreach($f as $k => $v) class MyCSVFile extends SplFileObject { - function current(): string|array|false + function current(): string { - return parent::fgetcsv(',', '"'); + return implode('|', parent::fgetcsv(',', '"')); } } $phar->setInfoClass('MyCSVFile'); +/** @var MyCSVFile $v */ $v = $phar['a.csv']; echo "===3===\n"; while(!$v->eof()) { - echo $v->key() . "=>" . join('|',$v->fgetcsv()) . "\n"; + echo $v->key() . "=>" . join('|', $v->fgetcsv()) . "\n"; } echo "===4===\n"; @@ -51,13 +52,13 @@ $v->rewind(); while(!$v->eof()) { $l = $v->fgetcsv(); - echo $v->key() . "=>" . join('|',$l) . "\n"; + echo $v->key() . "=>" . join('|', $l) . "\n"; } echo "===5===\n"; foreach($v as $k => $d) { - echo "$k=>" . join('|',$d) . "\n"; + echo "$k=>" . $d . "\n"; } class MyCSVFile2 extends SplFileObject @@ -70,6 +71,7 @@ class MyCSVFile2 extends SplFileObject } $phar->setInfoClass('MyCSVFile2'); +/** @var MyCSVFile2 $v */ $v = $phar['a.csv']; echo "===6===\n"; diff --git a/ext/spl/spl_directory.stub.php b/ext/spl/spl_directory.stub.php index 72d20b4740cee..27190433053cc 100644 --- a/ext/spl/spl_directory.stub.php +++ b/ext/spl/spl_directory.stub.php @@ -148,8 +148,8 @@ public function rewind(): void {} /** @tentative-return-type */ public function key(): string {} - /** @return string|SplFileInfo|FilesystemIterator */ - public function current() {} + /** @tentative-return-type */ + public function current(): string|SplFileInfo|FilesystemIterator {} /** @tentative-return-type */ public function getFlags(): int {} diff --git a/ext/spl/spl_directory_arginfo.h b/ext/spl/spl_directory_arginfo.h index 1cfb364793811..1eddb250de902 100644 --- a/ext/spl/spl_directory_arginfo.h +++ b/ext/spl/spl_directory_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: d14bdc42fcf352bcfaadab01c44856d72ec4ee26 */ + * Stub hash: 982c23b21224351dfdb7be670eb78d1559b9ffbd */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) @@ -124,7 +124,8 @@ ZEND_END_ARG_INFO() #define arginfo_class_FilesystemIterator_key arginfo_class_SplFileInfo_getPath -#define arginfo_class_FilesystemIterator_current arginfo_class_DirectoryIterator_key +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_TYPE_MASK_EX(arginfo_class_FilesystemIterator_current, 0, 0, SplFileInfo|FilesystemIterator, MAY_BE_STRING) +ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_FilesystemIterator_getFlags, 0, 0, IS_LONG, 0) ZEND_END_ARG_INFO() diff --git a/ext/spl/tests/SplFileObject_getCurrentLine_invalid_override.phpt b/ext/spl/tests/SplFileObject_getCurrentLine_invalid_override.phpt index bac194cd3b8f9..3d27eb834f39a 100644 --- a/ext/spl/tests/SplFileObject_getCurrentLine_invalid_override.phpt +++ b/ext/spl/tests/SplFileObject_getCurrentLine_invalid_override.phpt @@ -4,6 +4,7 @@ Invalid SplFileObject::getCurrentLine() return type --EXPECTF-- +Deprecated: Return type of Bug66405::current() should either be compatible with FilesystemIterator::current(): SplFileInfo|FilesystemIterator|string, or the #[ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in %s on line %d + Bug66405 file3.csv string %sbug66405%efile1.txt string %sbug66405%efile2.md From 072b0c77abb259e10a891312d4cec7b3c22962ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Tue, 13 Jul 2021 11:48:58 +0200 Subject: [PATCH 4/5] Another review round --- ext/phar/tests/phar_oo_008.phpt | 6 +++--- ext/spl/spl_directory.stub.php | 2 +- ext/spl/spl_directory_arginfo.h | 5 +++-- ext/spl/tests/bug66405.phpt | 4 +--- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/ext/phar/tests/phar_oo_008.phpt b/ext/phar/tests/phar_oo_008.phpt index eab1fa3c3542e..96ba8347ec754 100644 --- a/ext/phar/tests/phar_oo_008.phpt +++ b/ext/phar/tests/phar_oo_008.phpt @@ -31,9 +31,9 @@ foreach($f as $k => $v) class MyCSVFile extends SplFileObject { - function current(): string + function current(): array|false { - return implode('|', parent::fgetcsv(',', '"')); + return parent::fgetcsv(',', '"'); } } @@ -58,7 +58,7 @@ while(!$v->eof()) echo "===5===\n"; foreach($v as $k => $d) { - echo "$k=>" . $d . "\n"; + echo "$k=>" . join('|', $d) . "\n"; } class MyCSVFile2 extends SplFileObject diff --git a/ext/spl/spl_directory.stub.php b/ext/spl/spl_directory.stub.php index 27190433053cc..ef3cc9f68a4e2 100644 --- a/ext/spl/spl_directory.stub.php +++ b/ext/spl/spl_directory.stub.php @@ -251,7 +251,7 @@ public function fstat(): array {} public function ftruncate(int $size): bool {} /** @tentative-return-type */ - public function current(): string|false {} + public function current(): string|array|false {} /** @tentative-return-type */ public function key(): int {} diff --git a/ext/spl/spl_directory_arginfo.h b/ext/spl/spl_directory_arginfo.h index 1eddb250de902..7a7261d4ffdf5 100644 --- a/ext/spl/spl_directory_arginfo.h +++ b/ext/spl/spl_directory_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 982c23b21224351dfdb7be670eb78d1559b9ffbd */ + * Stub hash: fcfc6e8120dff87ab81d9b5491f27e695b3790f4 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo___construct, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) @@ -237,7 +237,8 @@ ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileObject_ft ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0) ZEND_END_ARG_INFO() -#define arginfo_class_SplFileObject_current arginfo_class_SplFileInfo_getType +ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SplFileObject_current, 0, 0, MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_FALSE) +ZEND_END_ARG_INFO() #define arginfo_class_SplFileObject_key arginfo_class_FilesystemIterator_getFlags diff --git a/ext/spl/tests/bug66405.phpt b/ext/spl/tests/bug66405.phpt index bc385bdc86b1c..031e8c2ed1b6d 100644 --- a/ext/spl/tests/bug66405.phpt +++ b/ext/spl/tests/bug66405.phpt @@ -13,7 +13,7 @@ touch($td . '/testsubdir/file3.csv'); class Bug66405 extends RecursiveDirectoryIterator { - public function current() + public function current(): string|SplFileInfo|FilesystemIterator { $current = parent::current(); echo gettype($current) . " $current\n"; @@ -53,8 +53,6 @@ rmdir($td . '/testsubdir'); rmdir($td); ?> --EXPECTF-- -Deprecated: Return type of Bug66405::current() should either be compatible with FilesystemIterator::current(): SplFileInfo|FilesystemIterator|string, or the #[ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in %s on line %d - Bug66405 file3.csv string %sbug66405%efile1.txt string %sbug66405%efile2.md From a436ee9d9edaa9a9bf664fef9ef71378a5ba909d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Tue, 13 Jul 2021 12:07:36 +0200 Subject: [PATCH 5/5] Improve error message and fix test so that it tests what it was supposed to do --- ext/spl/spl_directory.c | 4 ++-- .../tests/SplFileObject_getCurrentLine_invalid_override.phpt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index a3f6b21405e6b..d668b4cc42ecb 100644 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -1957,8 +1957,8 @@ static int spl_filesystem_file_read_line_ex(zval * this_ptr, spl_filesystem_obje } if (Z_TYPE(retval) != IS_STRING) { - zend_type_error("getCurrentLine(): Return value must be of type string, %s returned", - zend_zval_type_name(&retval)); + zend_type_error("%s::getCurrentLine(): Return value must be of type string, %s returned", + ZSTR_VAL(Z_OBJCE_P(ZEND_THIS)->name), zend_zval_type_name(&retval)); zval_ptr_dtor(&retval); return FAILURE; } diff --git a/ext/spl/tests/SplFileObject_getCurrentLine_invalid_override.phpt b/ext/spl/tests/SplFileObject_getCurrentLine_invalid_override.phpt index 3d27eb834f39a..3501816366f8a 100644 --- a/ext/spl/tests/SplFileObject_getCurrentLine_invalid_override.phpt +++ b/ext/spl/tests/SplFileObject_getCurrentLine_invalid_override.phpt @@ -5,7 +5,7 @@ Invalid SplFileObject::getCurrentLine() return type class MySplFileObject extends SplFileObject { #[ReturnTypeWillChange] - public function getCurrentLine(): string { + public function getCurrentLine(): array { return [1, 2, 3]; } }