com php-src: Use better data structures (incomplete): Zend/zend.h Zend/zend_builtin_functions.c Zend/zend_execute_API .c
| From: | Dmitry Stogov | Date: | Tue, 18 Feb 2014 13:31:27 +0000 |
| Subject: | com php-src: Use better data structures (incomplete): Zend/zend.h Zend/zend_builtin_functions.c Zend/zend_execute_API .c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-78065@lists.php.net to get a copy of this message | ||
Commit: 9e6c0c6a89e8b48042283fc42c9dc6f70cc41a44
Author: Dmitry Stogov <dmitry@zend.com> Tue, 18 Feb 2014 17:31:27 +0400
Parents: 246d50fd95c23545f8520175b6f8e3614f76b1ec
Branches: phpng
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=9e6c0c6a89e8b48042283fc42c9dc6f70cc41a44
Log:
Use better data structures (incomplete)
Changed paths:
M Zend/zend.h
M Zend/zend_builtin_functions.c
M Zend/zend_execute_API.c
Diff:
diff --git a/Zend/zend.h b/Zend/zend.h
index 4d212c5..44266c2 100644
--- a/Zend/zend.h
+++ b/Zend/zend.h
@@ -711,9 +711,11 @@ END_EXTERN_C()
#define COPY_PZVAL_TO_ZVAL(zv, pzv) \
ZVAL_COPY_VALUE(&(zv), (pzv)); \
- if (Z_REFCOUNT_P(pzv)>1) { \
- zval_copy_ctor(&(zv)); \
- Z_DELREF_P((pzv)); \
+ if (IS_REFCOUNTED(Z_TYPE_P(pzv))) { \
+ if (Z_REFCOUNT_P(pzv)>1) { \
+ zval_copy_ctor(&(zv)); \
+ Z_DELREF_P((pzv)); \
+ } \
} \
#define REPLACE_ZVAL_VALUE(ppzv_dest, pzv_src, copy) { \
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 5e7669e..b354fa7 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -468,7 +468,7 @@ ZEND_FUNCTION(func_get_args)
arg = p-(arg_count-i);
if (!Z_ISREF_P(arg)) {
element = arg;
- Z_ADDREF_P(element);
+ if (IS_REFCOUNTED(Z_TYPE_P(element))) Z_ADDREF_P(element);
} else {
ZVAL_DUP(&tmp, Z_REFVAL_P(arg));
element = &tmp;
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index 509e6b8..2195830 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -738,7 +738,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
zend_fcall_info_cache fci_cache_local;
zval tmp;
- fci->retval = NULL;
+ ZVAL_UNDEF(fci->retval);
if (!EG(active)) {
return FAILURE; /* executor is already inactive */
@@ -802,7 +802,11 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache
TS
calling_scope = fci_cache->calling_scope;
called_scope = fci_cache->called_scope;
fci->object_ptr = fci_cache->object_ptr;
- ZVAL_COPY_VALUE(&EX(object), fci->object_ptr);
+ if (fci->object_ptr) {
+ ZVAL_COPY_VALUE(&EX(object), fci->object_ptr);
+ } else {
+ ZVAL_UNDEF(&EX(object));
+ }
if (fci->object_ptr && Z_TYPE_P(fci->object_ptr) == IS_OBJECT &&
(!EG(objects_store)..object_buckets ||
!IS_VALID(EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(fci->object_ptr)]))) {
@@ -859,12 +863,9 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache
TS
(EX(function_state).function->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) == 0
) {
param = &tmp;
ZVAL_DUP(param, &fci->params[i]);
-//??? } else if (*fci->params[i] != &EG(uninitialized_zval)) {
- Z_ADDREF(fci->params[i]);
- param = &fci->params[i];
-//??? } else {
-//??? param = &tmp;
-//??? ZVAL_COPY_VALUE(param, &fci->params[i]);
+ } else {
+ param = &tmp;
+ ZVAL_COPY(param, &fci->params[i]);
}
zend_vm_stack_push(param TSRMLS_CC);
}