]> granicus.if.org Git - php/commitdiff
zend_isset_isempty_dim_prop_obj_handler() split into separate handlers. (Actually...
authorDmitry Stogov <dmitry@zend.com>
Mon, 21 Apr 2014 20:32:29 +0000 (00:32 +0400)
committerDmitry Stogov <dmitry@zend.com>
Mon, 21 Apr 2014 20:32:29 +0000 (00:32 +0400)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index ed39f60eda9c91059ef9d52e5623d15059aa2077..63e416566927c402beff272fd56b53b0c448ceec 100644 (file)
@@ -1824,6 +1824,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
                        HANDLE_EXCEPTION_LEAVE();
                }
 
+               LOAD_OPLINE();
                ZEND_VM_INC_OPCODE();
                ZEND_VM_LEAVE();
        } else if (frame_kind == VM_FRAME_NESTED_CODE) {
@@ -1843,6 +1844,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
                        HANDLE_EXCEPTION_LEAVE();
                }
 
+               LOAD_OPLINE();
                ZEND_VM_INC_OPCODE();
                ZEND_VM_LEAVE();
        } else {
@@ -4530,7 +4532,7 @@ ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMP|VAR|CV, UNUSED|CONST|VAR)
        ZEND_VM_NEXT_OPCODE();
 }
 
-ZEND_VM_HELPER_EX(zend_isset_isempty_dim_prop_obj_handler, VAR|UNUSED|CV, CONST|TMP|VAR|CV, int prop_dim)
+ZEND_VM_HANDLER(115, ZEND_ISSET_ISEMPTY_DIM_OBJ, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
 {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
@@ -4543,7 +4545,7 @@ ZEND_VM_HELPER_EX(zend_isset_isempty_dim_prop_obj_handler, VAR|UNUSED|CV, CONST|
        container = GET_OP1_OBJ_ZVAL_PTR_DEREF(BP_VAR_IS);
        offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
-       if (Z_TYPE_P(container) == IS_ARRAY && !prop_dim) {
+       if (Z_TYPE_P(container) == IS_ARRAY) {
                HashTable *ht = Z_ARRVAL_P(container);
                zval *value = NULL;
                zend_string *str;
@@ -4588,25 +4590,16 @@ ZEND_VM_C_LABEL(str_index_prop):
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
-               if (prop_dim) {
-                       if (Z_OBJ_HT_P(container)->has_property) {
-                               result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((OP2_TYPE == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check property of non-object");
-                               result = 0;
-                       }
+               if (Z_OBJ_HT_P(container)->has_dimension) {
+                       result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
                } else {
-                       if (Z_OBJ_HT_P(container)->has_dimension) {
-                               result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check element of non-array");
-                               result = 0;
-                       }
+                       zend_error(E_NOTICE, "Trying to check element of non-array");
+                       result = 0;
                }
                if ((opline->extended_value & ZEND_ISSET) == 0) {
                        result = !result;
                }
-       } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
+       } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
                zval tmp;
 
                result = 0;
@@ -4641,14 +4634,37 @@ ZEND_VM_C_LABEL(str_index_prop):
        ZEND_VM_NEXT_OPCODE();
 }
 
-ZEND_VM_HANDLER(115, ZEND_ISSET_ISEMPTY_DIM_OBJ, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
-{
-       ZEND_VM_DISPATCH_TO_HELPER_EX(zend_isset_isempty_dim_prop_obj_handler, prop_dim, 0);
-}
-
 ZEND_VM_HANDLER(148, ZEND_ISSET_ISEMPTY_PROP_OBJ, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
 {
-       ZEND_VM_DISPATCH_TO_HELPER_EX(zend_isset_isempty_dim_prop_obj_handler, prop_dim, 1);
+       USE_OPLINE
+       zend_free_op free_op1, free_op2;
+       zval *container;
+       int result;
+       zval *offset;
+
+       SAVE_OPLINE();
+       container = GET_OP1_OBJ_ZVAL_PTR_DEREF(BP_VAR_IS);
+       offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
+
+       if (Z_TYPE_P(container) == IS_OBJECT) {
+               if (Z_OBJ_HT_P(container)->has_property) {
+                       result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((OP2_TYPE == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
+               } else {
+                       zend_error(E_NOTICE, "Trying to check property of non-object");
+                       result = 0;
+               }
+               if ((opline->extended_value & ZEND_ISSET) == 0) {
+                       result = !result;
+               }
+       } else {
+               result = ((opline->extended_value & ZEND_ISSET) == 0);
+       }
+
+       FREE_OP2();
+       ZVAL_BOOL(EX_VAR(opline->result.var), result);
+       FREE_OP1_IF_VAR();
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
 }
 
 ZEND_VM_HANDLER(79, ZEND_EXIT, CONST|TMP|VAR|UNUSED|CV, ANY)
index 9a6082b1abc663bde2ff92dc3bb88adc052a12ee..af9b09dfd26ade534d6b6608e59c9f35bb2ba48d 100644 (file)
@@ -433,6 +433,7 @@ static int ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
                        HANDLE_EXCEPTION_LEAVE();
                }
 
+               LOAD_OPLINE();
                ZEND_VM_INC_OPCODE();
                ZEND_VM_LEAVE();
        } else if (frame_kind == VM_FRAME_NESTED_CODE) {
@@ -452,6 +453,7 @@ static int ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
                        HANDLE_EXCEPTION_LEAVE();
                }
 
+               LOAD_OPLINE();
                ZEND_VM_INC_OPCODE();
                ZEND_VM_LEAVE();
        } else {
@@ -15409,7 +15411,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPC
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
+static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
        zend_free_op free_op1;
@@ -15422,7 +15424,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(
        container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        offset = opline->op2.zv;
 
-       if (Z_TYPE_P(container) == IS_ARRAY && !prop_dim) {
+       if (Z_TYPE_P(container) == IS_ARRAY) {
                HashTable *ht = Z_ARRVAL_P(container);
                zval *value = NULL;
                zend_string *str;
@@ -15467,25 +15469,16 @@ str_index_prop:
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
-               if (prop_dim) {
-                       if (Z_OBJ_HT_P(container)->has_property) {
-                               result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CONST == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check property of non-object");
-                               result = 0;
-                       }
+               if (Z_OBJ_HT_P(container)->has_dimension) {
+                       result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
                } else {
-                       if (Z_OBJ_HT_P(container)->has_dimension) {
-                               result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check element of non-array");
-                               result = 0;
-                       }
+                       zend_error(E_NOTICE, "Trying to check element of non-array");
+                       result = 0;
                }
                if ((opline->extended_value & ZEND_ISSET) == 0) {
                        result = !result;
                }
-       } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
+       } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
                zval tmp;
 
                result = 0;
@@ -15519,14 +15512,36 @@ str_index_prop:
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
-}
-
 static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+       USE_OPLINE
+       zend_free_op free_op1;
+       zval *container;
+       int result;
+       zval *offset;
+
+       SAVE_OPLINE();
+       container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+       offset = opline->op2.zv;
+
+       if (Z_TYPE_P(container) == IS_OBJECT) {
+               if (Z_OBJ_HT_P(container)->has_property) {
+                       result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CONST == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
+               } else {
+                       zend_error(E_NOTICE, "Trying to check property of non-object");
+                       result = 0;
+               }
+               if ((opline->extended_value & ZEND_ISSET) == 0) {
+                       result = !result;
+               }
+       } else {
+               result = ((opline->extended_value & ZEND_ISSET) == 0);
+       }
+
+       ZVAL_BOOL(EX_VAR(opline->result.var), result);
+       zval_ptr_dtor_nogc(free_op1.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
 }
 
 static int ZEND_FASTCALL  ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17315,7 +17330,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLE
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
+static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
@@ -17328,7 +17343,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(in
        container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
 
-       if (Z_TYPE_P(container) == IS_ARRAY && !prop_dim) {
+       if (Z_TYPE_P(container) == IS_ARRAY) {
                HashTable *ht = Z_ARRVAL_P(container);
                zval *value = NULL;
                zend_string *str;
@@ -17373,25 +17388,16 @@ str_index_prop:
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
-               if (prop_dim) {
-                       if (Z_OBJ_HT_P(container)->has_property) {
-                               result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_TMP_VAR == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check property of non-object");
-                               result = 0;
-                       }
+               if (Z_OBJ_HT_P(container)->has_dimension) {
+                       result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
                } else {
-                       if (Z_OBJ_HT_P(container)->has_dimension) {
-                               result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check element of non-array");
-                               result = 0;
-                       }
+                       zend_error(E_NOTICE, "Trying to check element of non-array");
+                       result = 0;
                }
                if ((opline->extended_value & ZEND_ISSET) == 0) {
                        result = !result;
                }
-       } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
+       } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
                zval tmp;
 
                result = 0;
@@ -17426,14 +17432,37 @@ str_index_prop:
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
-}
-
 static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+       USE_OPLINE
+       zend_free_op free_op1, free_op2;
+       zval *container;
+       int result;
+       zval *offset;
+
+       SAVE_OPLINE();
+       container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+       offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+
+       if (Z_TYPE_P(container) == IS_OBJECT) {
+               if (Z_OBJ_HT_P(container)->has_property) {
+                       result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_TMP_VAR == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
+               } else {
+                       zend_error(E_NOTICE, "Trying to check property of non-object");
+                       result = 0;
+               }
+               if ((opline->extended_value & ZEND_ISSET) == 0) {
+                       result = !result;
+               }
+       } else {
+               result = ((opline->extended_value & ZEND_ISSET) == 0);
+       }
+
+       zval_dtor(free_op2.var);
+       ZVAL_BOOL(EX_VAR(opline->result.var), result);
+       zval_ptr_dtor_nogc(free_op1.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
 }
 
 static int ZEND_FASTCALL  ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -19583,7 +19612,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_VAR_HANDLER(ZEND_OPCOD
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
+static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
        zend_free_op free_op1, free_op2;
@@ -19596,7 +19625,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(in
        container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
 
-       if (Z_TYPE_P(container) == IS_ARRAY && !prop_dim) {
+       if (Z_TYPE_P(container) == IS_ARRAY) {
                HashTable *ht = Z_ARRVAL_P(container);
                zval *value = NULL;
                zend_string *str;
@@ -19641,25 +19670,16 @@ str_index_prop:
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
-               if (prop_dim) {
-                       if (Z_OBJ_HT_P(container)->has_property) {
-                               result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_VAR == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check property of non-object");
-                               result = 0;
-                       }
+               if (Z_OBJ_HT_P(container)->has_dimension) {
+                       result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
                } else {
-                       if (Z_OBJ_HT_P(container)->has_dimension) {
-                               result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check element of non-array");
-                               result = 0;
-                       }
+                       zend_error(E_NOTICE, "Trying to check element of non-array");
+                       result = 0;
                }
                if ((opline->extended_value & ZEND_ISSET) == 0) {
                        result = !result;
                }
-       } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
+       } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
                zval tmp;
 
                result = 0;
@@ -19694,14 +19714,37 @@ str_index_prop:
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
-}
-
 static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+       USE_OPLINE
+       zend_free_op free_op1, free_op2;
+       zval *container;
+       int result;
+       zval *offset;
+
+       SAVE_OPLINE();
+       container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+       offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+
+       if (Z_TYPE_P(container) == IS_OBJECT) {
+               if (Z_OBJ_HT_P(container)->has_property) {
+                       result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_VAR == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
+               } else {
+                       zend_error(E_NOTICE, "Trying to check property of non-object");
+                       result = 0;
+               }
+               if ((opline->extended_value & ZEND_ISSET) == 0) {
+                       result = !result;
+               }
+       } else {
+               result = ((opline->extended_value & ZEND_ISSET) == 0);
+       }
+
+       zval_ptr_dtor_nogc(free_op2.var);
+       ZVAL_BOOL(EX_VAR(opline->result.var), result);
+       zval_ptr_dtor_nogc(free_op1.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
 }
 
 static int ZEND_FASTCALL  ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22689,7 +22732,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
+static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
        zend_free_op free_op1;
@@ -22702,7 +22745,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(int
        container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
 
-       if (Z_TYPE_P(container) == IS_ARRAY && !prop_dim) {
+       if (Z_TYPE_P(container) == IS_ARRAY) {
                HashTable *ht = Z_ARRVAL_P(container);
                zval *value = NULL;
                zend_string *str;
@@ -22747,25 +22790,16 @@ str_index_prop:
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
-               if (prop_dim) {
-                       if (Z_OBJ_HT_P(container)->has_property) {
-                               result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CV == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check property of non-object");
-                               result = 0;
-                       }
+               if (Z_OBJ_HT_P(container)->has_dimension) {
+                       result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
                } else {
-                       if (Z_OBJ_HT_P(container)->has_dimension) {
-                               result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check element of non-array");
-                               result = 0;
-                       }
+                       zend_error(E_NOTICE, "Trying to check element of non-array");
+                       result = 0;
                }
                if ((opline->extended_value & ZEND_ISSET) == 0) {
                        result = !result;
                }
-       } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
+       } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
                zval tmp;
 
                result = 0;
@@ -22799,14 +22833,36 @@ str_index_prop:
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
-}
-
 static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+       USE_OPLINE
+       zend_free_op free_op1;
+       zval *container;
+       int result;
+       zval *offset;
+
+       SAVE_OPLINE();
+       container = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+       offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
+
+       if (Z_TYPE_P(container) == IS_OBJECT) {
+               if (Z_OBJ_HT_P(container)->has_property) {
+                       result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CV == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
+               } else {
+                       zend_error(E_NOTICE, "Trying to check property of non-object");
+                       result = 0;
+               }
+               if ((opline->extended_value & ZEND_ISSET) == 0) {
+                       result = !result;
+               }
+       } else {
+               result = ((opline->extended_value & ZEND_ISSET) == 0);
+       }
+
+       ZVAL_BOOL(EX_VAR(opline->result.var), result);
+       zval_ptr_dtor_nogc(free_op1.var);
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
 }
 
 static int ZEND_FASTCALL  ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -24080,7 +24136,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_H
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CONST(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
+static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
 
@@ -24093,7 +24149,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CON
        container = _get_obj_zval_ptr_unused(TSRMLS_C);
        offset = opline->op2.zv;
 
-       if (Z_TYPE_P(container) == IS_ARRAY && !prop_dim) {
+       if (Z_TYPE_P(container) == IS_ARRAY) {
                HashTable *ht = Z_ARRVAL_P(container);
                zval *value = NULL;
                zend_string *str;
@@ -24138,25 +24194,16 @@ str_index_prop:
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
-               if (prop_dim) {
-                       if (Z_OBJ_HT_P(container)->has_property) {
-                               result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CONST == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check property of non-object");
-                               result = 0;
-                       }
+               if (Z_OBJ_HT_P(container)->has_dimension) {
+                       result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
                } else {
-                       if (Z_OBJ_HT_P(container)->has_dimension) {
-                               result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check element of non-array");
-                               result = 0;
-                       }
+                       zend_error(E_NOTICE, "Trying to check element of non-array");
+                       result = 0;
                }
                if ((opline->extended_value & ZEND_ISSET) == 0) {
                        result = !result;
                }
-       } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
+       } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
                zval tmp;
 
                result = 0;
@@ -24190,14 +24237,36 @@ str_index_prop:
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CONST(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
-}
-
 static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CONST(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+       USE_OPLINE
+
+       zval *container;
+       int result;
+       zval *offset;
+
+       SAVE_OPLINE();
+       container = _get_obj_zval_ptr_unused(TSRMLS_C);
+       offset = opline->op2.zv;
+
+       if (Z_TYPE_P(container) == IS_OBJECT) {
+               if (Z_OBJ_HT_P(container)->has_property) {
+                       result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CONST == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
+               } else {
+                       zend_error(E_NOTICE, "Trying to check property of non-object");
+                       result = 0;
+               }
+               if ((opline->extended_value & ZEND_ISSET) == 0) {
+                       result = !result;
+               }
+       } else {
+               result = ((opline->extended_value & ZEND_ISSET) == 0);
+       }
+
+       ZVAL_BOOL(EX_VAR(opline->result.var), result);
+
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
 }
 
 static int ZEND_FASTCALL  ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -25306,7 +25375,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HAN
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
+static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
        zend_free_op free_op2;
@@ -25319,7 +25388,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP
        container = _get_obj_zval_ptr_unused(TSRMLS_C);
        offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
 
-       if (Z_TYPE_P(container) == IS_ARRAY && !prop_dim) {
+       if (Z_TYPE_P(container) == IS_ARRAY) {
                HashTable *ht = Z_ARRVAL_P(container);
                zval *value = NULL;
                zend_string *str;
@@ -25364,25 +25433,16 @@ str_index_prop:
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
-               if (prop_dim) {
-                       if (Z_OBJ_HT_P(container)->has_property) {
-                               result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_TMP_VAR == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check property of non-object");
-                               result = 0;
-                       }
+               if (Z_OBJ_HT_P(container)->has_dimension) {
+                       result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
                } else {
-                       if (Z_OBJ_HT_P(container)->has_dimension) {
-                               result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check element of non-array");
-                               result = 0;
-                       }
+                       zend_error(E_NOTICE, "Trying to check element of non-array");
+                       result = 0;
                }
                if ((opline->extended_value & ZEND_ISSET) == 0) {
                        result = !result;
                }
-       } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
+       } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
                zval tmp;
 
                result = 0;
@@ -25417,14 +25477,37 @@ str_index_prop:
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
-}
-
 static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+       USE_OPLINE
+       zend_free_op free_op2;
+       zval *container;
+       int result;
+       zval *offset;
+
+       SAVE_OPLINE();
+       container = _get_obj_zval_ptr_unused(TSRMLS_C);
+       offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+
+       if (Z_TYPE_P(container) == IS_OBJECT) {
+               if (Z_OBJ_HT_P(container)->has_property) {
+                       result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_TMP_VAR == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
+               } else {
+                       zend_error(E_NOTICE, "Trying to check property of non-object");
+                       result = 0;
+               }
+               if ((opline->extended_value & ZEND_ISSET) == 0) {
+                       result = !result;
+               }
+       } else {
+               result = ((opline->extended_value & ZEND_ISSET) == 0);
+       }
+
+       zval_dtor(free_op2.var);
+       ZVAL_BOOL(EX_VAR(opline->result.var), result);
+
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
 }
 
 static int ZEND_FASTCALL  ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -26533,7 +26616,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HAN
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
+static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
        zend_free_op free_op2;
@@ -26546,7 +26629,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR
        container = _get_obj_zval_ptr_unused(TSRMLS_C);
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
 
-       if (Z_TYPE_P(container) == IS_ARRAY && !prop_dim) {
+       if (Z_TYPE_P(container) == IS_ARRAY) {
                HashTable *ht = Z_ARRVAL_P(container);
                zval *value = NULL;
                zend_string *str;
@@ -26591,25 +26674,16 @@ str_index_prop:
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
-               if (prop_dim) {
-                       if (Z_OBJ_HT_P(container)->has_property) {
-                               result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_VAR == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check property of non-object");
-                               result = 0;
-                       }
+               if (Z_OBJ_HT_P(container)->has_dimension) {
+                       result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
                } else {
-                       if (Z_OBJ_HT_P(container)->has_dimension) {
-                               result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check element of non-array");
-                               result = 0;
-                       }
+                       zend_error(E_NOTICE, "Trying to check element of non-array");
+                       result = 0;
                }
                if ((opline->extended_value & ZEND_ISSET) == 0) {
                        result = !result;
                }
-       } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
+       } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
                zval tmp;
 
                result = 0;
@@ -26644,14 +26718,37 @@ str_index_prop:
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
-}
-
 static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+       USE_OPLINE
+       zend_free_op free_op2;
+       zval *container;
+       int result;
+       zval *offset;
+
+       SAVE_OPLINE();
+       container = _get_obj_zval_ptr_unused(TSRMLS_C);
+       offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+
+       if (Z_TYPE_P(container) == IS_OBJECT) {
+               if (Z_OBJ_HT_P(container)->has_property) {
+                       result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_VAR == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
+               } else {
+                       zend_error(E_NOTICE, "Trying to check property of non-object");
+                       result = 0;
+               }
+               if ((opline->extended_value & ZEND_ISSET) == 0) {
+                       result = !result;
+               }
+       } else {
+               result = ((opline->extended_value & ZEND_ISSET) == 0);
+       }
+
+       zval_ptr_dtor_nogc(free_op2.var);
+       ZVAL_BOOL(EX_VAR(opline->result.var), result);
+
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
 }
 
 static int ZEND_FASTCALL  ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -28247,7 +28344,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HAND
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
+static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
 
@@ -28260,7 +28357,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(
        container = _get_obj_zval_ptr_unused(TSRMLS_C);
        offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
 
-       if (Z_TYPE_P(container) == IS_ARRAY && !prop_dim) {
+       if (Z_TYPE_P(container) == IS_ARRAY) {
                HashTable *ht = Z_ARRVAL_P(container);
                zval *value = NULL;
                zend_string *str;
@@ -28305,25 +28402,16 @@ str_index_prop:
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
-               if (prop_dim) {
-                       if (Z_OBJ_HT_P(container)->has_property) {
-                               result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CV == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check property of non-object");
-                               result = 0;
-                       }
+               if (Z_OBJ_HT_P(container)->has_dimension) {
+                       result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
                } else {
-                       if (Z_OBJ_HT_P(container)->has_dimension) {
-                               result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check element of non-array");
-                               result = 0;
-                       }
+                       zend_error(E_NOTICE, "Trying to check element of non-array");
+                       result = 0;
                }
                if ((opline->extended_value & ZEND_ISSET) == 0) {
                        result = !result;
                }
-       } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
+       } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
                zval tmp;
 
                result = 0;
@@ -28357,14 +28445,36 @@ str_index_prop:
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
-}
-
 static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+       USE_OPLINE
+
+       zval *container;
+       int result;
+       zval *offset;
+
+       SAVE_OPLINE();
+       container = _get_obj_zval_ptr_unused(TSRMLS_C);
+       offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
+
+       if (Z_TYPE_P(container) == IS_OBJECT) {
+               if (Z_OBJ_HT_P(container)->has_property) {
+                       result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CV == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
+               } else {
+                       zend_error(E_NOTICE, "Trying to check property of non-object");
+                       result = 0;
+               }
+               if ((opline->extended_value & ZEND_ISSET) == 0) {
+                       result = !result;
+               }
+       } else {
+               result = ((opline->extended_value & ZEND_ISSET) == 0);
+       }
+
+       ZVAL_BOOL(EX_VAR(opline->result.var), result);
+
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
 }
 
 static int ZEND_FASTCALL  ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -31584,7 +31694,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCO
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
+static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
 
@@ -31597,7 +31707,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(i
        container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
        offset = opline->op2.zv;
 
-       if (Z_TYPE_P(container) == IS_ARRAY && !prop_dim) {
+       if (Z_TYPE_P(container) == IS_ARRAY) {
                HashTable *ht = Z_ARRVAL_P(container);
                zval *value = NULL;
                zend_string *str;
@@ -31642,25 +31752,16 @@ str_index_prop:
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
-               if (prop_dim) {
-                       if (Z_OBJ_HT_P(container)->has_property) {
-                               result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CONST == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check property of non-object");
-                               result = 0;
-                       }
+               if (Z_OBJ_HT_P(container)->has_dimension) {
+                       result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
                } else {
-                       if (Z_OBJ_HT_P(container)->has_dimension) {
-                               result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check element of non-array");
-                               result = 0;
-                       }
+                       zend_error(E_NOTICE, "Trying to check element of non-array");
+                       result = 0;
                }
                if ((opline->extended_value & ZEND_ISSET) == 0) {
                        result = !result;
                }
-       } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
+       } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
                zval tmp;
 
                result = 0;
@@ -31694,14 +31795,36 @@ str_index_prop:
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
-}
-
 static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+       USE_OPLINE
+
+       zval *container;
+       int result;
+       zval *offset;
+
+       SAVE_OPLINE();
+       container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
+       offset = opline->op2.zv;
+
+       if (Z_TYPE_P(container) == IS_OBJECT) {
+               if (Z_OBJ_HT_P(container)->has_property) {
+                       result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CONST == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
+               } else {
+                       zend_error(E_NOTICE, "Trying to check property of non-object");
+                       result = 0;
+               }
+               if ((opline->extended_value & ZEND_ISSET) == 0) {
+                       result = !result;
+               }
+       } else {
+               result = ((opline->extended_value & ZEND_ISSET) == 0);
+       }
+
+       ZVAL_BOOL(EX_VAR(opline->result.var), result);
+
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
 }
 
 static int ZEND_FASTCALL  ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -33373,7 +33496,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
+static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
        zend_free_op free_op2;
@@ -33386,7 +33509,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(int
        container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
        offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
 
-       if (Z_TYPE_P(container) == IS_ARRAY && !prop_dim) {
+       if (Z_TYPE_P(container) == IS_ARRAY) {
                HashTable *ht = Z_ARRVAL_P(container);
                zval *value = NULL;
                zend_string *str;
@@ -33431,25 +33554,16 @@ str_index_prop:
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
-               if (prop_dim) {
-                       if (Z_OBJ_HT_P(container)->has_property) {
-                               result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_TMP_VAR == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check property of non-object");
-                               result = 0;
-                       }
+               if (Z_OBJ_HT_P(container)->has_dimension) {
+                       result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
                } else {
-                       if (Z_OBJ_HT_P(container)->has_dimension) {
-                               result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check element of non-array");
-                               result = 0;
-                       }
+                       zend_error(E_NOTICE, "Trying to check element of non-array");
+                       result = 0;
                }
                if ((opline->extended_value & ZEND_ISSET) == 0) {
                        result = !result;
                }
-       } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
+       } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
                zval tmp;
 
                result = 0;
@@ -33484,14 +33598,37 @@ str_index_prop:
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
-}
-
 static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+       USE_OPLINE
+       zend_free_op free_op2;
+       zval *container;
+       int result;
+       zval *offset;
+
+       SAVE_OPLINE();
+       container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
+       offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+
+       if (Z_TYPE_P(container) == IS_OBJECT) {
+               if (Z_OBJ_HT_P(container)->has_property) {
+                       result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_TMP_VAR == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
+               } else {
+                       zend_error(E_NOTICE, "Trying to check property of non-object");
+                       result = 0;
+               }
+               if ((opline->extended_value & ZEND_ISSET) == 0) {
+                       result = !result;
+               }
+       } else {
+               result = ((opline->extended_value & ZEND_ISSET) == 0);
+       }
+
+       zval_dtor(free_op2.var);
+       ZVAL_BOOL(EX_VAR(opline->result.var), result);
+
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
 }
 
 static int ZEND_FASTCALL  ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35523,7 +35660,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
+static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
        zend_free_op free_op2;
@@ -35536,7 +35673,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(int
        container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
 
-       if (Z_TYPE_P(container) == IS_ARRAY && !prop_dim) {
+       if (Z_TYPE_P(container) == IS_ARRAY) {
                HashTable *ht = Z_ARRVAL_P(container);
                zval *value = NULL;
                zend_string *str;
@@ -35581,25 +35718,16 @@ str_index_prop:
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
-               if (prop_dim) {
-                       if (Z_OBJ_HT_P(container)->has_property) {
-                               result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_VAR == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check property of non-object");
-                               result = 0;
-                       }
+               if (Z_OBJ_HT_P(container)->has_dimension) {
+                       result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
                } else {
-                       if (Z_OBJ_HT_P(container)->has_dimension) {
-                               result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check element of non-array");
-                               result = 0;
-                       }
+                       zend_error(E_NOTICE, "Trying to check element of non-array");
+                       result = 0;
                }
                if ((opline->extended_value & ZEND_ISSET) == 0) {
                        result = !result;
                }
-       } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
+       } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
                zval tmp;
 
                result = 0;
@@ -35634,14 +35762,37 @@ str_index_prop:
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
-}
-
 static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+       USE_OPLINE
+       zend_free_op free_op2;
+       zval *container;
+       int result;
+       zval *offset;
+
+       SAVE_OPLINE();
+       container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
+       offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+
+       if (Z_TYPE_P(container) == IS_OBJECT) {
+               if (Z_OBJ_HT_P(container)->has_property) {
+                       result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_VAR == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
+               } else {
+                       zend_error(E_NOTICE, "Trying to check property of non-object");
+                       result = 0;
+               }
+               if ((opline->extended_value & ZEND_ISSET) == 0) {
+                       result = !result;
+               }
+       } else {
+               result = ((opline->extended_value & ZEND_ISSET) == 0);
+       }
+
+       zval_ptr_dtor_nogc(free_op2.var);
+       ZVAL_BOOL(EX_VAR(opline->result.var), result);
+
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
 }
 
 static int ZEND_FASTCALL  ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -38377,7 +38528,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
+static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
 
@@ -38390,7 +38541,7 @@ static int ZEND_FASTCALL zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(int
        container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
        offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
 
-       if (Z_TYPE_P(container) == IS_ARRAY && !prop_dim) {
+       if (Z_TYPE_P(container) == IS_ARRAY) {
                HashTable *ht = Z_ARRVAL_P(container);
                zval *value = NULL;
                zend_string *str;
@@ -38435,25 +38586,16 @@ str_index_prop:
                        result = (value == NULL || !i_zend_is_true(value TSRMLS_CC));
                }
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
-               if (prop_dim) {
-                       if (Z_OBJ_HT_P(container)->has_property) {
-                               result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CV == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check property of non-object");
-                               result = 0;
-                       }
+               if (Z_OBJ_HT_P(container)->has_dimension) {
+                       result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
                } else {
-                       if (Z_OBJ_HT_P(container)->has_dimension) {
-                               result = Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0 TSRMLS_CC);
-                       } else {
-                               zend_error(E_NOTICE, "Trying to check element of non-array");
-                               result = 0;
-                       }
+                       zend_error(E_NOTICE, "Trying to check element of non-array");
+                       result = 0;
                }
                if ((opline->extended_value & ZEND_ISSET) == 0) {
                        result = !result;
                }
-       } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
+       } else if (Z_TYPE_P(container) == IS_STRING) { /* string offsets */
                zval tmp;
 
                result = 0;
@@ -38487,14 +38629,36 @@ str_index_prop:
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
-}
-
 static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
-       return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+       USE_OPLINE
+
+       zval *container;
+       int result;
+       zval *offset;
+
+       SAVE_OPLINE();
+       container = _get_zval_ptr_cv_deref_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
+       offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
+
+       if (Z_TYPE_P(container) == IS_OBJECT) {
+               if (Z_OBJ_HT_P(container)->has_property) {
+                       result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CV == IS_CONST) ? Z_CACHE_SLOT_P(offset) : -1) TSRMLS_CC);
+               } else {
+                       zend_error(E_NOTICE, "Trying to check property of non-object");
+                       result = 0;
+               }
+               if ((opline->extended_value & ZEND_ISSET) == 0) {
+                       result = !result;
+               }
+       } else {
+               result = ((opline->extended_value & ZEND_ISSET) == 0);
+       }
+
+       ZVAL_BOOL(EX_VAR(opline->result.var), result);
+
+       CHECK_EXCEPTION();
+       ZEND_VM_NEXT_OPCODE();
 }
 
 static int ZEND_FASTCALL  ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)