|
|
@ -4831,11 +4831,33 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CONST_H |
|
|
|
{ |
|
|
|
USE_OPLINE |
|
|
|
|
|
|
|
zval *container; |
|
|
|
zval *container, *dim, *value, *result; |
|
|
|
|
|
|
|
SAVE_OPLINE(); |
|
|
|
container = EX_CONSTANT(opline->op1); |
|
|
|
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST); |
|
|
|
dim = EX_CONSTANT(opline->op2); |
|
|
|
if (IS_CONST != IS_CONST) { |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
fetch_dim_r_array: |
|
|
|
value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R); |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
ZVAL_COPY(result, value); |
|
|
|
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { |
|
|
|
container = Z_REFVAL_P(container); |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
goto fetch_dim_r_array; |
|
|
|
} else { |
|
|
|
goto fetch_dim_r_slow; |
|
|
|
} |
|
|
|
} else { |
|
|
|
fetch_dim_r_slow: |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R_slow(result, container, dim); |
|
|
|
} |
|
|
|
} else { |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); |
|
|
@ -8580,11 +8602,33 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CV_HAND |
|
|
|
{ |
|
|
|
USE_OPLINE |
|
|
|
|
|
|
|
zval *container; |
|
|
|
zval *container, *dim, *value, *result; |
|
|
|
|
|
|
|
SAVE_OPLINE(); |
|
|
|
container = EX_CONSTANT(opline->op1); |
|
|
|
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV); |
|
|
|
dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var); |
|
|
|
if (IS_CONST != IS_CONST) { |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
fetch_dim_r_array: |
|
|
|
value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R); |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
ZVAL_COPY(result, value); |
|
|
|
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { |
|
|
|
container = Z_REFVAL_P(container); |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
goto fetch_dim_r_array; |
|
|
|
} else { |
|
|
|
goto fetch_dim_r_slow; |
|
|
|
} |
|
|
|
} else { |
|
|
|
fetch_dim_r_slow: |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R_slow(result, container, dim); |
|
|
|
} |
|
|
|
} else { |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R(result, container, dim, IS_CV); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); |
|
|
@ -10415,11 +10459,33 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_ |
|
|
|
{ |
|
|
|
USE_OPLINE |
|
|
|
zend_free_op free_op2; |
|
|
|
zval *container; |
|
|
|
zval *container, *dim, *value, *result; |
|
|
|
|
|
|
|
SAVE_OPLINE(); |
|
|
|
container = EX_CONSTANT(opline->op1); |
|
|
|
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR)); |
|
|
|
dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2); |
|
|
|
if (IS_CONST != IS_CONST) { |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
fetch_dim_r_array: |
|
|
|
value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R); |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
ZVAL_COPY(result, value); |
|
|
|
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { |
|
|
|
container = Z_REFVAL_P(container); |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
goto fetch_dim_r_array; |
|
|
|
} else { |
|
|
|
goto fetch_dim_r_slow; |
|
|
|
} |
|
|
|
} else { |
|
|
|
fetch_dim_r_slow: |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R_slow(result, container, dim); |
|
|
|
} |
|
|
|
} else { |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R(result, container, dim, (IS_TMP_VAR|IS_VAR)); |
|
|
|
} |
|
|
|
zval_ptr_dtor_nogc(free_op2); |
|
|
|
|
|
|
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); |
|
|
@ -40065,11 +40131,33 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CONST_HAND |
|
|
|
{ |
|
|
|
USE_OPLINE |
|
|
|
|
|
|
|
zval *container; |
|
|
|
zval *container, *dim, *value, *result; |
|
|
|
|
|
|
|
SAVE_OPLINE(); |
|
|
|
container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var); |
|
|
|
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST); |
|
|
|
dim = EX_CONSTANT(opline->op2); |
|
|
|
if (IS_CV != IS_CONST) { |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
fetch_dim_r_array: |
|
|
|
value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R); |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
ZVAL_COPY(result, value); |
|
|
|
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { |
|
|
|
container = Z_REFVAL_P(container); |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
goto fetch_dim_r_array; |
|
|
|
} else { |
|
|
|
goto fetch_dim_r_slow; |
|
|
|
} |
|
|
|
} else { |
|
|
|
fetch_dim_r_slow: |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R_slow(result, container, dim); |
|
|
|
} |
|
|
|
} else { |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); |
|
|
@ -47056,11 +47144,33 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER |
|
|
|
{ |
|
|
|
USE_OPLINE |
|
|
|
|
|
|
|
zval *container; |
|
|
|
zval *container, *dim, *value, *result; |
|
|
|
|
|
|
|
SAVE_OPLINE(); |
|
|
|
container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var); |
|
|
|
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV); |
|
|
|
dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var); |
|
|
|
if (IS_CV != IS_CONST) { |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
fetch_dim_r_array: |
|
|
|
value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R); |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
ZVAL_COPY(result, value); |
|
|
|
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { |
|
|
|
container = Z_REFVAL_P(container); |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
goto fetch_dim_r_array; |
|
|
|
} else { |
|
|
|
goto fetch_dim_r_slow; |
|
|
|
} |
|
|
|
} else { |
|
|
|
fetch_dim_r_slow: |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R_slow(result, container, dim); |
|
|
|
} |
|
|
|
} else { |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R(result, container, dim, IS_CV); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); |
|
|
@ -51176,11 +51286,33 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HAN |
|
|
|
{ |
|
|
|
USE_OPLINE |
|
|
|
zend_free_op free_op2; |
|
|
|
zval *container; |
|
|
|
zval *container, *dim, *value, *result; |
|
|
|
|
|
|
|
SAVE_OPLINE(); |
|
|
|
container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var); |
|
|
|
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR)); |
|
|
|
dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2); |
|
|
|
if (IS_CV != IS_CONST) { |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
fetch_dim_r_array: |
|
|
|
value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R); |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
ZVAL_COPY(result, value); |
|
|
|
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { |
|
|
|
container = Z_REFVAL_P(container); |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
goto fetch_dim_r_array; |
|
|
|
} else { |
|
|
|
goto fetch_dim_r_slow; |
|
|
|
} |
|
|
|
} else { |
|
|
|
fetch_dim_r_slow: |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R_slow(result, container, dim); |
|
|
|
} |
|
|
|
} else { |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R(result, container, dim, (IS_TMP_VAR|IS_VAR)); |
|
|
|
} |
|
|
|
zval_ptr_dtor_nogc(free_op2); |
|
|
|
|
|
|
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); |
|
|
@ -54643,11 +54775,33 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_ |
|
|
|
{ |
|
|
|
USE_OPLINE |
|
|
|
zend_free_op free_op1; |
|
|
|
zval *container; |
|
|
|
zval *container, *dim, *value, *result; |
|
|
|
|
|
|
|
SAVE_OPLINE(); |
|
|
|
container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1); |
|
|
|
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST); |
|
|
|
dim = EX_CONSTANT(opline->op2); |
|
|
|
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
fetch_dim_r_array: |
|
|
|
value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R); |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
ZVAL_COPY(result, value); |
|
|
|
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { |
|
|
|
container = Z_REFVAL_P(container); |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
goto fetch_dim_r_array; |
|
|
|
} else { |
|
|
|
goto fetch_dim_r_slow; |
|
|
|
} |
|
|
|
} else { |
|
|
|
fetch_dim_r_slow: |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R_slow(result, container, dim); |
|
|
|
} |
|
|
|
} else { |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST); |
|
|
|
} |
|
|
|
|
|
|
|
zval_ptr_dtor_nogc(free_op1); |
|
|
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); |
|
|
@ -56904,11 +57058,33 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HAN |
|
|
|
{ |
|
|
|
USE_OPLINE |
|
|
|
zend_free_op free_op1; |
|
|
|
zval *container; |
|
|
|
zval *container, *dim, *value, *result; |
|
|
|
|
|
|
|
SAVE_OPLINE(); |
|
|
|
container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1); |
|
|
|
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV); |
|
|
|
dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var); |
|
|
|
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
fetch_dim_r_array: |
|
|
|
value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R); |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
ZVAL_COPY(result, value); |
|
|
|
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { |
|
|
|
container = Z_REFVAL_P(container); |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
goto fetch_dim_r_array; |
|
|
|
} else { |
|
|
|
goto fetch_dim_r_slow; |
|
|
|
} |
|
|
|
} else { |
|
|
|
fetch_dim_r_slow: |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R_slow(result, container, dim); |
|
|
|
} |
|
|
|
} else { |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R(result, container, dim, IS_CV); |
|
|
|
} |
|
|
|
|
|
|
|
zval_ptr_dtor_nogc(free_op1); |
|
|
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); |
|
|
@ -58068,11 +58244,33 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR |
|
|
|
{ |
|
|
|
USE_OPLINE |
|
|
|
zend_free_op free_op1, free_op2; |
|
|
|
zval *container; |
|
|
|
zval *container, *dim, *value, *result; |
|
|
|
|
|
|
|
SAVE_OPLINE(); |
|
|
|
container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1); |
|
|
|
zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR)); |
|
|
|
dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2); |
|
|
|
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
fetch_dim_r_array: |
|
|
|
value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R); |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
ZVAL_COPY(result, value); |
|
|
|
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { |
|
|
|
container = Z_REFVAL_P(container); |
|
|
|
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { |
|
|
|
goto fetch_dim_r_array; |
|
|
|
} else { |
|
|
|
goto fetch_dim_r_slow; |
|
|
|
} |
|
|
|
} else { |
|
|
|
fetch_dim_r_slow: |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R_slow(result, container, dim); |
|
|
|
} |
|
|
|
} else { |
|
|
|
result = EX_VAR(opline->result.var); |
|
|
|
zend_fetch_dimension_address_read_R(result, container, dim, (IS_TMP_VAR|IS_VAR)); |
|
|
|
} |
|
|
|
zval_ptr_dtor_nogc(free_op2); |
|
|
|
zval_ptr_dtor_nogc(free_op1); |
|
|
|
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); |
|
|
|