com php-src: Remove unnecessary retval members in SPL: ext/spl/spl_array.c ext/spl/spl_fixedarray.c ext/sp l/spl_heap.c
| From: | Nikita Popov | Date: | Wed, 15 Apr 2015 18:39:08 +0000 |
| Subject: | com php-src: Remove unnecessary retval members in SPL: ext/spl/spl_array.c ext/spl/spl_fixedarray.c ext/sp l/spl_heap.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-86312@lists.php.net to get a copy of this message | ||
Commit: e10be0d0fd6255f12140838cc1c3f724e9778125
Author: Nikita Popov <nikic@php.net> Wed, 15 Apr 2015 20:26:23 +0200
Parents: 47590aba9bd74430eb37e820f47f5ddf3bdee704
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=e10be0d0fd6255f12140838cc1c3f724e9778125
Log:
Remove unnecessary retval members in SPL
This is what the rv params are for. Avoid holding onto values
longer than necessary.
Changed paths:
M ext/spl/spl_array.c
M ext/spl/spl_fixedarray.c
M ext/spl/spl_heap.c
Diff:
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index 8071a71..cee3807 100644
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -64,7 +64,6 @@ PHPAPI zend_class_entry *spl_ce_RecursiveArrayIterator;
typedef struct _spl_array_object {
zval array;
- zval retval;
uint32_t ht_iter;
int ar_flags;
int is_self;
@@ -132,7 +131,6 @@ static void spl_array_object_free_storage(zend_object *object)
zend_object_std_dtor(&intern->std);
zval_ptr_dtor(&intern->array);
- zval_ptr_dtor(&intern->retval);
if (intern->debug_info != NULL) {
zend_hash_destroy(intern->debug_info);
@@ -368,26 +366,25 @@ num_index:
}
} /* }}} */
-static zval *spl_array_read_dimension_ex(int check_inherited, zval *object, zval *offset, int type,
zval *zv) /* {{{ */
+static zval *spl_array_read_dimension_ex(int check_inherited, zval *object, zval *offset, int type,
zval *rv) /* {{{ */
{
zval *ret;
if (check_inherited) {
spl_array_object *intern = Z_SPLARRAY_P(object);
if (intern->fptr_offset_get) {
- zval rv, tmp;
+ zval tmp;
if (!offset) {
ZVAL_UNDEF(&tmp);
offset = &tmp;
} else {
SEPARATE_ARG_IF_REF(offset);
}
- zend_call_method_with_1_params(object, Z_OBJCE_P(object), &intern->fptr_offset_get,
"offsetGet", &rv, offset);
+ zend_call_method_with_1_params(object, Z_OBJCE_P(object), &intern->fptr_offset_get,
"offsetGet", rv, offset);
zval_ptr_dtor(offset);
- if (!Z_ISUNDEF(rv)) {
- zval_ptr_dtor(&intern->retval);
- ZVAL_ZVAL(&intern->retval, &rv, 0, 0);
- return &intern->retval;
+
+ if (!Z_ISUNDEF_P(rv)) {
+ return rv;
}
return &EG(uninitialized_zval);
}
@@ -663,7 +660,13 @@ num_index:
}
}
- return check_empty ? zend_is_true(value) : Z_TYPE_P(value) != IS_NULL;
+ {
+ zend_bool result = check_empty ? zend_is_true(value) : Z_TYPE_P(value) != IS_NULL;
+ if (value == &rv) {
+ zval_ptr_dtor(&rv);
+ }
+ return result;
+ }
} /* }}} */
static int spl_array_has_dimension(zval *object, zval *offset, int check_empty) /* {{{ */
@@ -1371,10 +1374,8 @@ int spl_array_object_count_elements(zval *object, zend_long *count) /* {{{ */
zval rv;
zend_call_method_with_0_params(object, intern->std.ce, &intern->fptr_count,
"count", &rv);
if (Z_TYPE(rv) != IS_UNDEF) {
- zval_ptr_dtor(&intern->retval);
- ZVAL_ZVAL(&intern->retval, &rv, 0, 0);
- convert_to_long(&intern->retval);
- *count = (zend_long)Z_LVAL(intern->retval);
+ *count = zval_get_long(&rv);
+ zval_ptr_dtor(&rv);
return SUCCESS;
}
*count = 0;
diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c
index 48e9d2f..faac492 100644
--- a/ext/spl/spl_fixedarray.c
+++ b/ext/spl/spl_fixedarray.c
@@ -50,7 +50,6 @@ typedef struct _spl_fixedarray { /* {{{ */
typedef struct _spl_fixedarray_object { /* {{{ */
spl_fixedarray *array;
- zval retval;
zend_function *fptr_offset_get;
zend_function *fptr_offset_set;
zend_function *fptr_offset_has;
@@ -208,7 +207,6 @@ static void spl_fixedarray_object_free_storage(zend_object *object) /* {{{ */
}
zend_object_std_dtor(&intern->std);
- zval_ptr_dtor(&intern->retval);
}
/* }}} */
@@ -361,19 +359,17 @@ static zval *spl_fixedarray_object_read_dimension(zval *object, zval *offset,
in
intern = Z_SPLFIXEDARRAY_P(object);
if (intern->fptr_offset_get) {
- zval tmp, rv;
+ zval tmp;
if (!offset) {
ZVAL_UNDEF(&tmp);
offset = &tmp;
} else {
SEPARATE_ARG_IF_REF(offset);
}
- zend_call_method_with_1_params(object, intern->std.ce, &intern->fptr_offset_get,
"offsetGet", &rv, offset);
+ zend_call_method_with_1_params(object, intern->std.ce, &intern->fptr_offset_get,
"offsetGet", rv, offset);
zval_ptr_dtor(offset);
- if (!Z_ISUNDEF(rv)) {
- zval_ptr_dtor(&intern->retval);
- ZVAL_ZVAL(&intern->retval, &rv, 0, 0);
- return &intern->retval;
+ if (!Z_ISUNDEF_P(rv)) {
+ return rv;
}
return &EG(uninitialized_zval);
}
@@ -517,9 +513,9 @@ static int spl_fixedarray_object_has_dimension(zval *object, zval *offset, int c
zend_call_method_with_1_params(object, intern->std.ce, &intern->fptr_offset_has,
"offsetExists", &rv, offset);
zval_ptr_dtor(offset);
if (!Z_ISUNDEF(rv)) {
- zval_ptr_dtor(&intern->retval);
- ZVAL_ZVAL(&intern->retval, &rv, 0, 0);
- return zend_is_true(&intern->retval);
+ zend_bool result = zend_is_true(&rv);
+ zval_ptr_dtor(&rv);
+ return result;
}
return 0;
}
@@ -537,10 +533,8 @@ static int spl_fixedarray_object_count_elements(zval *object, zend_long *count)
zval rv;
zend_call_method_with_0_params(object, intern->std.ce, &intern->fptr_count,
"count", &rv);
if (!Z_ISUNDEF(rv)) {
- zval_ptr_dtor(&intern->retval);
- ZVAL_ZVAL(&intern->retval, &rv, 0, 0);
- convert_to_long(&intern->retval);
- *count = (zend_long) Z_LVAL(intern->retval);
+ *count = zval_get_long(&rv);
+ zval_ptr_dtor(&rv);
return SUCCESS;
}
} else if (intern->array) {
diff --git a/ext/spl/spl_heap.c b/ext/spl/spl_heap.c
index 8e9f3ad..98f4217 100644
--- a/ext/spl/spl_heap.c
+++ b/ext/spl/spl_heap.c
@@ -69,7 +69,6 @@ typedef struct _spl_heap_it spl_heap_it;
struct _spl_heap_object {
spl_ptr_heap *heap;
- zval retval;
int flags;
zend_class_entry *ce_get_iterator;
zend_function *fptr_cmp;
@@ -371,8 +370,6 @@ static void spl_heap_object_free_storage(zend_object *object) /* {{{ */
spl_ptr_heap_destroy(intern->heap);
- zval_ptr_dtor(&intern->retval);
-
if (intern->debug_info != NULL) {
zend_hash_destroy(intern->debug_info);
efree(intern->debug_info);
@@ -491,10 +488,8 @@ static int spl_heap_object_count_elements(zval *object, zend_long *count) /*
{{{
zval rv;
zend_call_method_with_0_params(object, intern->std.ce, &intern->fptr_count,
"count", &rv);
if (!Z_ISUNDEF(rv)) {
- zval_ptr_dtor(&intern->retval);
- ZVAL_ZVAL(&intern->retval, &rv, 0, 0);
- convert_to_long(&intern->retval);
- *count = (zend_long) Z_LVAL(intern->retval);
+ *count = zval_get_long(&rv);
+ zval_ptr_dtor(&rv);
return SUCCESS;
}
*count = 0;