diff options
| author | Xinchen Hui <laruence@gmail.com> | 2014-03-11 14:23:14 +0800 |
|---|---|---|
| committer | Xinchen Hui <laruence@gmail.com> | 2014-03-11 14:23:14 +0800 |
| commit | 53e312c66342c5bf307aff9fca939c749bdafe49 (patch) | |
| tree | 0698b4136c84d5457ffc3fc53224d8d80d98f9d7 /Zend/zend_vm_execute.h | |
| parent | 60c354510b6731ec8348af9c5e230a4859c7c383 (diff) | |
| download | php-git-53e312c66342c5bf307aff9fca939c749bdafe49.tar.gz | |
Review ended
Revert "An demo(for review) to show how to fix the problem(symbol table resize)"
This reverts commit 60c354510b6731ec8348af9c5e230a4859c7c383.
Diffstat (limited to 'Zend/zend_vm_execute.h')
| -rw-r--r-- | Zend/zend_vm_execute.h | 689 |
1 files changed, 266 insertions, 423 deletions
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 25ee31d73e..32042fc548 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -3622,16 +3622,30 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ - case BP_VAR_W: { - zval zv; - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), &EG(uninitialized_zval)); - ZVAL_INDIRECT(&zv, EX_VAR(opline->result.var)); - zend_hash_update(target_symbol_table, Z_STR_P(varname), &zv); - } + case BP_VAR_W: + retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } } + switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { + case ZEND_FETCH_GLOBAL: + if (IS_CONST != IS_TMP_VAR) { + + } + break; + case ZEND_FETCH_LOCAL: + + break; + case ZEND_FETCH_STATIC: + zval_update_constant(retval, (void*) 1 TSRMLS_CC); + break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_CONST == IS_VAR && !0) { + Z_ADDREF_P(EX_VAR(opline->op1.var)); + } + break; + } } @@ -3639,35 +3653,11 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type zval_dtor(&tmp_varname); } - if (retval && EXPECTED(Z_TYPE_P(retval) == IS_INDIRECT)) { - retval = Z_INDIRECT_P(retval); - } - - switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { - case ZEND_FETCH_GLOBAL: - if (IS_CONST != IS_TMP_VAR) { - - } - break; - case ZEND_FETCH_LOCAL: - - break; - case ZEND_FETCH_STATIC: - if (retval) { - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - } - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_CONST == IS_VAR && !0) { - Z_ADDREF_P(EX_VAR(opline->op1.var)); - } - break; + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { + SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } if (EXPECTED(retval != NULL)) { - if (opline->extended_value & ZEND_FETCH_MAKE_REF) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); - } if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval); switch (type) { case BP_VAR_R: @@ -4223,9 +4213,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_CONST_HANDLER(ZEND_O if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) { isset = 0; } - if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) { - value = Z_INDIRECT_P(value); - } } if (IS_CONST != IS_CONST && varname == &tmp) { @@ -5417,16 +5404,30 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type, case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ - case BP_VAR_W: { - zval zv; - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), &EG(uninitialized_zval)); - ZVAL_INDIRECT(&zv, EX_VAR(opline->result.var)); - zend_hash_update(target_symbol_table, Z_STR_P(varname), &zv); - } + case BP_VAR_W: + retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } } + switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { + case ZEND_FETCH_GLOBAL: + if (IS_CONST != IS_TMP_VAR) { + + } + break; + case ZEND_FETCH_LOCAL: + + break; + case ZEND_FETCH_STATIC: + zval_update_constant(retval, (void*) 1 TSRMLS_CC); + break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_CONST == IS_VAR && !0) { + Z_ADDREF_P(EX_VAR(opline->op1.var)); + } + break; + } } @@ -5434,35 +5435,11 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type, zval_dtor(&tmp_varname); } - if (retval && EXPECTED(Z_TYPE_P(retval) == IS_INDIRECT)) { - retval = Z_INDIRECT_P(retval); - } - - switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { - case ZEND_FETCH_GLOBAL: - if (IS_CONST != IS_TMP_VAR) { - - } - break; - case ZEND_FETCH_LOCAL: - - break; - case ZEND_FETCH_STATIC: - if (retval) { - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - } - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_CONST == IS_VAR && !0) { - Z_ADDREF_P(EX_VAR(opline->op1.var)); - } - break; + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { + SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } if (EXPECTED(retval != NULL)) { - if (opline->extended_value & ZEND_FETCH_MAKE_REF) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); - } if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval); switch (type) { case BP_VAR_R: @@ -5904,9 +5881,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_VAR_HANDLER(ZEND_OPC if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) { isset = 0; } - if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) { - value = Z_INDIRECT_P(value); - } } if (IS_CONST != IS_CONST && varname == &tmp) { @@ -6139,16 +6113,30 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int typ case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ - case BP_VAR_W: { - zval zv; - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), &EG(uninitialized_zval)); - ZVAL_INDIRECT(&zv, EX_VAR(opline->result.var)); - zend_hash_update(target_symbol_table, Z_STR_P(varname), &zv); - } + case BP_VAR_W: + retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } } + switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { + case ZEND_FETCH_GLOBAL: + if (IS_CONST != IS_TMP_VAR) { + + } + break; + case ZEND_FETCH_LOCAL: + + break; + case ZEND_FETCH_STATIC: + zval_update_constant(retval, (void*) 1 TSRMLS_CC); + break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_CONST == IS_VAR && !0) { + Z_ADDREF_P(EX_VAR(opline->op1.var)); + } + break; + } } @@ -6156,35 +6144,11 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int typ zval_dtor(&tmp_varname); } - if (retval && EXPECTED(Z_TYPE_P(retval) == IS_INDIRECT)) { - retval = Z_INDIRECT_P(retval); - } - - switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { - case ZEND_FETCH_GLOBAL: - if (IS_CONST != IS_TMP_VAR) { - - } - break; - case ZEND_FETCH_LOCAL: - - break; - case ZEND_FETCH_STATIC: - if (retval) { - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - } - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_CONST == IS_VAR && !0) { - Z_ADDREF_P(EX_VAR(opline->op1.var)); - } - break; + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { + SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } if (EXPECTED(retval != NULL)) { - if (opline->extended_value & ZEND_FETCH_MAKE_REF) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); - } if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval); switch (type) { case BP_VAR_R: @@ -6594,9 +6558,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_ if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) { isset = 0; } - if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) { - value = Z_INDIRECT_P(value); - } } if (IS_CONST != IS_CONST && varname == &tmp) { @@ -7230,10 +7191,9 @@ static int ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_A } ZVAL_OBJ(EX_VAR_NUM(opline->op2.var), EG(exception)); if (EG(active_symbol_table)) { - zval zv; zend_string *cv = CV_DEF_OF(opline->op2.var); - ZVAL_INDIRECT(&zv, EX_VAR_NUM(opline->op2.var)); - zend_hash_update(EG(active_symbol_table), cv, &zv); + zval *zv = zend_hash_update(EG(active_symbol_table), cv, EX_VAR_NUM(opline->op2.var)); + ZVAL_INDIRECT(EX_VAR_NUM(opline->op2.var), zv); } if (UNEXPECTED(EG(exception) != exception)) { EG(exception)->gc.refcount++; @@ -8811,16 +8771,30 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type, case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ - case BP_VAR_W: { - zval zv; - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), &EG(uninitialized_zval)); - ZVAL_INDIRECT(&zv, EX_VAR(opline->result.var)); - zend_hash_update(target_symbol_table, Z_STR_P(varname), &zv); - } + case BP_VAR_W: + retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } } + switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { + case ZEND_FETCH_GLOBAL: + if (IS_TMP_VAR != IS_TMP_VAR) { + zval_dtor(free_op1.var); + } + break; + case ZEND_FETCH_LOCAL: + zval_dtor(free_op1.var); + break; + case ZEND_FETCH_STATIC: + zval_update_constant(retval, (void*) 1 TSRMLS_CC); + break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_TMP_VAR == IS_VAR && !1) { + Z_ADDREF_P(EX_VAR(opline->op1.var)); + } + break; + } } @@ -8828,35 +8802,11 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type, zval_dtor(&tmp_varname); } - if (retval && EXPECTED(Z_TYPE_P(retval) == IS_INDIRECT)) { - retval = Z_INDIRECT_P(retval); - } - - switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { - case ZEND_FETCH_GLOBAL: - if (IS_TMP_VAR != IS_TMP_VAR) { - zval_dtor(free_op1.var); - } - break; - case ZEND_FETCH_LOCAL: - zval_dtor(free_op1.var); - break; - case ZEND_FETCH_STATIC: - if (retval) { - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - } - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_TMP_VAR == IS_VAR && !1) { - Z_ADDREF_P(EX_VAR(opline->op1.var)); - } - break; + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { + SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } if (EXPECTED(retval != NULL)) { - if (opline->extended_value & ZEND_FETCH_MAKE_REF) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); - } if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval); switch (type) { case BP_VAR_R: @@ -9320,9 +9270,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPC if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) { isset = 0; } - if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) { - value = Z_INDIRECT_P(value); - } } if (IS_TMP_VAR != IS_CONST && varname == &tmp) { @@ -10491,16 +10438,30 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZE case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ - case BP_VAR_W: { - zval zv; - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), &EG(uninitialized_zval)); - ZVAL_INDIRECT(&zv, EX_VAR(opline->result.var)); - zend_hash_update(target_symbol_table, Z_STR_P(varname), &zv); - } + case BP_VAR_W: + retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } } + switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { + case ZEND_FETCH_GLOBAL: + if (IS_TMP_VAR != IS_TMP_VAR) { + zval_dtor(free_op1.var); + } + break; + case ZEND_FETCH_LOCAL: + zval_dtor(free_op1.var); + break; + case ZEND_FETCH_STATIC: + zval_update_constant(retval, (void*) 1 TSRMLS_CC); + break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_TMP_VAR == IS_VAR && !1) { + Z_ADDREF_P(EX_VAR(opline->op1.var)); + } + break; + } } @@ -10508,35 +10469,11 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZE zval_dtor(&tmp_varname); } - if (retval && EXPECTED(Z_TYPE_P(retval) == IS_INDIRECT)) { - retval = Z_INDIRECT_P(retval); - } - - switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { - case ZEND_FETCH_GLOBAL: - if (IS_TMP_VAR != IS_TMP_VAR) { - zval_dtor(free_op1.var); - } - break; - case ZEND_FETCH_LOCAL: - zval_dtor(free_op1.var); - break; - case ZEND_FETCH_STATIC: - if (retval) { - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - } - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_TMP_VAR == IS_VAR && !1) { - Z_ADDREF_P(EX_VAR(opline->op1.var)); - } - break; + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { + SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } if (EXPECTED(retval != NULL)) { - if (opline->extended_value & ZEND_FETCH_MAKE_REF) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); - } if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval); switch (type) { case BP_VAR_R: @@ -10988,9 +10925,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCOD if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) { isset = 0; } - if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) { - value = Z_INDIRECT_P(value); - } } if (IS_TMP_VAR != IS_CONST && varname == &tmp) { @@ -11223,16 +11157,30 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type, case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ - case BP_VAR_W: { - zval zv; - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), &EG(uninitialized_zval)); - ZVAL_INDIRECT(&zv, EX_VAR(opline->result.var)); - zend_hash_update(target_symbol_table, Z_STR_P(varname), &zv); - } + case BP_VAR_W: + retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } } + switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { + case ZEND_FETCH_GLOBAL: + if (IS_TMP_VAR != IS_TMP_VAR) { + zval_dtor(free_op1.var); + } + break; + case ZEND_FETCH_LOCAL: + zval_dtor(free_op1.var); + break; + case ZEND_FETCH_STATIC: + zval_update_constant(retval, (void*) 1 TSRMLS_CC); + break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_TMP_VAR == IS_VAR && !1) { + Z_ADDREF_P(EX_VAR(opline->op1.var)); + } + break; + } } @@ -11240,35 +11188,11 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type, zval_dtor(&tmp_varname); } - if (retval && EXPECTED(Z_TYPE_P(retval) == IS_INDIRECT)) { - retval = Z_INDIRECT_P(retval); - } - - switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { - case ZEND_FETCH_GLOBAL: - if (IS_TMP_VAR != IS_TMP_VAR) { - zval_dtor(free_op1.var); - } - break; - case ZEND_FETCH_LOCAL: - zval_dtor(free_op1.var); - break; - case ZEND_FETCH_STATIC: - if (retval) { - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - } - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_TMP_VAR == IS_VAR && !1) { - Z_ADDREF_P(EX_VAR(opline->op1.var)); - } - break; + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { + SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } if (EXPECTED(retval != NULL)) { - if (opline->extended_value & ZEND_FETCH_MAKE_REF) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); - } if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval); switch (type) { case BP_VAR_R: @@ -11567,9 +11491,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_UNUSED_HANDLER(ZEND_OP if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) { isset = 0; } - if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) { - value = Z_INDIRECT_P(value); - } } if (IS_TMP_VAR != IS_CONST && varname == &tmp) { @@ -14573,16 +14494,30 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type, case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ - case BP_VAR_W: { - zval zv; - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), &EG(uninitialized_zval)); - ZVAL_INDIRECT(&zv, EX_VAR(opline->result.var)); - zend_hash_update(target_symbol_table, Z_STR_P(varname), &zv); - } + case BP_VAR_W: + retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } } + switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { + case ZEND_FETCH_GLOBAL: + if (IS_VAR != IS_TMP_VAR) { + zval_ptr_dtor_nogc(free_op1.var); + } + break; + case ZEND_FETCH_LOCAL: + zval_ptr_dtor_nogc(free_op1.var); + break; + case ZEND_FETCH_STATIC: + zval_update_constant(retval, (void*) 1 TSRMLS_CC); + break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) { + Z_ADDREF_P(EX_VAR(opline->op1.var)); + } + break; + } } @@ -14590,35 +14525,11 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type, zval_dtor(&tmp_varname); } - if (retval && EXPECTED(Z_TYPE_P(retval) == IS_INDIRECT)) { - retval = Z_INDIRECT_P(retval); - } - - switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { - case ZEND_FETCH_GLOBAL: - if (IS_VAR != IS_TMP_VAR) { - zval_ptr_dtor_nogc(free_op1.var); - } - break; - case ZEND_FETCH_LOCAL: - zval_ptr_dtor_nogc(free_op1.var); - break; - case ZEND_FETCH_STATIC: - if (retval) { - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - } - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) { - Z_ADDREF_P(EX_VAR(opline->op1.var)); - } - break; + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { + SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } if (EXPECTED(retval != NULL)) { - if (opline->extended_value & ZEND_FETCH_MAKE_REF) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); - } if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval); switch (type) { case BP_VAR_R: @@ -15951,9 +15862,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPC if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) { isset = 0; } - if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) { - value = Z_INDIRECT_P(value); - } } if (IS_VAR != IS_CONST && varname == &tmp) { @@ -19121,16 +19029,30 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZE case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ - case BP_VAR_W: { - zval zv; - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), &EG(uninitialized_zval)); - ZVAL_INDIRECT(&zv, EX_VAR(opline->result.var)); - zend_hash_update(target_symbol_table, Z_STR_P(varname), &zv); - } + case BP_VAR_W: + retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } } + switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { + case ZEND_FETCH_GLOBAL: + if (IS_VAR != IS_TMP_VAR) { + zval_ptr_dtor_nogc(free_op1.var); + } + break; + case ZEND_FETCH_LOCAL: + zval_ptr_dtor_nogc(free_op1.var); + break; + case ZEND_FETCH_STATIC: + zval_update_constant(retval, (void*) 1 TSRMLS_CC); + break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) { + Z_ADDREF_P(EX_VAR(opline->op1.var)); + } + break; + } } @@ -19138,35 +19060,11 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZE zval_dtor(&tmp_varname); } - if (retval && EXPECTED(Z_TYPE_P(retval) == IS_INDIRECT)) { - retval = Z_INDIRECT_P(retval); - } - - switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { - case ZEND_FETCH_GLOBAL: - if (IS_VAR != IS_TMP_VAR) { - zval_ptr_dtor_nogc(free_op1.var); - } - break; - case ZEND_FETCH_LOCAL: - zval_ptr_dtor_nogc(free_op1.var); - break; - case ZEND_FETCH_STATIC: - if (retval) { - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - } - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) { - Z_ADDREF_P(EX_VAR(opline->op1.var)); - } - break; + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { + SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } if (EXPECTED(retval != NULL)) { - if (opline->extended_value & ZEND_FETCH_MAKE_REF) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); - } if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval); switch (type) { case BP_VAR_R: @@ -20463,9 +20361,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_VAR_HANDLER(ZEND_OPCOD if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) { isset = 0; } - if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) { - value = Z_INDIRECT_P(value); - } } if (IS_VAR != IS_CONST && varname == &tmp) { @@ -21105,16 +21000,30 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type, case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ - case BP_VAR_W: { - zval zv; - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), &EG(uninitialized_zval)); - ZVAL_INDIRECT(&zv, EX_VAR(opline->result.var)); - zend_hash_update(target_symbol_table, Z_STR_P(varname), &zv); - } + case BP_VAR_W: + retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } } + switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { + case ZEND_FETCH_GLOBAL: + if (IS_VAR != IS_TMP_VAR) { + zval_ptr_dtor_nogc(free_op1.var); + } + break; + case ZEND_FETCH_LOCAL: + zval_ptr_dtor_nogc(free_op1.var); + break; + case ZEND_FETCH_STATIC: + zval_update_constant(retval, (void*) 1 TSRMLS_CC); + break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) { + Z_ADDREF_P(EX_VAR(opline->op1.var)); + } + break; + } } @@ -21122,35 +21031,11 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type, zval_dtor(&tmp_varname); } - if (retval && EXPECTED(Z_TYPE_P(retval) == IS_INDIRECT)) { - retval = Z_INDIRECT_P(retval); - } - - switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { - case ZEND_FETCH_GLOBAL: - if (IS_VAR != IS_TMP_VAR) { - zval_ptr_dtor_nogc(free_op1.var); - } - break; - case ZEND_FETCH_LOCAL: - zval_ptr_dtor_nogc(free_op1.var); - break; - case ZEND_FETCH_STATIC: - if (retval) { - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - } - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) { - Z_ADDREF_P(EX_VAR(opline->op1.var)); - } - break; + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { + SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } if (EXPECTED(retval != NULL)) { - if (opline->extended_value & ZEND_FETCH_MAKE_REF) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); - } if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval); switch (type) { case BP_VAR_R: @@ -21738,9 +21623,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OP if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) { isset = 0; } - if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) { - value = Z_INDIRECT_P(value); - } } if (IS_VAR != IS_CONST && varname == &tmp) { @@ -31846,16 +31728,30 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type, Z case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ - case BP_VAR_W: { - zval zv; - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), &EG(uninitialized_zval)); - ZVAL_INDIRECT(&zv, EX_VAR(opline->result.var)); - zend_hash_update(target_symbol_table, Z_STR_P(varname), &zv); - } + case BP_VAR_W: + retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } } + switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { + case ZEND_FETCH_GLOBAL: + if (IS_CV != IS_TMP_VAR) { + + } + break; + case ZEND_FETCH_LOCAL: + + break; + case ZEND_FETCH_STATIC: + zval_update_constant(retval, (void*) 1 TSRMLS_CC); + break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_CV == IS_VAR && !0) { + Z_ADDREF_P(EX_VAR(opline->op1.var)); + } + break; + } } @@ -31863,35 +31759,11 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type, Z zval_dtor(&tmp_varname); } - if (retval && EXPECTED(Z_TYPE_P(retval) == IS_INDIRECT)) { - retval = Z_INDIRECT_P(retval); - } - - switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { - case ZEND_FETCH_GLOBAL: - if (IS_CV != IS_TMP_VAR) { - - } - break; - case ZEND_FETCH_LOCAL: - - break; - case ZEND_FETCH_STATIC: - if (retval) { - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - } - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_CV == IS_VAR && !0) { - Z_ADDREF_P(EX_VAR(opline->op1.var)); - } - break; + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { + SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } if (EXPECTED(retval != NULL)) { - if (opline->extended_value & ZEND_FETCH_MAKE_REF) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); - } if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval); switch (type) { case BP_VAR_R: @@ -33011,9 +32883,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCO if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) { isset = 0; } - if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) { - value = Z_INDIRECT_P(value); - } } if (IS_CV != IS_CONST && varname == &tmp) { @@ -36051,16 +35920,30 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type, ZEN case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ - case BP_VAR_W: { - zval zv; - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), &EG(uninitialized_zval)); - ZVAL_INDIRECT(&zv, EX_VAR(opline->result.var)); - zend_hash_update(target_symbol_table, Z_STR_P(varname), &zv); - } + case BP_VAR_W: + retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } } + switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { + case ZEND_FETCH_GLOBAL: + if (IS_CV != IS_TMP_VAR) { + + } + break; + case ZEND_FETCH_LOCAL: + + break; + case ZEND_FETCH_STATIC: + zval_update_constant(retval, (void*) 1 TSRMLS_CC); + break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_CV == IS_VAR && !0) { + Z_ADDREF_P(EX_VAR(opline->op1.var)); + } + break; + } } @@ -36068,35 +35951,11 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type, ZEN zval_dtor(&tmp_varname); } - if (retval && EXPECTED(Z_TYPE_P(retval) == IS_INDIRECT)) { - retval = Z_INDIRECT_P(retval); - } - - switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { - case ZEND_FETCH_GLOBAL: - if (IS_CV != IS_TMP_VAR) { - - } - break; - case ZEND_FETCH_LOCAL: - - break; - case ZEND_FETCH_STATIC: - if (retval) { - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - } - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_CV == IS_VAR && !0) { - Z_ADDREF_P(EX_VAR(opline->op1.var)); - } - break; + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { + SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } if (EXPECTED(retval != NULL)) { - if (opline->extended_value & ZEND_FETCH_MAKE_REF) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); - } if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval); switch (type) { case BP_VAR_R: @@ -37272,9 +37131,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) { isset = 0; } - if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) { - value = Z_INDIRECT_P(value); - } } if (IS_CV != IS_CONST && varname == &tmp) { @@ -37909,16 +37765,30 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type, case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname)); /* break missing intentionally */ - case BP_VAR_W: { - zval zv; - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), &EG(uninitialized_zval)); - ZVAL_INDIRECT(&zv, EX_VAR(opline->result.var)); - zend_hash_update(target_symbol_table, Z_STR_P(varname), &zv); - } + case BP_VAR_W: + retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } } + switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { + case ZEND_FETCH_GLOBAL: + if (IS_CV != IS_TMP_VAR) { + + } + break; + case ZEND_FETCH_LOCAL: + + break; + case ZEND_FETCH_STATIC: + zval_update_constant(retval, (void*) 1 TSRMLS_CC); + break; + case ZEND_FETCH_GLOBAL_LOCK: + if (IS_CV == IS_VAR && !0) { + Z_ADDREF_P(EX_VAR(opline->op1.var)); + } + break; + } } @@ -37926,35 +37796,11 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type, zval_dtor(&tmp_varname); } - if (retval && EXPECTED(Z_TYPE_P(retval) == IS_INDIRECT)) { - retval = Z_INDIRECT_P(retval); - } - - switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) { - case ZEND_FETCH_GLOBAL: - if (IS_CV != IS_TMP_VAR) { - - } - break; - case ZEND_FETCH_LOCAL: - - break; - case ZEND_FETCH_STATIC: - if (retval) { - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - } - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_CV == IS_VAR && !0) { - Z_ADDREF_P(EX_VAR(opline->op1.var)); - } - break; + if (opline->extended_value & ZEND_FETCH_MAKE_REF) { + SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); } if (EXPECTED(retval != NULL)) { - if (opline->extended_value & ZEND_FETCH_MAKE_REF) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval); - } if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval); switch (type) { case BP_VAR_R: @@ -38429,9 +38275,6 @@ static int ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPC if ((value = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) { isset = 0; } - if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) { - value = Z_INDIRECT_P(value); - } } if (IS_CV != IS_CONST && varname == &tmp) { |
