summaryrefslogtreecommitdiff
path: root/Zend/zend_execute.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r--Zend/zend_execute.c79
1 files changed, 33 insertions, 46 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index b9f710cce3..7977c873b3 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -214,9 +214,8 @@ static zend_never_inline zval *_get_zval_cv_lookup(zval *ptr, zend_uint var, int
if (EG(active_symbol_table)) {
ret = zend_hash_find(EG(active_symbol_table), cv);
if (ret) {
- ZEND_ASSERT(Z_TYPE_P(ret) == IS_INDIRECT);
- ZVAL_INDIRECT(ptr, Z_INDIRECT_P(ret));
- return Z_INDIRECT_P(ptr);
+ ZVAL_INDIRECT(ptr, ret);
+ return ret;
}
}
@@ -232,14 +231,12 @@ static zend_never_inline zval *_get_zval_cv_lookup(zval *ptr, zend_uint var, int
/* break missing intentionally */
case BP_VAR_W:
if (EG(active_symbol_table)) {
- zval zv;
- ZVAL_COPY_VALUE(ptr, &EG(uninitialized_zval));
- ZVAL_INDIRECT(&zv, ptr);
- zend_hash_update(EG(active_symbol_table), cv, &zv);
+ ret = zend_hash_update(EG(active_symbol_table), cv, ret);
+ ZVAL_INDIRECT(ptr, ret);
} else {
ZVAL_NULL(ptr);
+ ret = ptr;
}
- ret = ptr;
break;
}
return ret;
@@ -253,9 +250,8 @@ static zend_never_inline zval *_get_zval_cv_lookup_BP_VAR_R(zval *ptr, zend_uint
if (EG(active_symbol_table)) {
ret = zend_hash_find(EG(active_symbol_table), cv);
if (ret) {
- ZEND_ASSERT(Z_TYPE_P(ret) == IS_INDIRECT);
- ZVAL_INDIRECT(ptr, Z_INDIRECT_P(ret));
- return Z_INDIRECT_P(ptr);
+ ZVAL_INDIRECT(ptr, ret);
+ return ret;
}
}
@@ -271,9 +267,8 @@ static zend_never_inline zval *_get_zval_cv_lookup_BP_VAR_UNSET(zval *ptr, zend_
if (EG(active_symbol_table)) {
ret = zend_hash_find(EG(active_symbol_table), cv);
if (ret) {
- ZEND_ASSERT(Z_TYPE_P(ret) == IS_INDIRECT);
- ZVAL_INDIRECT(ptr, Z_INDIRECT_P(ret));
- return Z_INDIRECT_P(ptr);
+ ZVAL_INDIRECT(ptr, ret);
+ return ret;
}
}
@@ -289,9 +284,8 @@ static zend_never_inline zval *_get_zval_cv_lookup_BP_VAR_IS(zval *ptr, zend_uin
if (EG(active_symbol_table)) {
ret = zend_hash_find(EG(active_symbol_table), cv);
if (ret) {
- ZEND_ASSERT(Z_TYPE_P(ret) == IS_INDIRECT);
- ZVAL_INDIRECT(ptr, Z_INDIRECT_P(ret));
- return Z_INDIRECT_P(ptr);
+ ZVAL_INDIRECT(ptr, ret);
+ return ret;
}
}
@@ -306,17 +300,13 @@ static zend_never_inline zval *_get_zval_cv_lookup_BP_VAR_RW(zval *ptr, zend_uin
if (EG(active_symbol_table)) {
ret = zend_hash_find(EG(active_symbol_table), cv);
if (ret) {
- ZEND_ASSERT(Z_TYPE_P(ret) == IS_INDIRECT);
- ZVAL_INDIRECT(ptr, Z_INDIRECT_P(ret));
- return Z_INDIRECT_P(ptr);
- } else {
- zval zv;
- ZVAL_COPY_VALUE(ptr, &EG(uninitialized_zval));
- ZVAL_INDIRECT(&zv, ptr);
- zend_hash_update(EG(active_symbol_table), cv, &zv);
- zend_error(E_NOTICE, "Undefined variable: %s", cv->val);
- return ptr;
+ ZVAL_INDIRECT(ptr, ret);
+ return ret;
}
+ ret = zend_hash_update(EG(active_symbol_table), cv, &EG(uninitialized_zval));
+ ZVAL_INDIRECT(ptr, ret);
+ zend_error(E_NOTICE, "Undefined variable: %s", cv->val);
+ return ret;
} else {
ZVAL_NULL(ptr);
zend_error(E_NOTICE, "Undefined variable: %s", cv->val);
@@ -332,16 +322,12 @@ static zend_never_inline zval *_get_zval_cv_lookup_BP_VAR_W(zval *ptr, zend_uint
if (EG(active_symbol_table)) {
ret = zend_hash_find(EG(active_symbol_table), cv);
if (ret) {
- ZEND_ASSERT(Z_TYPE_P(ret) == IS_INDIRECT);
- ZVAL_INDIRECT(ptr, Z_INDIRECT_P(ret));
- return Z_INDIRECT_P(ptr);
- } else {
- zval zv;
- ZVAL_COPY_VALUE(ptr, &EG(uninitialized_zval));
- ZVAL_INDIRECT(&zv, ptr);
- zend_hash_update(EG(active_symbol_table), cv, &zv);
- return ptr;
+ ZVAL_INDIRECT(ptr, ret);
+ return ret;
}
+ ret = zend_hash_update(EG(active_symbol_table), cv, &EG(uninitialized_zval));
+ ZVAL_INDIRECT(ptr, ret);
+ return ret;
} else {
ZVAL_NULL(ptr);
return ptr;
@@ -1539,20 +1525,20 @@ static inline zend_brk_cont_element* zend_brk_cont(int nest_levels, int array_of
zend_hash_apply(EG(active_symbol_table), (apply_func_t) zend_check_symbol TSRMLS_CC); \
}
-static int zend_check_symbol(zval *zv TSRMLS_DC)
+static int zend_check_symbol(zval **pz TSRMLS_DC)
{
- if (Z_TYPE_P(zv) > 17) {
- fprintf(stderr, "Warning! %x has invalid type!\n", *zv);
+ if (Z_TYPE_PP(pz) > 9) {
+ fprintf(stderr, "Warning! %x has invalid type!\n", *pz);
/* See http://support.microsoft.com/kb/190351 */
#ifdef PHP_WIN32
fflush(stderr);
#endif
- } else if (Z_TYPE_P(zv) == IS_ARRAY) {
- zend_hash_apply(Z_ARRVAL_P(zv), (apply_func_t) zend_check_symbol TSRMLS_CC);
- } else if (Z_TYPE_P(zv) == IS_OBJECT) {
+ } else if (Z_TYPE_PP(pz) == IS_ARRAY) {
+ zend_hash_apply(Z_ARRVAL_PP(pz), (apply_func_t) zend_check_symbol TSRMLS_CC);
+ } else if (Z_TYPE_PP(pz) == IS_OBJECT) {
/* OBJ-TBI - doesn't support new object model! */
- zend_hash_apply(Z_OBJPROP_P(zv), (apply_func_t) zend_check_symbol TSRMLS_CC);
+ zend_hash_apply(Z_OBJPROP_PP(pz), (apply_func_t) zend_check_symbol TSRMLS_CC);
}
return 0;
@@ -1742,10 +1728,11 @@ static zend_always_inline zend_execute_data *i_create_execute_data_from_op_array
if (!EG(active_symbol_table)) {
ZVAL_COPY(EX_VAR_NUM(op_array->this_var), &EG(This));
} else {
- zval zv;
ZVAL_COPY(EX_VAR_NUM(op_array->this_var), &EG(This));
- ZVAL_INDIRECT(&zv, EX_VAR_NUM(op_array->this_var));
- zend_hash_str_add(EG(active_symbol_table), "this", sizeof("this")-1, &zv);
+ zval *zv = zend_hash_str_add(EG(active_symbol_table), "this", sizeof("this")-1, EX_VAR(op_array->this_var));
+ if (zv) {
+ ZVAL_INDIRECT(EX_VAR_NUM(op_array->this_var), zv);
+ }
}
}