Skip to content

Commit 2d39d03

Browse files
committed
Avoid useless dereferences
1 parent 38d70ae commit 2d39d03

2 files changed

Lines changed: 90 additions & 65 deletions

File tree

Zend/zend_vm_def.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2068,7 +2068,9 @@ ZEND_VM_HANDLER(56, ZEND_ADD_VAR, TMP|UNUSED, TMP|VAR|CV)
20682068
}
20692069

20702070
if (Z_TYPE_P(var) != IS_STRING) {
2071-
ZVAL_DEREF(var);
2071+
if (OP2_TYPE != IS_TMP_VAR) {
2072+
ZVAL_DEREF(var);
2073+
}
20722074
if (Z_TYPE_P(var) != IS_STRING) {
20732075
use_copy = zend_make_printable_zval(var, &var_copy TSRMLS_CC);
20742076

@@ -2395,12 +2397,10 @@ ZEND_VM_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST|TMP|VAR|CV)
23952397
zend_free_op free_op2;
23962398
zend_class_entry *called_scope;
23972399
zend_object *object;
2398-
zval *function_name_ptr;
23992400

24002401
SAVE_OPLINE();
2401-
function_name_ptr = function_name = GET_OP2_ZVAL_PTR(BP_VAR_R);
2402+
function_name = GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R);
24022403

2403-
ZVAL_DEREF(function_name);
24042404
if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
24052405
if (Z_STRVAL_P(function_name)[0] == '\\') {
24062406
lcname = zend_string_alloc(Z_STRLEN_P(function_name) - 1, 0);
@@ -2425,10 +2425,9 @@ ZEND_VM_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST|TMP|VAR|CV)
24252425
if (object) {
24262426
GC_REFCOUNT(object)++;
24272427
}
2428-
if (OP2_TYPE == IS_VAR && Z_REFCOUNT_P(function_name) == 1 &&
2429-
fbc->common.fn_flags & ZEND_ACC_CLOSURE) {
2428+
if (OP2_TYPE == IS_VAR && (fbc->common.fn_flags & ZEND_ACC_CLOSURE)) {
24302429
/* Delay closure destruction until its invocation */
2431-
fbc->common.prototype = (zend_function*)Z_OBJ_P(function_name_ptr);
2430+
fbc->common.prototype = (zend_function*)Z_OBJ_P(free_op2);
24322431
} else if (OP2_TYPE == IS_CV) {
24332432
FREE_OP2();
24342433
}
@@ -4327,8 +4326,8 @@ ZEND_VM_HANDLER(75, ZEND_UNSET_DIM, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
43274326
}
43284327
if (OP1_TYPE != IS_UNUSED) {
43294328
ZVAL_DEREF(container);
4330-
SEPARATE_ZVAL_NOREF(container);
43314329
}
4330+
SEPARATE_ZVAL_NOREF(container);
43324331
offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
43334332

43344333
if (OP1_TYPE != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
@@ -4411,7 +4410,9 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
44114410
}
44124411
offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
44134412

4414-
ZVAL_DEREF(container);
4413+
if (OP1_TYPE != IS_UNUSED) {
4414+
ZVAL_DEREF(container);
4415+
}
44154416
if (OP1_TYPE == IS_UNUSED || Z_TYPE_P(container) == IS_OBJECT) {
44164417
if (Z_OBJ_HT_P(container)->unset_property) {
44174418
Z_OBJ_HT_P(container)->unset_property(container, offset, ((OP2_TYPE == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(offset)) : NULL) TSRMLS_CC);

0 commit comments

Comments
 (0)