summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2012-12-13 17:29:30 +0400
committerDmitry Stogov <dmitry@zend.com>2012-12-13 17:29:30 +0400
commit438cd863783ad4b72fa5ef0df23665b84f97c33f (patch)
tree0fd007717df8a78e7129245d78368d57f7549191
parentff1e1d7a8e32cdf231b2f8085afd99de11b2db7b (diff)
downloadphp-git-438cd863783ad4b72fa5ef0df23665b84f97c33f.tar.gz
Removed unnecessary checks
-rw-r--r--Zend/zend_execute.h12
-rw-r--r--Zend/zend_execute_API.c4
-rw-r--r--Zend/zend_vm_def.h4
-rw-r--r--Zend/zend_vm_execute.h4
4 files changed, 14 insertions, 10 deletions
diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h
index ab560b3da3..729015c371 100644
--- a/Zend/zend_execute.h
+++ b/Zend/zend_execute.h
@@ -287,17 +287,21 @@ static zend_always_inline void zend_vm_stack_free(void *ptr TSRMLS_DC)
}
}
-static zend_always_inline void zend_vm_stack_clear_multiple(TSRMLS_D)
+static zend_always_inline void zend_vm_stack_clear_multiple(int nested TSRMLS_DC)
{
void **p = EG(argument_stack)->top - 1;
- int delete_count = (int)(zend_uintptr_t) *p;
+ void **end = p - (int)(zend_uintptr_t)*p;
- while (--delete_count>=0) {
+ while (p != end) {
zval *q = *(zval **)(--p);
*p = NULL;
i_zval_ptr_dtor(q ZEND_FILE_LINE_CC);
}
- zend_vm_stack_free_int(p TSRMLS_CC);
+ if (nested) {
+ EG(argument_stack)->top = p;
+ } else {
+ zend_vm_stack_free_int(p TSRMLS_CC);
+ }
}
static zend_always_inline int zend_vm_stack_get_args_count_ex(zend_execute_data *ex)
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index 042b83c767..010f5b780c 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -841,7 +841,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
if (i || UNEXPECTED(ZEND_VM_STACK_ELEMETS(EG(argument_stack)) == (EG(argument_stack)->top))) {
/* hack to clean up the stack */
zend_vm_stack_push((void *) (zend_uintptr_t)i TSRMLS_CC);
- zend_vm_stack_clear_multiple(TSRMLS_C);
+ zend_vm_stack_clear_multiple(0 TSRMLS_CC);
}
zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
@@ -995,7 +995,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
*fci->retval_ptr_ptr = NULL;
}
}
- zend_vm_stack_clear_multiple(TSRMLS_C);
+ zend_vm_stack_clear_multiple(0 TSRMLS_CC);
if (EG(This)) {
zval_ptr_dtor(&EG(This));
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index ef3f80e596..ab40e0bb21 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -1922,7 +1922,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
EX(call)--;
- zend_vm_stack_clear_multiple(TSRMLS_C);
+ zend_vm_stack_clear_multiple(1 TSRMLS_CC);
if (UNEXPECTED(EG(exception) != NULL)) {
zend_throw_exception_internal(NULL TSRMLS_CC);
@@ -2098,7 +2098,7 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY)
EX(call)--;
- zend_vm_stack_clear_multiple(TSRMLS_C);
+ zend_vm_stack_clear_multiple(1 TSRMLS_CC);
if (UNEXPECTED(EG(exception) != NULL)) {
zend_throw_exception_internal(NULL TSRMLS_CC);
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 4e4dedfd08..7f3420f93a 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -463,7 +463,7 @@ static int ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
EX(call)--;
- zend_vm_stack_clear_multiple(TSRMLS_C);
+ zend_vm_stack_clear_multiple(1 TSRMLS_CC);
if (UNEXPECTED(EG(exception) != NULL)) {
zend_throw_exception_internal(NULL TSRMLS_CC);
@@ -639,7 +639,7 @@ static int ZEND_FASTCALL zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_AR
EX(call)--;
- zend_vm_stack_clear_multiple(TSRMLS_C);
+ zend_vm_stack_clear_multiple(1 TSRMLS_CC);
if (UNEXPECTED(EG(exception) != NULL)) {
zend_throw_exception_internal(NULL TSRMLS_CC);