mirror of
https://github.com/php/php-src.git
synced 2026-04-27 18:23:26 +02:00
- MFZE1
This commit is contained in:
+3
-3
@@ -237,9 +237,9 @@ void fetch_simple_variable_ex(znode *result, znode *varname, int bp, int op TSRM
|
||||
if (varname->op_type == IS_CONST
|
||||
&& varname->u.constant.type == IS_STRING
|
||||
&& zend_hash_exists(CG(auto_globals), varname->u.constant.value.str.val, varname->u.constant.value.str.len+1)) {
|
||||
opline_ptr->op2.u.fetch_type = ZEND_FETCH_GLOBAL;
|
||||
opline_ptr->extended_value = ZEND_FETCH_GLOBAL;
|
||||
} else {
|
||||
opline_ptr->op2.u.fetch_type = ZEND_FETCH_LOCAL;
|
||||
opline_ptr->extended_value = ZEND_FETCH_LOCAL;
|
||||
}
|
||||
|
||||
if (bp) {
|
||||
@@ -2120,7 +2120,7 @@ void zend_do_fetch_global_or_static_variable(znode *varname, znode *static_assig
|
||||
opline->result.u.var = get_temporary_variable(CG(active_op_array));
|
||||
opline->op1 = *varname;
|
||||
SET_UNUSED(opline->op2);
|
||||
opline->op2.u.fetch_type = fetch_type;
|
||||
opline->extended_value = fetch_type;
|
||||
result = opline->result;
|
||||
|
||||
if (varname->op_type == IS_CONST) {
|
||||
|
||||
@@ -50,7 +50,6 @@ typedef struct _znode {
|
||||
|
||||
zend_uint var;
|
||||
zend_uint opline_num; /* Needs to be signed */
|
||||
zend_uint fetch_type;
|
||||
zend_op_array *op_array;
|
||||
zend_class_entry *previously_active_class_entry; /* Used at compile-time */
|
||||
struct {
|
||||
|
||||
+17
-17
@@ -57,7 +57,7 @@
|
||||
static zval get_overloaded_property(temp_variable *T TSRMLS_DC);
|
||||
static void set_overloaded_property(temp_variable *T, zval *value TSRMLS_DC);
|
||||
static void call_overloaded_function(temp_variable *T, int arg_count, zval *return_value TSRMLS_DC);
|
||||
static void zend_fetch_var_address(znode *result, znode *op1, znode *op2, temp_variable *Ts, int type TSRMLS_DC);
|
||||
static void zend_fetch_var_address(zend_op *opline, temp_variable *Ts, int type TSRMLS_DC);
|
||||
static void zend_fetch_dimension_address(znode *result, znode *op1, znode *op2, temp_variable *Ts, int type TSRMLS_DC);
|
||||
static void zend_fetch_property_address(znode *result, znode *op1, znode *op2, temp_variable *Ts, int type TSRMLS_DC);
|
||||
static void zend_fetch_dimension_address_from_tmp_var(znode *result, znode *op1, znode *op2, temp_variable *Ts TSRMLS_DC);
|
||||
@@ -522,20 +522,20 @@ static void print_refcount(zval *p, char *str)
|
||||
}
|
||||
|
||||
|
||||
static void zend_fetch_var_address(znode *result, znode *op1, znode *op2, temp_variable *Ts, int type TSRMLS_DC)
|
||||
static void zend_fetch_var_address(zend_op *opline, temp_variable *Ts, int type TSRMLS_DC)
|
||||
{
|
||||
int free_op1;
|
||||
zval *varname = get_zval_ptr(op1, Ts, &free_op1, BP_VAR_R);
|
||||
zval *varname = get_zval_ptr(&opline->op1, Ts, &free_op1, BP_VAR_R);
|
||||
zval **retval;
|
||||
zval tmp_varname;
|
||||
HashTable *target_symbol_table=0;
|
||||
|
||||
switch (op2->u.fetch_type) {
|
||||
switch (opline->extended_value) {
|
||||
case ZEND_FETCH_LOCAL:
|
||||
target_symbol_table = EG(active_symbol_table);
|
||||
break;
|
||||
case ZEND_FETCH_GLOBAL:
|
||||
if (op1->op_type == IS_VAR) {
|
||||
if (opline->op1.op_type == IS_VAR) {
|
||||
PZVAL_LOCK(varname);
|
||||
}
|
||||
target_symbol_table = &EG(symbol_table);
|
||||
@@ -577,17 +577,17 @@ static void zend_fetch_var_address(znode *result, znode *op1, znode *op2, temp_v
|
||||
EMPTY_SWITCH_DEFAULT_CASE()
|
||||
}
|
||||
}
|
||||
if (op2->u.fetch_type == ZEND_FETCH_LOCAL) {
|
||||
FREE_OP(Ts, op1, free_op1);
|
||||
} else if (op2->u.fetch_type == ZEND_FETCH_STATIC) {
|
||||
if (opline->extended_value == ZEND_FETCH_LOCAL) {
|
||||
FREE_OP(Ts, &opline->op1, free_op1);
|
||||
} else if (opline->extended_value == ZEND_FETCH_STATIC) {
|
||||
zval_update_constant(retval, (void *) 1 TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (varname == &tmp_varname) {
|
||||
zval_dtor(varname);
|
||||
}
|
||||
Ts[result->u.var].var.ptr_ptr = retval;
|
||||
SELECTIVE_PZVAL_LOCK(*retval, result);
|
||||
Ts[opline->result.u.var].var.ptr_ptr = retval;
|
||||
SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
|
||||
}
|
||||
|
||||
|
||||
@@ -1236,27 +1236,27 @@ binary_assign_op_addr: {
|
||||
FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
|
||||
NEXT_OPCODE();
|
||||
case ZEND_FETCH_R:
|
||||
zend_fetch_var_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
|
||||
zend_fetch_var_address(EX(opline), EX(Ts), BP_VAR_R TSRMLS_CC);
|
||||
AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
|
||||
NEXT_OPCODE();
|
||||
case ZEND_FETCH_W:
|
||||
zend_fetch_var_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_W TSRMLS_CC);
|
||||
zend_fetch_var_address(EX(opline), EX(Ts), BP_VAR_W TSRMLS_CC);
|
||||
NEXT_OPCODE();
|
||||
case ZEND_FETCH_RW:
|
||||
zend_fetch_var_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_RW TSRMLS_CC);
|
||||
zend_fetch_var_address(EX(opline), EX(Ts), BP_VAR_RW TSRMLS_CC);
|
||||
NEXT_OPCODE();
|
||||
case ZEND_FETCH_FUNC_ARG:
|
||||
if (ARG_SHOULD_BE_SENT_BY_REF(EX(opline)->extended_value, EX(fbc), EX(fbc)->common.arg_types)) {
|
||||
/* Behave like FETCH_W */
|
||||
zend_fetch_var_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_W TSRMLS_CC);
|
||||
zend_fetch_var_address(EX(opline), EX(Ts), BP_VAR_W TSRMLS_CC);
|
||||
} else {
|
||||
/* Behave like FETCH_R */
|
||||
zend_fetch_var_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
|
||||
zend_fetch_var_address(EX(opline), EX(Ts), BP_VAR_R TSRMLS_CC);
|
||||
AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
|
||||
}
|
||||
NEXT_OPCODE();
|
||||
case ZEND_FETCH_UNSET:
|
||||
zend_fetch_var_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
|
||||
zend_fetch_var_address(EX(opline), EX(Ts), BP_VAR_R TSRMLS_CC);
|
||||
PZVAL_UNLOCK(*EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr);
|
||||
if (EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
|
||||
SEPARATE_ZVAL_IF_NOT_REF(EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr);
|
||||
@@ -1264,7 +1264,7 @@ binary_assign_op_addr: {
|
||||
PZVAL_LOCK(*EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr);
|
||||
NEXT_OPCODE();
|
||||
case ZEND_FETCH_IS:
|
||||
zend_fetch_var_address(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX(Ts), BP_VAR_IS TSRMLS_CC);
|
||||
zend_fetch_var_address(EX(opline), EX(Ts), BP_VAR_IS TSRMLS_CC);
|
||||
AI_USE_PTR(EX(Ts)[EX(opline)->result.u.var].var);
|
||||
NEXT_OPCODE();
|
||||
case ZEND_FETCH_DIM_R:
|
||||
|
||||
Reference in New Issue
Block a user