Use more specific return types in SPL

This commit is contained in:
George Peter Banyard 2022-04-11 13:21:40 +01:00
parent c12da039b5
commit 8dbfb15f7c
5 changed files with 29 additions and 27 deletions

View file

@ -279,10 +279,10 @@ class SplFileObject extends SplFileInfo implements RecursiveIterator, SeekableIt
public function getMaxLineLen(): int {}
/** @tentative-return-type */
public function hasChildren(): bool {}
public function hasChildren(): false {}
/** @tentative-return-type */
public function getChildren(): ?RecursiveIterator {}
public function getChildren(): null {}
/** @tentative-return-type */
public function seek(int $line): void {}

View file

@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: 3f2caf1c46760d8ef629ccb2e94ab0dba09f713b */
* Stub hash: 3ada856cfa2e50708b43125f819706176b1953f7 */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo___construct, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
@ -254,9 +254,10 @@ ZEND_END_ARG_INFO()
#define arginfo_class_SplFileObject_getMaxLineLen arginfo_class_FilesystemIterator_getFlags
#define arginfo_class_SplFileObject_hasChildren arginfo_class_SplFileInfo_isWritable
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileObject_hasChildren, 0, 0, IS_FALSE, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(arginfo_class_SplFileObject_getChildren, 0, 0, RecursiveIterator, 1)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_SplFileObject_getChildren, 0, 0, MAY_BE_NULL)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SplFileObject_seek, 0, 1, IS_VOID, 0)

View file

@ -14,7 +14,7 @@ class EmptyIterator implements Iterator
public function key(): never {}
/** @tentative-return-type */
public function valid(): bool {}
public function valid(): false {}
/** @tentative-return-type */
public function rewind(): void {}

View file

@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: 889a6eed2d62fbb6af168146840189d37765dbaa */
* Stub hash: ca94fd0da2a2ed5ddd7e0a40b377ff18dd9e2ced */
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_EmptyIterator_current, 0, 0, IS_NEVER, 0)
ZEND_END_ARG_INFO()
@ -9,7 +9,7 @@ ZEND_END_ARG_INFO()
#define arginfo_class_EmptyIterator_key arginfo_class_EmptyIterator_current
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_EmptyIterator_valid, 0, 0, _IS_BOOL, 0)
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_EmptyIterator_valid, 0, 0, IS_FALSE, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_EmptyIterator_rewind arginfo_class_EmptyIterator_next
@ -19,19 +19,20 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_CallbackFilterIterator___construct, 0, 0, 2
ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_CallbackFilterIterator_accept arginfo_class_EmptyIterator_valid
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_CallbackFilterIterator_accept, 0, 0, _IS_BOOL, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveCallbackFilterIterator___construct, 0, 0, 2)
ZEND_ARG_OBJ_INFO(0, iterator, RecursiveIterator, 0)
ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_RecursiveCallbackFilterIterator_hasChildren arginfo_class_EmptyIterator_valid
#define arginfo_class_RecursiveCallbackFilterIterator_hasChildren arginfo_class_CallbackFilterIterator_accept
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(arginfo_class_RecursiveCallbackFilterIterator_getChildren, 0, 0, RecursiveCallbackFilterIterator, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_RecursiveIterator_hasChildren arginfo_class_EmptyIterator_valid
#define arginfo_class_RecursiveIterator_hasChildren arginfo_class_CallbackFilterIterator_accept
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(arginfo_class_RecursiveIterator_getChildren, 0, 0, RecursiveIterator, 1)
ZEND_END_ARG_INFO()
@ -44,7 +45,7 @@ ZEND_END_ARG_INFO()
#define arginfo_class_RecursiveIteratorIterator_rewind arginfo_class_EmptyIterator_next
#define arginfo_class_RecursiveIteratorIterator_valid arginfo_class_EmptyIterator_valid
#define arginfo_class_RecursiveIteratorIterator_valid arginfo_class_CallbackFilterIterator_accept
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_RecursiveIteratorIterator_key, 0, 0, IS_MIXED, 0)
ZEND_END_ARG_INFO()
@ -67,7 +68,7 @@ ZEND_END_ARG_INFO()
#define arginfo_class_RecursiveIteratorIterator_endIteration arginfo_class_EmptyIterator_next
#define arginfo_class_RecursiveIteratorIterator_callHasChildren arginfo_class_EmptyIterator_valid
#define arginfo_class_RecursiveIteratorIterator_callHasChildren arginfo_class_CallbackFilterIterator_accept
#define arginfo_class_RecursiveIteratorIterator_callGetChildren arginfo_class_RecursiveIterator_getChildren
@ -96,7 +97,7 @@ ZEND_END_ARG_INFO()
#define arginfo_class_IteratorIterator_rewind arginfo_class_EmptyIterator_next
#define arginfo_class_IteratorIterator_valid arginfo_class_EmptyIterator_valid
#define arginfo_class_IteratorIterator_valid arginfo_class_CallbackFilterIterator_accept
#define arginfo_class_IteratorIterator_key arginfo_class_RecursiveIteratorIterator_key
@ -104,7 +105,7 @@ ZEND_END_ARG_INFO()
#define arginfo_class_IteratorIterator_next arginfo_class_EmptyIterator_next
#define arginfo_class_FilterIterator_accept arginfo_class_EmptyIterator_valid
#define arginfo_class_FilterIterator_accept arginfo_class_CallbackFilterIterator_accept
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FilterIterator___construct, 0, 0, 1)
ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
@ -118,14 +119,14 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveFilterIterator___construct, 0, 0,
ZEND_ARG_OBJ_INFO(0, iterator, RecursiveIterator, 0)
ZEND_END_ARG_INFO()
#define arginfo_class_RecursiveFilterIterator_hasChildren arginfo_class_EmptyIterator_valid
#define arginfo_class_RecursiveFilterIterator_hasChildren arginfo_class_CallbackFilterIterator_accept
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(arginfo_class_RecursiveFilterIterator_getChildren, 0, 0, RecursiveFilterIterator, 1)
ZEND_END_ARG_INFO()
#define arginfo_class_ParentIterator___construct arginfo_class_RecursiveFilterIterator___construct
#define arginfo_class_ParentIterator_accept arginfo_class_EmptyIterator_valid
#define arginfo_class_ParentIterator_accept arginfo_class_CallbackFilterIterator_accept
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_SeekableIterator_seek, 0, 1, IS_VOID, 0)
ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
@ -139,7 +140,7 @@ ZEND_END_ARG_INFO()
#define arginfo_class_LimitIterator_rewind arginfo_class_EmptyIterator_next
#define arginfo_class_LimitIterator_valid arginfo_class_EmptyIterator_valid
#define arginfo_class_LimitIterator_valid arginfo_class_CallbackFilterIterator_accept
#define arginfo_class_LimitIterator_next arginfo_class_EmptyIterator_next
@ -156,11 +157,11 @@ ZEND_END_ARG_INFO()
#define arginfo_class_CachingIterator_rewind arginfo_class_EmptyIterator_next
#define arginfo_class_CachingIterator_valid arginfo_class_EmptyIterator_valid
#define arginfo_class_CachingIterator_valid arginfo_class_CallbackFilterIterator_accept
#define arginfo_class_CachingIterator_next arginfo_class_EmptyIterator_next
#define arginfo_class_CachingIterator_hasNext arginfo_class_EmptyIterator_valid
#define arginfo_class_CachingIterator_hasNext arginfo_class_CallbackFilterIterator_accept
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_CachingIterator___toString, 0, 0, IS_STRING, 0)
ZEND_END_ARG_INFO()
@ -198,7 +199,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveCachingIterator___construct, 0, 0,
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "RecursiveCachingIterator::CALL_TOSTRING")
ZEND_END_ARG_INFO()
#define arginfo_class_RecursiveCachingIterator_hasChildren arginfo_class_EmptyIterator_valid
#define arginfo_class_RecursiveCachingIterator_hasChildren arginfo_class_CallbackFilterIterator_accept
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(arginfo_class_RecursiveCachingIterator_getChildren, 0, 0, RecursiveCachingIterator, 1)
ZEND_END_ARG_INFO()
@ -207,7 +208,7 @@ ZEND_END_ARG_INFO()
#define arginfo_class_NoRewindIterator_rewind arginfo_class_EmptyIterator_next
#define arginfo_class_NoRewindIterator_valid arginfo_class_EmptyIterator_valid
#define arginfo_class_NoRewindIterator_valid arginfo_class_CallbackFilterIterator_accept
#define arginfo_class_NoRewindIterator_key arginfo_class_RecursiveIteratorIterator_key
@ -224,7 +225,7 @@ ZEND_END_ARG_INFO()
#define arginfo_class_AppendIterator_rewind arginfo_class_EmptyIterator_next
#define arginfo_class_AppendIterator_valid arginfo_class_EmptyIterator_valid
#define arginfo_class_AppendIterator_valid arginfo_class_CallbackFilterIterator_accept
#define arginfo_class_AppendIterator_current arginfo_class_RecursiveIteratorIterator_key
@ -248,7 +249,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RegexIterator___construct, 0, 0, 2)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pregFlags, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()
#define arginfo_class_RegexIterator_accept arginfo_class_EmptyIterator_valid
#define arginfo_class_RegexIterator_accept arginfo_class_CallbackFilterIterator_accept
#define arginfo_class_RegexIterator_getMode arginfo_class_RecursiveIteratorIterator_getDepth
@ -277,9 +278,9 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveRegexIterator___construct, 0, 0, 2
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pregFlags, IS_LONG, 0, "0")
ZEND_END_ARG_INFO()
#define arginfo_class_RecursiveRegexIterator_accept arginfo_class_EmptyIterator_valid
#define arginfo_class_RecursiveRegexIterator_accept arginfo_class_CallbackFilterIterator_accept
#define arginfo_class_RecursiveRegexIterator_hasChildren arginfo_class_EmptyIterator_valid
#define arginfo_class_RecursiveRegexIterator_hasChildren arginfo_class_CallbackFilterIterator_accept
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(arginfo_class_RecursiveRegexIterator_getChildren, 0, 0, RecursiveRegexIterator, 0)
ZEND_END_ARG_INFO()

View file

@ -10,7 +10,7 @@ class EmptyIteratorEx extends EmptyIterator
echo __METHOD__ . "\n";
parent::rewind();
}
function valid(): bool
function valid(): false
{
echo __METHOD__ . "\n";
return parent::valid();