Skip to content

Commit 5f6d952

Browse files
committed
Fix getIterator and arginfo
1 parent ab12d1e commit 5f6d952

File tree

9 files changed

+36
-20
lines changed

9 files changed

+36
-20
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
.deps
1616
.idea
1717
.libs
18+
.phpunit.result.cache
1819
/include
1920
acinclude.m4
2021
aclocal.m4
@@ -47,4 +48,4 @@ modules
4748
run-tests.php
4849
test
4950
vendor
50-
~.tgz
51+
~.tgz

src/php/arginfo.h

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,31 @@ ZEND_ARG_VARIADIC_INFO(0, v) \
8383
ZEND_END_ARG_INFO()
8484

8585
#if PHP_VERSION_ID >= 80000
86-
#define DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \
86+
#define DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \
8787
static const zend_internal_arg_info arginfo_##name[] = { \
8888
{ (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_CLASS_CONST(PHP_DS_NS_NAME#class_name, allow_null, 0), pass_by_ref},
8989
#elif PHP_VERSION_ID >= 70200
90+
#define DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \
91+
static const zend_internal_arg_info arginfo_##name[] = { \
92+
{ (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_ENCODE_CLASS_CONST(PHP_DS_NS_NAME#class_name, allow_null), pass_by_ref, 0 },
93+
#else
94+
#define DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \
95+
static const zend_internal_arg_info arginfo_##name[] = { \
96+
{ (const char*)(zend_uintptr_t)(required_num_args), PHP_DS_NS_NAME#class_name, IS_OBJECT, pass_by_ref, allow_null, 0 },
97+
#endif
98+
99+
#if PHP_VERSION_ID >= 80000
100+
#define DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \
101+
static const zend_internal_arg_info arginfo_##name[] = { \
102+
{ (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_CLASS_CONST(class_name, allow_null, 0), pass_by_ref},
103+
#elif PHP_VERSION_ID >= 70200
90104
#define DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \
91105
static const zend_internal_arg_info arginfo_##name[] = { \
92-
{ (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_ENCODE_CLASS_CONST(PHP_DS_NS_NAME#class_name, allow_null), pass_by_ref, 0 },
106+
{ (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_ENCODE_CLASS_CONST(class_name, allow_null), pass_by_ref, 0 },
93107
#else
94108
#define DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \
95109
static const zend_internal_arg_info arginfo_##name[] = { \
96-
{ (const char*)(zend_uintptr_t)(required_num_args), PHP_DS_NS_NAME#class_name, IS_OBJECT, pass_by_ref, allow_null, 0 },
110+
{ (const char*)(zend_uintptr_t)(required_num_args), class_name, IS_OBJECT, pass_by_ref, allow_null, 0 },
97111
#endif
98112

99113
#if PHP_VERSION_ID >= 80000
@@ -116,12 +130,12 @@ ZEND_END_ARG_INFO()
116130
ZEND_END_ARG_INFO()
117131

118132
#define ARGINFO_CALLABLE_RETURN_DS(name, c, col) \
119-
DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, 1, col, 0) \
133+
DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 1, col, 0) \
120134
ZEND_ARG_TYPE_INFO(0, c, IS_CALLABLE, 0) \
121135
ZEND_END_ARG_INFO()
122136

123137
#define ARGINFO_OPTIONAL_ZVAL_RETURN_DS(name, z, col) \
124-
DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, 0, col, 0) \
138+
DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 0, col, 0) \
125139
ZEND_ARG_INFO(0, z) \
126140
ZEND_END_ARG_INFO()
127141

@@ -131,23 +145,23 @@ ZEND_END_ARG_INFO()
131145
ZEND_END_ARG_INFO()
132146

133147
#define ARGINFO_ZVAL_RETURN_DS(name, z, col) \
134-
DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, 1, col, 0) \
148+
DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 1, col, 0) \
135149
ZEND_ARG_INFO(0, z) \
136150
ZEND_END_ARG_INFO()
137151

138152
#define ARGINFO_OPTIONAL_CALLABLE_RETURN_DS(name, c, col) \
139-
DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, 0, col, 0) \
153+
DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 0, col, 0) \
140154
ZEND_ARG_TYPE_INFO(0, c, IS_CALLABLE, 1) \
141155
ZEND_END_ARG_INFO()
142156

143157
#define ARGINFO_LONG_OPTIONAL_LONG_RETURN_DS(name, i1, i2, col) \
144-
DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, 1, col, 0) \
158+
DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 1, col, 0) \
145159
ZEND_ARG_TYPE_INFO(0, i1, IS_LONG, 0) \
146160
ZEND_ARG_TYPE_INFO(0, i2, IS_LONG, 1) \
147161
ZEND_END_ARG_INFO()
148162

149163
#define ARGINFO_LONG_RETURN_DS(name, i, col) \
150-
DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, 1, col, 0) \
164+
DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 1, col, 0) \
151165
ZEND_ARG_TYPE_INFO(0, i, IS_LONG, 0) \
152166
ZEND_END_ARG_INFO()
153167

@@ -160,11 +174,11 @@ ZEND_END_ARG_INFO()
160174
ZEND_END_ARG_INFO()
161175

162176
#define ARGINFO_NONE_RETURN_DS(name, class_name) \
163-
DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, 0, class_name, 0) \
177+
DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 0, class_name, 0) \
164178
ZEND_END_ARG_INFO()
165179

166180
#define ARGINFO_NONE_RETURN_OBJ(name, class_name) \
167-
DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, 0, class_name, 1) \
181+
DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, 0, #class_name, 1) \
168182
ZEND_END_ARG_INFO()
169183

170184
#define ARGINFO_NONE_RETURN_BOOL(name) \
@@ -181,7 +195,7 @@ ZEND_END_ARG_INFO()
181195
ZEND_END_ARG_INFO()
182196

183197
#define ARGINFO_DS_RETURN_DS(name, obj, cls, col) \
184-
DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, 1, col, 0) \
198+
DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, 0, 1, col, 0) \
185199
ZEND_ARG_OBJ_INFO(0, obj, Ds\\cls, 0) \
186200
ZEND_END_ARG_INFO()
187201

src/php/classes/php_deque_ce.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,8 @@ METHOD(jsonSerialize)
265265

266266
METHOD(getIterator) {
267267
PARSE_NONE;
268-
zend_create_internal_iterator_zval(return_value, ZEND_THIS);
268+
// zend_object_iterator *iterator = php_ds_deque_get_iterator(php_ds_deque_ce, ZEND_THIS, 0);
269+
ZVAL_COPY(return_value, ZEND_THIS);
269270
}
270271

271272
void php_ds_register_deque()

src/php/classes/php_map_ce.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ METHOD(xor)
282282

283283
METHOD(getIterator) {
284284
PARSE_NONE;
285-
zend_create_internal_iterator_zval(return_value, ZEND_THIS);
285+
ZVAL_COPY(return_value, ZEND_THIS);
286286
}
287287

288288
void php_ds_register_map()

src/php/classes/php_priority_queue_ce.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ METHOD(jsonSerialize)
8787

8888
METHOD(getIterator) {
8989
PARSE_NONE;
90-
zend_create_internal_iterator_zval(return_value, ZEND_THIS);
90+
ZVAL_COPY(return_value, ZEND_THIS);
9191
}
9292

9393
void php_ds_register_priority_queue()

src/php/classes/php_queue_ce.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ METHOD(jsonSerialize)
9191

9292
METHOD(getIterator) {
9393
PARSE_NONE;
94-
zend_create_internal_iterator_zval(return_value, ZEND_THIS);
94+
ZVAL_COPY(return_value, ZEND_THIS);
9595
}
9696

9797
void php_ds_register_queue()

src/php/classes/php_set_ce.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ METHOD(jsonSerialize)
223223

224224
METHOD(getIterator) {
225225
PARSE_NONE;
226-
zend_create_internal_iterator_zval(return_value, ZEND_THIS);
226+
ZVAL_COPY(return_value, ZEND_THIS);
227227
}
228228

229229
void php_ds_register_set()

src/php/classes/php_stack_ce.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ METHOD(jsonSerialize)
9292

9393
METHOD(getIterator) {
9494
PARSE_NONE;
95-
zend_create_internal_iterator_zval(return_value, ZEND_THIS);
95+
ZVAL_COPY(return_value, ZEND_THIS);
9696
}
9797

9898
void php_ds_register_stack()

src/php/classes/php_vector_ce.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ METHOD(unshift)
259259

260260
METHOD(getIterator) {
261261
PARSE_NONE;
262-
zend_create_internal_iterator_zval(return_value, ZEND_THIS);
262+
ZVAL_COPY(return_value, ZEND_THIS);
263263
}
264264

265265
void php_ds_register_vector()

0 commit comments

Comments
 (0)