Skip to content

Commit 6d505d4

Browse files
committed
Add RETURN/RETVAL_COPY_DEREF() macros
These were missing from the set... I think quite a few of these usages don't actually need the DEREF, but I've just kept things as is for now.
1 parent 23b1c4a commit 6d505d4

17 files changed

+62
-84
lines changed

Zend/zend_API.h

+2
Original file line numberDiff line numberDiff line change
@@ -803,6 +803,7 @@ END_EXTERN_C()
803803
#define RETVAL_OBJ_COPY(r) ZVAL_OBJ_COPY(return_value, r)
804804
#define RETVAL_COPY(zv) ZVAL_COPY(return_value, zv)
805805
#define RETVAL_COPY_VALUE(zv) ZVAL_COPY_VALUE(return_value, zv)
806+
#define RETVAL_COPY_DEREF(zv) ZVAL_COPY_DEREF(return_value, zv)
806807
#define RETVAL_ZVAL(zv, copy, dtor) ZVAL_ZVAL(return_value, zv, copy, dtor)
807808
#define RETVAL_FALSE ZVAL_FALSE(return_value)
808809
#define RETVAL_TRUE ZVAL_TRUE(return_value)
@@ -828,6 +829,7 @@ END_EXTERN_C()
828829
#define RETURN_OBJ_COPY(r) do { RETVAL_OBJ_COPY(r); return; } while (0)
829830
#define RETURN_COPY(zv) do { RETVAL_COPY(zv); return; } while (0)
830831
#define RETURN_COPY_VALUE(zv) do { RETVAL_COPY_VALUE(zv); return; } while (0)
832+
#define RETURN_COPY_DEREF(zv) do { RETVAL_COPY_DEREF(zv); return; } while (0)
831833
#define RETURN_ZVAL(zv, copy, dtor) do { RETVAL_ZVAL(zv, copy, dtor); return; } while (0)
832834
#define RETURN_FALSE do { RETVAL_FALSE; return; } while (0)
833835
#define RETURN_TRUE do { RETVAL_TRUE; return; } while (0)

Zend/zend_builtin_functions.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ ZEND_FUNCTION(func_get_arg)
206206
arg = ZEND_CALL_ARG(ex, requested_offset + 1);
207207
}
208208
if (EXPECTED(!Z_ISUNDEF_P(arg))) {
209-
ZVAL_COPY_DEREF(return_value, arg);
209+
RETURN_COPY_DEREF(arg);
210210
}
211211
}
212212
/* }}} */

Zend/zend_generators.c

+4-12
Original file line numberDiff line numberDiff line change
@@ -860,9 +860,7 @@ ZEND_METHOD(Generator, current)
860860

861861
root = zend_generator_get_current(generator);
862862
if (EXPECTED(generator->execute_data != NULL && Z_TYPE(root->value) != IS_UNDEF)) {
863-
zval *value = &root->value;
864-
865-
ZVAL_COPY_DEREF(return_value, value);
863+
RETURN_COPY_DEREF(&root->value);
866864
}
867865
}
868866
/* }}} */
@@ -880,9 +878,7 @@ ZEND_METHOD(Generator, key)
880878

881879
root = zend_generator_get_current(generator);
882880
if (EXPECTED(generator->execute_data != NULL && Z_TYPE(root->key) != IS_UNDEF)) {
883-
zval *key = &root->key;
884-
885-
ZVAL_COPY_DEREF(return_value, key);
881+
RETURN_COPY_DEREF(&root->key);
886882
}
887883
}
888884
/* }}} */
@@ -931,9 +927,7 @@ ZEND_METHOD(Generator, send)
931927

932928
root = zend_generator_get_current(generator);
933929
if (EXPECTED(generator->execute_data)) {
934-
zval *value = &root->value;
935-
936-
ZVAL_COPY_DEREF(return_value, value);
930+
RETURN_COPY_DEREF(&root->value);
937931
}
938932
}
939933
/* }}} */
@@ -963,9 +957,7 @@ ZEND_METHOD(Generator, throw)
963957

964958
root = zend_generator_get_current(generator);
965959
if (generator->execute_data) {
966-
zval *value = &root->value;
967-
968-
ZVAL_COPY_DEREF(return_value, value);
960+
RETURN_COPY_DEREF(&root->value);
969961
}
970962
} else {
971963
/* If the generator is already closed throw the exception in the

Zend/zend_interfaces.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ ZEND_METHOD(InternalIterator, current) {
507507

508508
zval *data = intern->iter->funcs->get_current_data(intern->iter);
509509
if (data) {
510-
ZVAL_COPY_DEREF(return_value, data);
510+
RETURN_COPY_DEREF(data);
511511
}
512512
}
513513

ext/curl/curl_file.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ static void curlfile_get_property(char *name, size_t name_len, INTERNAL_FUNCTION
7171

7272
ZEND_PARSE_PARAMETERS_NONE();
7373
res = zend_read_property(curl_CURLFile_class, Z_OBJ_P(ZEND_THIS), name, name_len, 1, &rv);
74-
ZVAL_COPY_DEREF(return_value, res);
74+
RETURN_COPY_DEREF(res);
7575
}
7676

7777
static void curlfile_set_property(char *name, size_t name_len, INTERNAL_FUNCTION_PARAMETERS)

ext/intl/breakiterator/breakiterator_iterators.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,7 @@ U_CFUNC PHP_METHOD(IntlPartsIterator, getBreakIterator)
281281

282282
INTLITERATOR_METHOD_FETCH_OBJECT;
283283

284-
zval *biter_zval = &ii->iterator->data;
285-
ZVAL_COPY_DEREF(return_value, biter_zval);
284+
RETURN_COPY_DEREF(return_value, &it->iterator->data);
286285
}
287286

288287
U_CFUNC void breakiterator_register_IntlPartsIterator_class(void)

ext/intl/common/common_enum.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ PHP_METHOD(IntlIterator, current)
216216
INTLITERATOR_METHOD_FETCH_OBJECT;
217217
data = ii->iterator->funcs->get_current_data(ii->iterator);
218218
if (data) {
219-
ZVAL_COPY_DEREF(return_value, data);
219+
RETURN_COPY_DEREF(data);
220220
}
221221
}
222222

ext/reflection/php_reflection.c

+13-14
Original file line numberDiff line numberDiff line change
@@ -3775,7 +3775,7 @@ ZEND_METHOD(ReflectionClassConstant, getName)
37753775
RETURN_THROWS();
37763776
}
37773777

3778-
ZVAL_COPY_DEREF(return_value, name);
3778+
RETURN_COPY_DEREF(name);
37793779
}
37803780
/* }}} */
37813781

@@ -4072,17 +4072,16 @@ ZEND_METHOD(ReflectionClass, getStaticPropertyValue)
40724072
prop = zend_std_get_static_property(ce, name, BP_VAR_IS);
40734073
EG(fake_scope) = old_scope;
40744074

4075-
if (!prop) {
4076-
if (def_value) {
4077-
ZVAL_COPY(return_value, def_value);
4078-
} else {
4079-
zend_throw_exception_ex(reflection_exception_ptr, 0,
4080-
"Property %s::$%s does not exist", ZSTR_VAL(ce->name), ZSTR_VAL(name));
4081-
}
4082-
return;
4083-
} else {
4084-
ZVAL_COPY_DEREF(return_value, prop);
4075+
if (prop) {
4076+
RETURN_COPY_DEREF(prop);
4077+
}
4078+
4079+
if (def_value) {
4080+
RETURN_COPY(def_value);
40854081
}
4082+
4083+
zend_throw_exception_ex(reflection_exception_ptr, 0,
4084+
"Property %s::$%s does not exist", ZSTR_VAL(ce->name), ZSTR_VAL(name));
40864085
}
40874086
/* }}} */
40884087

@@ -5568,7 +5567,7 @@ ZEND_METHOD(ReflectionProperty, getValue)
55685567
if (prop_get_flags(ref) & ZEND_ACC_STATIC) {
55695568
member_p = zend_read_static_property_ex(intern->ce, ref->unmangled_name, 0);
55705569
if (member_p) {
5571-
ZVAL_COPY_DEREF(return_value, member_p);
5570+
RETURN_COPY_DEREF(member_p);
55725571
}
55735572
} else {
55745573
zval rv;
@@ -5586,12 +5585,12 @@ ZEND_METHOD(ReflectionProperty, getValue)
55865585

55875586
member_p = zend_read_property_ex(intern->ce, Z_OBJ_P(object), ref->unmangled_name, 0, &rv);
55885587
if (member_p != &rv) {
5589-
ZVAL_COPY_DEREF(return_value, member_p);
5588+
RETURN_COPY_DEREF(member_p);
55905589
} else {
55915590
if (Z_ISREF_P(member_p)) {
55925591
zend_unwrap_reference(member_p);
55935592
}
5594-
ZVAL_COPY_VALUE(return_value, member_p);
5593+
RETURN_COPY_VALUE(member_p);
55955594
}
55965595
}
55975596
}

ext/simplexml/simplexml.c

+2-6
Original file line numberDiff line numberDiff line change
@@ -1998,7 +1998,6 @@ PHP_METHOD(SimpleXMLElement, valid)
19981998
PHP_METHOD(SimpleXMLElement, current)
19991999
{
20002000
php_sxe_object *sxe = Z_SXEOBJ_P(ZEND_THIS);
2001-
zval *data;
20022001

20032002
if (zend_parse_parameters_none() == FAILURE) {
20042003
RETURN_THROWS();
@@ -2009,8 +2008,7 @@ PHP_METHOD(SimpleXMLElement, current)
20092008
RETURN_THROWS();
20102009
}
20112010

2012-
data = &sxe->iter.data;
2013-
ZVAL_COPY_DEREF(return_value, data);
2011+
RETURN_COPY_DEREF(&sxe->iter.data);
20142012
}
20152013
/* }}} */
20162014

@@ -2083,7 +2081,6 @@ PHP_METHOD(SimpleXMLElement, hasChildren)
20832081
PHP_METHOD(SimpleXMLElement, getChildren)
20842082
{
20852083
php_sxe_object *sxe = Z_SXEOBJ_P(ZEND_THIS);
2086-
zval *data;
20872084

20882085
if (zend_parse_parameters_none() == FAILURE) {
20892086
RETURN_THROWS();
@@ -2093,8 +2090,7 @@ PHP_METHOD(SimpleXMLElement, getChildren)
20932090
return; /* return NULL */
20942091
}
20952092

2096-
data = &sxe->iter.data;
2097-
ZVAL_COPY_DEREF(return_value, data);
2093+
RETURN_COPY_DEREF(&sxe->iter.data);
20982094
}
20992095

21002096
static zend_object_handlers sxe_object_handlers;

ext/spl/spl_array.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -665,7 +665,7 @@ PHP_METHOD(ArrayObject, offsetGet)
665665
}
666666
value = spl_array_read_dimension_ex(0, Z_OBJ_P(ZEND_THIS), index, BP_VAR_R, return_value);
667667
if (value != return_value) {
668-
ZVAL_COPY_DEREF(return_value, value);
668+
RETURN_COPY_DEREF(value);
669669
}
670670
} /* }}} */
671671

@@ -1465,7 +1465,7 @@ PHP_METHOD(ArrayIterator, current)
14651465
return;
14661466
}
14671467
}
1468-
ZVAL_COPY_DEREF(return_value, entry);
1468+
RETURN_COPY_DEREF(entry);
14691469
}
14701470
/* }}} */
14711471

ext/spl/spl_dllist.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ PHP_METHOD(SplDoublyLinkedList, top)
575575
RETURN_THROWS();
576576
}
577577

578-
ZVAL_COPY_DEREF(return_value, value);
578+
RETURN_COPY_DEREF(value);
579579
}
580580
/* }}} */
581581

@@ -597,7 +597,7 @@ PHP_METHOD(SplDoublyLinkedList, bottom)
597597
RETURN_THROWS();
598598
}
599599

600-
ZVAL_COPY_DEREF(return_value, value);
600+
RETURN_COPY_DEREF(value);
601601
}
602602
/* }}} */
603603

@@ -708,7 +708,7 @@ PHP_METHOD(SplDoublyLinkedList, offsetGet)
708708
RETURN_THROWS();
709709
}
710710

711-
ZVAL_COPY_DEREF(return_value, &element->data);
711+
RETURN_COPY_DEREF(&element->data);
712712
} /* }}} */
713713

714714
/* {{{ Sets the value at the specified $index to $newval. */
@@ -1001,7 +1001,7 @@ PHP_METHOD(SplDoublyLinkedList, current)
10011001
if (element == NULL || Z_ISUNDEF(element->data)) {
10021002
RETURN_NULL();
10031003
} else {
1004-
ZVAL_COPY_DEREF(return_value, &element->data);
1004+
RETURN_COPY_DEREF(&element->data);
10051005
}
10061006
}
10071007
/* }}} */

ext/spl/spl_fixedarray.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,7 @@ PHP_METHOD(SplFixedArray, offsetGet)
742742
value = spl_fixedarray_object_read_dimension_helper(intern, zindex);
743743

744744
if (value) {
745-
ZVAL_COPY_DEREF(return_value, value);
745+
RETURN_COPY_DEREF(value);
746746
} else {
747747
RETURN_NULL();
748748
}

ext/spl/spl_heap.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -860,7 +860,7 @@ PHP_METHOD(SplHeap, top)
860860
RETURN_THROWS();
861861
}
862862

863-
ZVAL_COPY_DEREF(return_value, value);
863+
RETURN_COPY_DEREF(value);
864864
}
865865
/* }}} */
866866

@@ -1034,7 +1034,7 @@ PHP_METHOD(SplHeap, current)
10341034
RETURN_NULL();
10351035
} else {
10361036
zval *element = spl_heap_elem(intern->heap, 0);
1037-
ZVAL_COPY_DEREF(return_value, element);
1037+
RETURN_COPY_DEREF(element);
10381038
}
10391039
}
10401040
/* }}} */

ext/spl/spl_iterators.c

+12-20
Original file line numberDiff line numberDiff line change
@@ -687,7 +687,7 @@ PHP_METHOD(RecursiveIteratorIterator, current)
687687

688688
data = iterator->funcs->get_current_data(iterator);
689689
if (data) {
690-
ZVAL_COPY_DEREF(return_value, data);
690+
RETURN_COPY_DEREF(data);
691691
}
692692
} /* }}} */
693693

@@ -739,7 +739,7 @@ PHP_METHOD(RecursiveIteratorIterator, getSubIterator)
739739
}
740740

741741
value = &object->iterators[level].zobject;
742-
ZVAL_COPY_DEREF(return_value, value);
742+
RETURN_COPY_DEREF(value);
743743
} /* }}} */
744744

745745
/* {{{ The current active sub iterator */
@@ -754,7 +754,7 @@ PHP_METHOD(RecursiveIteratorIterator, getInnerIterator)
754754

755755
SPL_FETCH_SUB_ELEMENT_ADDR(zobject, object, zobject);
756756

757-
ZVAL_COPY_DEREF(return_value, zobject);
757+
RETURN_COPY_DEREF(zobject);
758758
} /* }}} */
759759

760760
/* {{{ Called when iteration begins (after first rewind() call) */
@@ -1172,8 +1172,7 @@ PHP_METHOD(RecursiveTreeIterator, current)
11721172
SPL_FETCH_SUB_ITERATOR(iterator, object);
11731173
data = iterator->funcs->get_current_data(iterator);
11741174
if (data) {
1175-
ZVAL_COPY_DEREF(return_value, data);
1176-
return;
1175+
RETURN_COPY_DEREF(data);
11771176
} else {
11781177
RETURN_NULL();
11791178
}
@@ -1461,8 +1460,7 @@ PHP_METHOD(IteratorIterator, getInnerIterator)
14611460

14621461
if (!Z_ISUNDEF(intern->inner.zobject)) {
14631462
zval *value = &intern->inner.zobject;
1464-
1465-
ZVAL_COPY_DEREF(return_value, value);
1463+
RETURN_COPY_DEREF(value);
14661464
} else {
14671465
RETURN_NULL();
14681466
}
@@ -1589,9 +1587,7 @@ PHP_METHOD(IteratorIterator, key)
15891587
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
15901588

15911589
if (Z_TYPE(intern->current.key) != IS_UNDEF) {
1592-
zval *value = &intern->current.key;
1593-
1594-
ZVAL_COPY_DEREF(return_value, value);
1590+
RETURN_COPY_DEREF(&intern->current.key);
15951591
} else {
15961592
RETURN_NULL();
15971593
}
@@ -1609,9 +1605,7 @@ PHP_METHOD(IteratorIterator, current)
16091605
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
16101606

16111607
if (Z_TYPE(intern->current.data) != IS_UNDEF) {
1612-
zval *value = &intern->current.data;
1613-
1614-
ZVAL_COPY_DEREF(return_value, value);
1608+
RETURN_COPY_DEREF(&intern->current.data);
16151609
} else {
16161610
RETURN_NULL();
16171611
}
@@ -2526,7 +2520,7 @@ PHP_METHOD(CachingIterator, offsetGet)
25262520
return;
25272521
}
25282522

2529-
ZVAL_COPY_DEREF(return_value, value);
2523+
RETURN_COPY_DEREF(value);
25302524
}
25312525
/* }}} */
25322526

@@ -2695,7 +2689,7 @@ PHP_METHOD(RecursiveCachingIterator, getChildren)
26952689
if (Z_TYPE(intern->u.caching.zchildren) != IS_UNDEF) {
26962690
zval *value = &intern->u.caching.zchildren;
26972691

2698-
ZVAL_COPY_DEREF(return_value, value);
2692+
RETURN_COPY_DEREF(value);
26992693
} else {
27002694
RETURN_NULL();
27012695
}
@@ -2766,7 +2760,7 @@ PHP_METHOD(NoRewindIterator, current)
27662760
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
27672761
data = intern->inner.iterator->funcs->get_current_data(intern->inner.iterator);
27682762
if (data) {
2769-
ZVAL_COPY_DEREF(return_value, data);
2763+
RETURN_COPY_DEREF(data);
27702764
}
27712765
} /* }}} */
27722766

@@ -2952,9 +2946,7 @@ PHP_METHOD(AppendIterator, current)
29522946

29532947
spl_dual_it_fetch(intern, 1);
29542948
if (Z_TYPE(intern->current.data) != IS_UNDEF) {
2955-
zval *value = &intern->current.data;
2956-
2957-
ZVAL_COPY_DEREF(return_value, value);
2949+
RETURN_COPY_DEREF(&intern->current.data);
29582950
} else {
29592951
RETURN_NULL();
29602952
}
@@ -3033,7 +3025,7 @@ PHP_METHOD(AppendIterator, getArrayIterator)
30333025
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
30343026

30353027
value = &intern->u.append.zarrayit;
3036-
ZVAL_COPY_DEREF(return_value, value);
3028+
RETURN_COPY_DEREF(value);
30373029
} /* }}} */
30383030

30393031
PHPAPI int spl_iterator_apply(zval *obj, spl_iterator_apply_func_t apply_func, void *puser)

0 commit comments

Comments
 (0)