mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Drop FREE_OP_VAR_PTR() distinction
FREE_OP_VAR_PTR() is like FREE_OP(), but only frees VAR, rather than VARs and TMPs. I don't think this distinction makes sense anymore, as opcodes using FREE_OP_VAR_PTR() generally only accept VAR or CV. For the cases where other op types are accepted and only freeing VAR is desired we already have FREE_OP_IF_VAR(). This drops FREE_OP_VAR_PTR(), leaving only FREE_OP() and FREE_OP_IF_VAR().
This commit is contained in:
parent
fdbc745ea1
commit
da0d246e19
@ -168,9 +168,6 @@ ZEND_API const zend_internal_function zend_pass_function = {
|
||||
zval_ptr_dtor_nogc(EX_VAR(var)); \
|
||||
}
|
||||
|
||||
#define FREE_OP_VAR_PTR(type, var) \
|
||||
FREE_OP(type, var)
|
||||
|
||||
#define CV_DEF_OF(i) (EX(func)->op_array.vars[i])
|
||||
|
||||
#define ZEND_VM_STACK_PAGE_SLOTS (16 * 1024) /* should be a power of 2 */
|
||||
|
@ -1093,7 +1093,7 @@ ZEND_VM_C_LABEL(assign_op_object):
|
||||
|
||||
FREE_OP_DATA();
|
||||
FREE_OP2();
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
/* assign_obj has two opcodes! */
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
@ -1229,7 +1229,7 @@ ZEND_VM_C_LABEL(assign_dim_op_ret_null):
|
||||
}
|
||||
|
||||
FREE_OP2();
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
|
||||
@ -1260,7 +1260,7 @@ ZEND_VM_HANDLER(26, ZEND_ASSIGN_OP, VAR|CV, CONST|TMPVAR|CV, OP)
|
||||
}
|
||||
|
||||
FREE_OP2();
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
@ -1328,7 +1328,7 @@ ZEND_VM_C_LABEL(pre_incdec_object):
|
||||
} while (0);
|
||||
|
||||
FREE_OP2();
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
@ -1400,7 +1400,7 @@ ZEND_VM_C_LABEL(post_incdec_object):
|
||||
} while (0);
|
||||
|
||||
FREE_OP2();
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
@ -1490,7 +1490,7 @@ ZEND_VM_HELPER(zend_pre_inc_helper, VAR|CV, ANY)
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
}
|
||||
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
@ -1542,7 +1542,7 @@ ZEND_VM_HELPER(zend_pre_dec_helper, VAR|CV, ANY)
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
}
|
||||
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
@ -1592,7 +1592,7 @@ ZEND_VM_HELPER(zend_post_inc_helper, VAR|CV, ANY)
|
||||
increment_function(var_ptr);
|
||||
} while (0);
|
||||
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
@ -1640,7 +1640,7 @@ ZEND_VM_HELPER(zend_post_dec_helper, VAR|CV, ANY)
|
||||
decrement_function(var_ptr);
|
||||
} while (0);
|
||||
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
@ -2485,7 +2485,7 @@ ZEND_VM_C_LABEL(free_and_exit_assign_obj):
|
||||
FREE_OP_DATA();
|
||||
ZEND_VM_C_LABEL(exit_assign_obj):
|
||||
FREE_OP2();
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
/* assign_obj has two opcodes! */
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
@ -2634,7 +2634,7 @@ ZEND_VM_C_LABEL(assign_dim_error):
|
||||
if (OP2_TYPE != IS_UNUSED) {
|
||||
FREE_OP2();
|
||||
}
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
/* assign_dim has two opcodes! */
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
@ -2653,7 +2653,7 @@ ZEND_VM_HANDLER(22, ZEND_ASSIGN, VAR|CV, CONST|TMP|VAR|CV, SPEC(RETVAL))
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), value);
|
||||
}
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
/* zend_assign_to_variable() always takes care of op2, never free it! */
|
||||
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
@ -2688,8 +2688,8 @@ ZEND_VM_HANDLER(30, ZEND_ASSIGN_REF, VAR|CV, VAR|CV, SRC)
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
|
||||
}
|
||||
|
||||
FREE_OP2_VAR_PTR();
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP2();
|
||||
FREE_OP1();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
@ -2723,9 +2723,9 @@ ZEND_VM_HANDLER(32, ZEND_ASSIGN_OBJ_REF, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CA
|
||||
zend_assign_to_property_reference(container, OP1_TYPE, property, OP2_TYPE, value_ptr OPLINE_CC EXECUTE_DATA_CC);
|
||||
}
|
||||
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
FREE_OP2();
|
||||
FREE_OP_DATA_VAR_PTR();
|
||||
FREE_OP_DATA();
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
|
||||
@ -2760,7 +2760,7 @@ ZEND_VM_HANDLER(33, ZEND_ASSIGN_STATIC_PROP_REF, ANY, ANY, CACHE_SLOT|SRC)
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), prop);
|
||||
}
|
||||
|
||||
FREE_OP_DATA_VAR_PTR();
|
||||
FREE_OP_DATA();
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
|
||||
@ -4374,7 +4374,7 @@ ZEND_VM_COLD_CONST_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY, SRC,
|
||||
if (return_value) {
|
||||
ZVAL_NEW_REF(return_value, retval_ptr);
|
||||
} else {
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -4389,7 +4389,7 @@ ZEND_VM_COLD_CONST_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY, SRC,
|
||||
ZVAL_REF(return_value, Z_REF_P(retval_ptr));
|
||||
}
|
||||
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
} while (0);
|
||||
|
||||
ZEND_OBSERVER_FCALL_END(execute_data, return_value);
|
||||
@ -4854,7 +4854,7 @@ ZEND_VM_HANDLER(67, ZEND_SEND_REF, VAR|CV, CONST|UNUSED|NUM)
|
||||
}
|
||||
ZVAL_REF(arg, Z_REF_P(varptr));
|
||||
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
@ -4891,7 +4891,7 @@ ZEND_VM_C_LABEL(send_var_by_ref):
|
||||
}
|
||||
ZVAL_REF(arg, Z_REF_P(varptr));
|
||||
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
@ -4984,7 +4984,7 @@ ZEND_VM_HOT_HANDLER(185, ZEND_SEND_FUNC_ARG, VAR, CONST|UNUSED|NUM)
|
||||
}
|
||||
ZVAL_REF(arg, Z_REF_P(varptr));
|
||||
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
@ -5910,7 +5910,7 @@ ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSE
|
||||
} else {
|
||||
ZVAL_MAKE_REF_EX(expr_ptr, 2);
|
||||
}
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
} else {
|
||||
expr_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
|
||||
if (OP1_TYPE == IS_TMP_VAR) {
|
||||
@ -6496,7 +6496,7 @@ ZEND_VM_C_LABEL(num_index_dim):
|
||||
} while (0);
|
||||
|
||||
FREE_OP2();
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
@ -6541,7 +6541,7 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_S
|
||||
} while (0);
|
||||
|
||||
FREE_OP2();
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
@ -6650,9 +6650,7 @@ ZEND_VM_COLD_CONST_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
|
||||
}
|
||||
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
|
||||
|
||||
if (OP1_TYPE == IS_VAR) {
|
||||
FREE_OP1_VAR_PTR();
|
||||
}
|
||||
FREE_OP1_IF_VAR();
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
} else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
|
||||
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
|
||||
@ -6679,21 +6677,16 @@ ZEND_VM_COLD_CONST_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
|
||||
properties = Z_OBJPROP_P(array_ptr);
|
||||
if (zend_hash_num_elements(properties) == 0) {
|
||||
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1_IF_VAR();
|
||||
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
|
||||
}
|
||||
|
||||
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1_IF_VAR();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
} else {
|
||||
bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
|
||||
|
||||
if (OP1_TYPE == IS_VAR) {
|
||||
FREE_OP1_VAR_PTR();
|
||||
} else {
|
||||
FREE_OP1();
|
||||
}
|
||||
FREE_OP1();
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
HANDLE_EXCEPTION();
|
||||
} else if (is_empty) {
|
||||
@ -6706,11 +6699,7 @@ ZEND_VM_COLD_CONST_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
|
||||
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
|
||||
ZVAL_UNDEF(EX_VAR(opline->result.var));
|
||||
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
|
||||
if (OP1_TYPE == IS_VAR) {
|
||||
FREE_OP1_VAR_PTR();
|
||||
} else {
|
||||
FREE_OP1();
|
||||
}
|
||||
FREE_OP1();
|
||||
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
|
||||
}
|
||||
}
|
||||
@ -8033,7 +8022,7 @@ ZEND_VM_HANDLER(160, ZEND_YIELD, CONST|TMP|VAR|CV|UNUSED, CONST|TMPVAR|CV|UNUSED
|
||||
ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
|
||||
} while (0);
|
||||
|
||||
FREE_OP1_VAR_PTR();
|
||||
FREE_OP1();
|
||||
}
|
||||
} else {
|
||||
zval *value = GET_OP1_ZVAL_PTR(BP_VAR_R);
|
||||
|
@ -1076,7 +1076,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HA
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), prop);
|
||||
}
|
||||
|
||||
if ((opline+1)->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));};
|
||||
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
|
||||
@ -4425,7 +4425,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPE
|
||||
if (return_value) {
|
||||
ZVAL_NEW_REF(return_value, retval_ptr);
|
||||
} else {
|
||||
if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));};
|
||||
FREE_OP(opline->op1_type, opline->op1.var);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -4440,7 +4440,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPE
|
||||
ZVAL_REF(return_value, Z_REF_P(retval_ptr));
|
||||
}
|
||||
|
||||
if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));};
|
||||
FREE_OP(opline->op1_type, opline->op1.var);
|
||||
} while (0);
|
||||
|
||||
zend_observer_fcall_end(execute_data, return_value);
|
||||
@ -5068,9 +5068,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_
|
||||
}
|
||||
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
|
||||
|
||||
if (IS_CONST == IS_VAR) {
|
||||
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
|
||||
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
|
||||
@ -5107,11 +5104,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_
|
||||
} else {
|
||||
bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
|
||||
|
||||
if (IS_CONST == IS_VAR) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
HANDLE_EXCEPTION();
|
||||
} else if (is_empty) {
|
||||
@ -5124,11 +5116,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_
|
||||
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
|
||||
ZVAL_UNDEF(EX_VAR(opline->result.var));
|
||||
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
|
||||
if (IS_CONST == IS_VAR) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
|
||||
}
|
||||
}
|
||||
@ -18938,7 +18926,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER
|
||||
if (return_value) {
|
||||
ZVAL_NEW_REF(return_value, retval_ptr);
|
||||
} else {
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -18953,6 +18941,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER
|
||||
ZVAL_REF(return_value, Z_REF_P(retval_ptr));
|
||||
}
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
} while (0);
|
||||
|
||||
|
||||
@ -19221,9 +19210,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
|
||||
}
|
||||
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
|
||||
|
||||
if (IS_TMP_VAR == IS_VAR) {
|
||||
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
|
||||
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
|
||||
@ -19259,12 +19245,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
} else {
|
||||
bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
|
||||
|
||||
if (IS_TMP_VAR == IS_VAR) {
|
||||
|
||||
} else {
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
}
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
HANDLE_EXCEPTION();
|
||||
} else if (is_empty) {
|
||||
@ -19277,11 +19258,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
|
||||
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
|
||||
ZVAL_UNDEF(EX_VAR(opline->result.var));
|
||||
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
|
||||
if (IS_TMP_VAR == IS_VAR) {
|
||||
|
||||
} else {
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
}
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
|
||||
}
|
||||
}
|
||||
@ -19645,7 +19622,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CON
|
||||
} else {
|
||||
ZVAL_MAKE_REF_EX(expr_ptr, 2);
|
||||
}
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
} else {
|
||||
expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
|
||||
if (IS_TMP_VAR == IS_TMP_VAR) {
|
||||
@ -19805,6 +19782,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(Z
|
||||
ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
|
||||
} while (0);
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
}
|
||||
} else {
|
||||
zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
|
||||
@ -20084,7 +20062,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP
|
||||
} else {
|
||||
ZVAL_MAKE_REF_EX(expr_ptr, 2);
|
||||
}
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
} else {
|
||||
expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
|
||||
if (IS_TMP_VAR == IS_TMP_VAR) {
|
||||
@ -20244,6 +20222,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(
|
||||
ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
|
||||
} while (0);
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
}
|
||||
} else {
|
||||
zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
|
||||
@ -20544,7 +20523,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNU
|
||||
} else {
|
||||
ZVAL_MAKE_REF_EX(expr_ptr, 2);
|
||||
}
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
} else {
|
||||
expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
|
||||
if (IS_TMP_VAR == IS_TMP_VAR) {
|
||||
@ -20704,6 +20683,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(
|
||||
ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
|
||||
} while (0);
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
}
|
||||
} else {
|
||||
zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
|
||||
@ -20943,7 +20923,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_
|
||||
} else {
|
||||
ZVAL_MAKE_REF_EX(expr_ptr, 2);
|
||||
}
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
} else {
|
||||
expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
|
||||
if (IS_TMP_VAR == IS_TMP_VAR) {
|
||||
@ -21103,6 +21083,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND
|
||||
ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
|
||||
} while (0);
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
}
|
||||
} else {
|
||||
zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
|
||||
@ -21840,9 +21821,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
|
||||
}
|
||||
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
|
||||
|
||||
if (IS_VAR == IS_VAR) {
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
}
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
|
||||
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
|
||||
@ -21878,12 +21857,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
} else {
|
||||
bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
|
||||
|
||||
if (IS_VAR == IS_VAR) {
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
} else {
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
}
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
HANDLE_EXCEPTION();
|
||||
} else if (is_empty) {
|
||||
@ -21896,11 +21870,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
|
||||
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
|
||||
ZVAL_UNDEF(EX_VAR(opline->result.var));
|
||||
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
|
||||
if (IS_VAR == IS_VAR) {
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
} else {
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
}
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
|
||||
}
|
||||
}
|
||||
@ -23898,7 +23868,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
|
||||
@ -26416,7 +26386,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
|
||||
@ -30414,7 +30384,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
|
||||
@ -32283,7 +32253,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CON
|
||||
}
|
||||
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
|
||||
@ -34145,7 +34115,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMP
|
||||
}
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
|
||||
@ -36624,7 +36594,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_
|
||||
}
|
||||
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
|
||||
@ -38320,9 +38290,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
|
||||
}
|
||||
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
|
||||
|
||||
if (IS_CV == IS_VAR) {
|
||||
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
|
||||
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
|
||||
@ -38359,11 +38326,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
|
||||
} else {
|
||||
bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
|
||||
|
||||
if (IS_CV == IS_VAR) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
HANDLE_EXCEPTION();
|
||||
} else if (is_empty) {
|
||||
@ -38376,11 +38338,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
|
||||
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
|
||||
ZVAL_UNDEF(EX_VAR(opline->result.var));
|
||||
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
|
||||
if (IS_CV == IS_VAR) {
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
|
||||
}
|
||||
}
|
||||
@ -41285,7 +41243,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_O
|
||||
}
|
||||
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
|
||||
@ -44885,7 +44843,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_
|
||||
}
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
|
||||
@ -50000,7 +49958,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_D
|
||||
}
|
||||
|
||||
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
|
||||
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
|
||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||
}
|
||||
|
||||
|
@ -472,28 +472,6 @@ $op2_free_op_if_var = array(
|
||||
"TMPVARCV" => "???",
|
||||
);
|
||||
|
||||
$op1_free_op_var_ptr = array(
|
||||
"ANY" => "if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));}",
|
||||
"TMP" => "",
|
||||
"VAR" => "zval_ptr_dtor_nogc(EX_VAR(opline->op1.var))",
|
||||
"CONST" => "",
|
||||
"UNUSED" => "",
|
||||
"CV" => "",
|
||||
"TMPVAR" => "???",
|
||||
"TMPVARCV" => "???",
|
||||
);
|
||||
|
||||
$op2_free_op_var_ptr = array(
|
||||
"ANY" => "if (opline->op2_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));}",
|
||||
"TMP" => "",
|
||||
"VAR" => "zval_ptr_dtor_nogc(EX_VAR(opline->op2.var))",
|
||||
"CONST" => "",
|
||||
"UNUSED" => "",
|
||||
"CV" => "",
|
||||
"TMPVAR" => "???",
|
||||
"TMPVARCV" => "???",
|
||||
);
|
||||
|
||||
$op_data_type = array(
|
||||
"ANY" => "(opline+1)->op1_type",
|
||||
"TMP" => "IS_TMP_VAR",
|
||||
@ -549,17 +527,6 @@ $op_data_free_op = array(
|
||||
"TMPVARCV" => "???",
|
||||
);
|
||||
|
||||
$op_data_free_op_var_ptr = array(
|
||||
"ANY" => "if ((opline+1)->op1_type == IS_VAR) {zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));}",
|
||||
"TMP" => "",
|
||||
"VAR" => "zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));",
|
||||
"CONST" => "",
|
||||
"UNUSED" => "",
|
||||
"CV" => "",
|
||||
"TMPVAR" => "???",
|
||||
"TMPVARCV" => "???",
|
||||
);
|
||||
|
||||
$list = array(); // list of opcode handlers and helpers in original order
|
||||
$opcodes = array(); // opcode handlers by code
|
||||
$helpers = array(); // opcode helpers by name
|
||||
@ -719,10 +686,10 @@ function gen_code($f, $spec, $kind, $code, $op1, $op2, $name, $extra_spec=null)
|
||||
$op1_get_obj_zval_ptr_ptr, $op2_get_obj_zval_ptr_ptr,
|
||||
$op1_get_obj_zval_ptr_ptr_undef, $op2_get_obj_zval_ptr_ptr_undef,
|
||||
$op1_free_op, $op2_free_op, $op1_free_op_if_var, $op2_free_op_if_var,
|
||||
$op1_free_op_var_ptr, $op2_free_op_var_ptr, $prefix,
|
||||
$prefix,
|
||||
$op_data_type, $op_data_get_zval_ptr,
|
||||
$op_data_get_zval_ptr_deref, $op_data_get_zval_ptr_ptr,
|
||||
$op_data_free_op, $op_data_free_op_var_ptr;
|
||||
$op_data_free_op;
|
||||
|
||||
// Specializing
|
||||
$specialized_replacements = array(
|
||||
@ -752,8 +719,6 @@ function gen_code($f, $spec, $kind, $code, $op1, $op2, $name, $extra_spec=null)
|
||||
"/FREE_OP2\(\)/" => $op2_free_op[$op2],
|
||||
"/FREE_OP1_IF_VAR\(\)/" => $op1_free_op_if_var[$op1],
|
||||
"/FREE_OP2_IF_VAR\(\)/" => $op2_free_op_if_var[$op2],
|
||||
"/FREE_OP1_VAR_PTR\(\)/" => $op1_free_op_var_ptr[$op1],
|
||||
"/FREE_OP2_VAR_PTR\(\)/" => $op2_free_op_var_ptr[$op2],
|
||||
"/\!ZEND_VM_SPEC/m" => ($op1!="ANY"||$op2!="ANY")?"0":"1",
|
||||
"/ZEND_VM_SPEC/m" => ($op1!="ANY"||$op2!="ANY")?"1":"0",
|
||||
"/ZEND_VM_C_LABEL\(\s*([A-Za-z_]*)\s*\)/m" => "\\1".(($spec && $kind != ZEND_VM_KIND_CALL)?("_SPEC".$prefix[$op1].$prefix[$op2].extra_spec_name($extra_spec)):""),
|
||||
@ -767,7 +732,6 @@ function gen_code($f, $spec, $kind, $code, $op1, $op2, $name, $extra_spec=null)
|
||||
"/GET_OP_DATA_ZVAL_PTR_DEREF\(([^)]*)\)/" => $op_data_get_zval_ptr_deref[isset($extra_spec['OP_DATA']) ? $extra_spec['OP_DATA'] : "ANY"],
|
||||
"/GET_OP_DATA_ZVAL_PTR_PTR\(([^)]*)\)/" => $op_data_get_zval_ptr_ptr[isset($extra_spec['OP_DATA']) ? $extra_spec['OP_DATA'] : "ANY"],
|
||||
"/FREE_OP_DATA\(\)/" => $op_data_free_op[isset($extra_spec['OP_DATA']) ? $extra_spec['OP_DATA'] : "ANY"],
|
||||
"/FREE_OP_DATA_VAR_PTR\(\)/" => $op_data_free_op_var_ptr[isset($extra_spec['OP_DATA']) ? $extra_spec['OP_DATA'] : "ANY"],
|
||||
"/RETURN_VALUE_USED\(opline\)/" => isset($extra_spec['RETVAL']) ? $extra_spec['RETVAL'] : "RETURN_VALUE_USED(opline)",
|
||||
"/arg_num <= MAX_ARG_FLAG_NUM/" => isset($extra_spec['QUICK_ARG']) ? $extra_spec['QUICK_ARG'] : "arg_num <= MAX_ARG_FLAG_NUM",
|
||||
"/ZEND_VM_SMART_BRANCH\(\s*([^,)]*)\s*,\s*([^)]*)\s*\)/" => isset($extra_spec['SMART_BRANCH']) ?
|
||||
|
Loading…
Reference in New Issue
Block a user