Skip to content

Commit b73f139

Browse files
authored
Declare ext/spl constants in stubs (#9226)
1 parent 6a7fd48 commit b73f139

25 files changed

+674
-121
lines changed

ext/spl/spl_array.c

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@
2727
#include "zend_exceptions.h"
2828

2929
#include "php_spl.h"
30-
#include "spl_array_arginfo.h"
3130
#include "spl_functions.h"
3231
#include "spl_engine.h"
3332
#include "spl_iterators.h"
3433
#include "spl_array.h"
34+
#include "spl_array_arginfo.h"
3535
#include "spl_exceptions.h"
3636

3737
zend_object_handlers spl_handler_ArrayObject;
@@ -41,18 +41,6 @@ zend_object_handlers spl_handler_ArrayIterator;
4141
PHPAPI zend_class_entry *spl_ce_ArrayIterator;
4242
PHPAPI zend_class_entry *spl_ce_RecursiveArrayIterator;
4343

44-
#define SPL_ARRAY_STD_PROP_LIST 0x00000001
45-
#define SPL_ARRAY_ARRAY_AS_PROPS 0x00000002
46-
#define SPL_ARRAY_CHILD_ARRAYS_ONLY 0x00000004
47-
#define SPL_ARRAY_IS_SELF 0x01000000
48-
#define SPL_ARRAY_USE_OTHER 0x02000000
49-
#define SPL_ARRAY_INT_MASK 0xFFFF0000
50-
#define SPL_ARRAY_CLONE_MASK 0x0100FFFF
51-
52-
#define SPL_ARRAY_METHOD_NO_ARG 0
53-
#define SPL_ARRAY_METHOD_CALLBACK_ARG 1
54-
#define SPL_ARRAY_METHOD_SORT_FLAGS_ARG 2
55-
5644
typedef struct _spl_array_object {
5745
zval array;
5846
uint32_t ht_iter;
@@ -1819,18 +1807,10 @@ PHP_MINIT_FUNCTION(spl_array)
18191807

18201808
memcpy(&spl_handler_ArrayIterator, &spl_handler_ArrayObject, sizeof(zend_object_handlers));
18211809

1822-
REGISTER_SPL_CLASS_CONST_LONG(ArrayObject, "STD_PROP_LIST", SPL_ARRAY_STD_PROP_LIST);
1823-
REGISTER_SPL_CLASS_CONST_LONG(ArrayObject, "ARRAY_AS_PROPS", SPL_ARRAY_ARRAY_AS_PROPS);
1824-
1825-
REGISTER_SPL_CLASS_CONST_LONG(ArrayIterator, "STD_PROP_LIST", SPL_ARRAY_STD_PROP_LIST);
1826-
REGISTER_SPL_CLASS_CONST_LONG(ArrayIterator, "ARRAY_AS_PROPS", SPL_ARRAY_ARRAY_AS_PROPS);
1827-
18281810
spl_ce_RecursiveArrayIterator = register_class_RecursiveArrayIterator(spl_ce_ArrayIterator, spl_ce_RecursiveIterator);
18291811
spl_ce_RecursiveArrayIterator->create_object = spl_array_object_new;
18301812
spl_ce_RecursiveArrayIterator->get_iterator = spl_array_get_iterator;
18311813

1832-
REGISTER_SPL_CLASS_CONST_LONG(RecursiveArrayIterator, "CHILD_ARRAYS_ONLY", SPL_ARRAY_CHILD_ARRAYS_ONLY);
1833-
18341814
return SUCCESS;
18351815
}
18361816
/* }}} */

ext/spl/spl_array.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,18 @@
2121
#include "php_spl.h"
2222
#include "spl_iterators.h"
2323

24+
#define SPL_ARRAY_STD_PROP_LIST 0x00000001
25+
#define SPL_ARRAY_ARRAY_AS_PROPS 0x00000002
26+
#define SPL_ARRAY_CHILD_ARRAYS_ONLY 0x00000004
27+
#define SPL_ARRAY_IS_SELF 0x01000000
28+
#define SPL_ARRAY_USE_OTHER 0x02000000
29+
#define SPL_ARRAY_INT_MASK 0xFFFF0000
30+
#define SPL_ARRAY_CLONE_MASK 0x0100FFFF
31+
32+
#define SPL_ARRAY_METHOD_NO_ARG 0
33+
#define SPL_ARRAY_METHOD_CALLBACK_ARG 1
34+
#define SPL_ARRAY_METHOD_SORT_FLAGS_ARG 2
35+
2436
extern PHPAPI zend_class_entry *spl_ce_ArrayObject;
2537
extern PHPAPI zend_class_entry *spl_ce_ArrayIterator;
2638
extern PHPAPI zend_class_entry *spl_ce_RecursiveArrayIterator;

ext/spl/spl_array.stub.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@
44

55
class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Countable
66
{
7+
/**
8+
* @var int
9+
* @cvalue SPL_ARRAY_STD_PROP_LIST
10+
*/
11+
const STD_PROP_LIST = UNKNOWN;
12+
/**
13+
* @var int
14+
* @cvalue SPL_ARRAY_ARRAY_AS_PROPS
15+
*/
16+
const ARRAY_AS_PROPS = UNKNOWN;
17+
718
public function __construct(array|object $array = [], int $flags = 0, string $iteratorClass = ArrayIterator::class) {}
819

920
/** @tentative-return-type */
@@ -81,6 +92,17 @@ public function __debugInfo(): array {}
8192

8293
class ArrayIterator implements SeekableIterator, ArrayAccess, Serializable, Countable
8394
{
95+
/**
96+
* @var int
97+
* @cvalue SPL_ARRAY_STD_PROP_LIST
98+
*/
99+
public const STD_PROP_LIST = UNKNOWN;
100+
/**
101+
* @var int
102+
* @cvalue SPL_ARRAY_ARRAY_AS_PROPS
103+
*/
104+
public const ARRAY_AS_PROPS = UNKNOWN;
105+
84106
public function __construct(array|object $array = [], int $flags = 0) {}
85107

86108
/**
@@ -224,6 +246,12 @@ public function __debugInfo(): array {}
224246

225247
class RecursiveArrayIterator extends ArrayIterator implements RecursiveIterator
226248
{
249+
/**
250+
* @var int
251+
* @cvalue SPL_ARRAY_CHILD_ARRAYS_ONLY
252+
*/
253+
public const CHILD_ARRAYS_ONLY = UNKNOWN;
254+
227255
/** @tentative-return-type */
228256
public function hasChildren(): bool {}
229257

ext/spl/spl_array_arginfo.h

Lines changed: 31 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ext/spl/spl_directory.c

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2772,19 +2772,6 @@ PHP_MINIT_FUNCTION(spl_directory)
27722772
spl_ce_FilesystemIterator->create_object = spl_filesystem_object_new;
27732773
spl_ce_FilesystemIterator->get_iterator = spl_filesystem_tree_get_iterator;
27742774

2775-
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "CURRENT_MODE_MASK", SPL_FILE_DIR_CURRENT_MODE_MASK);
2776-
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "CURRENT_AS_PATHNAME", SPL_FILE_DIR_CURRENT_AS_PATHNAME);
2777-
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "CURRENT_AS_FILEINFO", SPL_FILE_DIR_CURRENT_AS_FILEINFO);
2778-
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "CURRENT_AS_SELF", SPL_FILE_DIR_CURRENT_AS_SELF);
2779-
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "KEY_MODE_MASK", SPL_FILE_DIR_KEY_MODE_MASK);
2780-
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "KEY_AS_PATHNAME", SPL_FILE_DIR_KEY_AS_PATHNAME);
2781-
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "FOLLOW_SYMLINKS", SPL_FILE_DIR_FOLLOW_SYMLINKS);
2782-
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "KEY_AS_FILENAME", SPL_FILE_DIR_KEY_AS_FILENAME);
2783-
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "NEW_CURRENT_AND_KEY", SPL_FILE_DIR_KEY_AS_FILENAME|SPL_FILE_DIR_CURRENT_AS_FILEINFO);
2784-
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "OTHER_MODE_MASK", SPL_FILE_DIR_OTHERS_MASK);
2785-
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "SKIP_DOTS", SPL_FILE_DIR_SKIPDOTS);
2786-
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "UNIX_PATHS", SPL_FILE_DIR_UNIXPATHS);
2787-
27882775
spl_ce_RecursiveDirectoryIterator = register_class_RecursiveDirectoryIterator(spl_ce_FilesystemIterator, spl_ce_RecursiveIterator);
27892776
spl_ce_RecursiveDirectoryIterator->create_object = spl_filesystem_object_new;
27902777

@@ -2800,11 +2787,6 @@ PHP_MINIT_FUNCTION(spl_directory)
28002787
spl_ce_SplFileObject = register_class_SplFileObject(spl_ce_SplFileInfo, spl_ce_RecursiveIterator, spl_ce_SeekableIterator);
28012788
spl_ce_SplFileObject->create_object = spl_filesystem_object_new_check;
28022789

2803-
REGISTER_SPL_CLASS_CONST_LONG(SplFileObject, "DROP_NEW_LINE", SPL_FILE_OBJECT_DROP_NEW_LINE);
2804-
REGISTER_SPL_CLASS_CONST_LONG(SplFileObject, "READ_AHEAD", SPL_FILE_OBJECT_READ_AHEAD);
2805-
REGISTER_SPL_CLASS_CONST_LONG(SplFileObject, "SKIP_EMPTY", SPL_FILE_OBJECT_SKIP_EMPTY);
2806-
REGISTER_SPL_CLASS_CONST_LONG(SplFileObject, "READ_CSV", SPL_FILE_OBJECT_READ_CSV);
2807-
28082790
spl_ce_SplTempFileObject = register_class_SplTempFileObject(spl_ce_SplFileObject);
28092791
spl_ce_SplTempFileObject->create_object = spl_filesystem_object_new_check;
28102792

ext/spl/spl_directory.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ struct _spl_filesystem_object {
105105
#define SPL_FILE_DIR_KEY_AS_PATHNAME 0x00000000 /* make RecursiveDirectoryTree::key() return getPathname() */
106106
#define SPL_FILE_DIR_KEY_AS_FILENAME 0x00000100 /* make RecursiveDirectoryTree::key() return getFilename() */
107107
#define SPL_FILE_DIR_KEY_MODE_MASK 0x00000F00 /* mask RecursiveDirectoryTree::key() */
108+
#define SPL_FILE_NEW_CURRENT_AND_KEY SPL_FILE_DIR_KEY_AS_FILENAME|SPL_FILE_DIR_CURRENT_AS_FILEINFO
108109
#define SPL_FILE_DIR_KEY(intern,mode) ((intern->flags&SPL_FILE_DIR_KEY_MODE_MASK)==mode)
109110

110111
#define SPL_FILE_DIR_SKIPDOTS 0x00001000 /* Tells whether it should skip dots or not */

ext/spl/spl_directory.stub.php

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,67 @@ public function __toString(): string {}
150150

151151
class FilesystemIterator extends DirectoryIterator
152152
{
153+
/**
154+
* @var int
155+
* @cvalue SPL_FILE_DIR_CURRENT_MODE_MASK
156+
*/
157+
public const CURRENT_MODE_MASK = UNKNOWN;
158+
/**
159+
* @var int
160+
* @cvalue SPL_FILE_DIR_CURRENT_AS_PATHNAME
161+
*/
162+
public const CURRENT_AS_PATHNAME = UNKNOWN;
163+
/**
164+
* @var int
165+
* @cvalue SPL_FILE_DIR_CURRENT_AS_FILEINFO
166+
*/
167+
public const CURRENT_AS_FILEINFO = UNKNOWN;
168+
/**
169+
* @var int
170+
* @cvalue SPL_FILE_DIR_CURRENT_AS_SELF
171+
*/
172+
public const CURRENT_AS_SELF = UNKNOWN;
173+
/**
174+
* @var int
175+
* @cvalue SPL_FILE_DIR_KEY_MODE_MASK
176+
*/
177+
public const KEY_MODE_MASK = UNKNOWN;
178+
/**
179+
* @var int
180+
* @cvalue SPL_FILE_DIR_KEY_AS_PATHNAME
181+
*/
182+
public const KEY_AS_PATHNAME = UNKNOWN;
183+
/**
184+
* @var int
185+
* @cvalue SPL_FILE_DIR_FOLLOW_SYMLINKS
186+
*/
187+
public const FOLLOW_SYMLINKS = UNKNOWN;
188+
/**
189+
* @var int
190+
* @cvalue SPL_FILE_DIR_KEY_AS_FILENAME
191+
*/
192+
public const KEY_AS_FILENAME = UNKNOWN;
193+
/**
194+
* @var int
195+
* @cvalue SPL_FILE_NEW_CURRENT_AND_KEY
196+
*/
197+
public const NEW_CURRENT_AND_KEY = UNKNOWN;
198+
/**
199+
* @var int
200+
* @cvalue SPL_FILE_DIR_OTHERS_MASK
201+
*/
202+
public const OTHER_MODE_MASK = UNKNOWN;
203+
/**
204+
* @var int
205+
* @cvalue SPL_FILE_DIR_SKIPDOTS
206+
*/
207+
public const SKIP_DOTS = UNKNOWN;
208+
/**
209+
* @var int
210+
* @cvalue SPL_FILE_DIR_UNIXPATHS
211+
*/
212+
public const UNIX_PATHS = UNKNOWN;
213+
153214
public function __construct(string $directory, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS) {}
154215

155216
/** @tentative-return-type */
@@ -197,6 +258,27 @@ public function count(): int {}
197258

198259
class SplFileObject extends SplFileInfo implements RecursiveIterator, SeekableIterator
199260
{
261+
/**
262+
* @var int
263+
* @cvalue SPL_FILE_OBJECT_DROP_NEW_LINE
264+
*/
265+
public const DROP_NEW_LINE = UNKNOWN;
266+
/**
267+
* @var int
268+
* @cvalue SPL_FILE_OBJECT_READ_AHEAD
269+
*/
270+
public const READ_AHEAD = UNKNOWN;
271+
/**
272+
* @var int
273+
* @cvalue SPL_FILE_OBJECT_SKIP_EMPTY
274+
*/
275+
public const SKIP_EMPTY = UNKNOWN;
276+
/**
277+
* @var int
278+
* @cvalue SPL_FILE_OBJECT_READ_CSV
279+
*/
280+
public const READ_CSV = UNKNOWN;
281+
200282
/** @param resource|null $context */
201283
public function __construct(string $filename, string $mode = "r", bool $useIncludePath = false, $context = null) {}
202284

0 commit comments

Comments
 (0)