]> granicus.if.org Git - php/commitdiff
Don't check $this existence in object opcodes
authorNikita Popov <nikita.ppv@gmail.com>
Wed, 13 Feb 2019 10:37:32 +0000 (11:37 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Wed, 30 Oct 2019 08:30:13 +0000 (09:30 +0100)
We are now guaranteed that $this always exists inside methods, as
well as insides closures (if they use $this at all).

This removes checks for $this existence from the individual object
opcodes. Instead ZEND_FETCH_THIS is used in the cases where $this
is not guaranteed to exist, which is mainly the pseudo-main scope.

Closes GH-3822.

Zend/zend_compile.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
ext/opcache/jit/zend_jit.c
ext/opcache/jit/zend_jit_x86.dasc

index 4ac3eaa670800422e63912426b6664c32013adee..040e042abfd86abf45ccace9df832edc586ad403 100644 (file)
@@ -2429,6 +2429,16 @@ static zend_bool is_this_fetch(zend_ast *ast) /* {{{ */
 }
 /* }}} */
 
+static zend_bool this_guaranteed_exists() /* {{{ */
+{
+       zend_op_array *op_array = CG(active_op_array);
+       /* Instance methods always have a $this.
+        * This also includes closures that have a scope and use $this. */
+       return op_array->scope != NULL
+               && (op_array->fn_flags & ZEND_ACC_STATIC) == 0;
+}
+/* }}} */
+
 static zend_op *zend_compile_simple_var(znode *result, zend_ast *ast, uint32_t type, int delayed) /* {{{ */
 {
        if (is_this_fetch(ast)) {
@@ -2531,7 +2541,11 @@ static zend_op *zend_delayed_compile_prop(znode *result, zend_ast *ast, uint32_t
        zend_op *opline;
 
        if (is_this_fetch(obj_ast)) {
-               obj_node.op_type = IS_UNUSED;
+               if (this_guaranteed_exists()) {
+                       obj_node.op_type = IS_UNUSED;
+               } else {
+                       zend_emit_op(&obj_node, ZEND_FETCH_THIS, NULL, NULL);
+               }
                CG(active_op_array)->fn_flags |= ZEND_ACC_USES_THIS;
        } else {
                opline = zend_delayed_compile_var(&obj_node, obj_ast, type, 0);
@@ -3929,7 +3943,11 @@ void zend_compile_method_call(znode *result, zend_ast *ast, uint32_t type) /* {{
        zend_function *fbc = NULL;
 
        if (is_this_fetch(obj_ast)) {
-               obj_node.op_type = IS_UNUSED;
+               if (this_guaranteed_exists()) {
+                       obj_node.op_type = IS_UNUSED;
+               } else {
+                       zend_emit_op(&obj_node, ZEND_FETCH_THIS, NULL, NULL);
+               }
                CG(active_op_array)->fn_flags |= ZEND_ACC_USES_THIS;
        } else {
                zend_compile_expr(&obj_node, obj_ast);
index 9797cfe649d9afe7edd6cdef13f96443bfbb89a3..cd4382046332b6cf565c193a17ab6cae036cc0f1 100644 (file)
@@ -994,11 +994,6 @@ ZEND_VM_HANDLER(28, ZEND_ASSIGN_OBJ_OP, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, OP)
 
        SAVE_OPLINE();
        object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
-
-       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
-       }
-
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
        do {
@@ -1257,11 +1252,6 @@ ZEND_VM_HANDLER(132, ZEND_PRE_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACH
 
        SAVE_OPLINE();
        object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
-
-       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
-       }
-
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
        do {
@@ -1335,11 +1325,6 @@ ZEND_VM_HANDLER(134, ZEND_POST_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CAC
 
        SAVE_OPLINE();
        object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
-
-       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
-       }
-
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
        do {
@@ -2007,11 +1992,6 @@ ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST
 
        SAVE_OPLINE();
        container = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
-
-       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
-       }
-
        offset = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
 
        if (OP1_TYPE == IS_CONST ||
@@ -2132,10 +2112,6 @@ ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, FETCH
        SAVE_OPLINE();
 
        container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
-       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
-       }
-
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(
@@ -2156,10 +2132,6 @@ ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACH
 
        SAVE_OPLINE();
        container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
-
-       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
-       }
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -2179,11 +2151,6 @@ ZEND_VM_COLD_CONST_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|THIS|CV, C
 
        SAVE_OPLINE();
        container = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_IS);
-
-       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
-       }
-
        offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
        if (OP1_TYPE == IS_CONST ||
@@ -2310,11 +2277,6 @@ ZEND_VM_HANDLER(97, ZEND_FETCH_OBJ_UNSET, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, C
 
        SAVE_OPLINE();
        container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_UNSET);
-
-       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
-       }
-
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -2369,11 +2331,6 @@ ZEND_VM_HANDLER(24, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_
 
        SAVE_OPLINE();
        object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
-
-       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
-       }
-
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
        value = GET_OP_DATA_ZVAL_PTR(BP_VAR_R);
 
@@ -2712,11 +2669,6 @@ ZEND_VM_HANDLER(32, ZEND_ASSIGN_OBJ_REF, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CA
        SAVE_OPLINE();
 
        container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
-
-       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
-       }
-
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
        value_ptr = GET_OP_DATA_ZVAL_PTR_PTR(BP_VAR_W);
@@ -3403,10 +3355,6 @@ ZEND_VM_HOT_OBJ_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|THIS|CV,
 
        object = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
 
-       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
-       }
-
        if (OP2_TYPE != IS_CONST) {
                function_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
        }
@@ -5342,10 +5290,6 @@ ZEND_VM_COLD_CONST_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|THIS|CV, ANY)
        SAVE_OPLINE();
        obj = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
 
-       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
-               ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
-       }
-
        do {
                if (OP1_TYPE == IS_CONST ||
                    (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
@@ -6080,9 +6024,6 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_S
 
        SAVE_OPLINE();
        container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_UNSET);
-       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
-       }
        offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
        do {
@@ -6784,11 +6725,6 @@ ZEND_VM_COLD_CONST_HANDLER(148, ZEND_ISSET_ISEMPTY_PROP_OBJ, CONST|TMPVAR|UNUSED
 
        SAVE_OPLINE();
        container = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_IS);
-
-       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
-       }
-
        offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
        if (OP1_TYPE == IS_CONST ||
@@ -8229,7 +8165,7 @@ ZEND_VM_HANDLER(183, ZEND_BIND_STATIC, CV, UNUSED, REF)
        ZEND_VM_NEXT_OPCODE();
 }
 
-ZEND_VM_HANDLER(184, ZEND_FETCH_THIS, UNUSED, UNUSED)
+ZEND_VM_HOT_HANDLER(184, ZEND_FETCH_THIS, UNUSED, UNUSED)
 {
        USE_OPLINE
 
index 27c22ebc124379ae04efc68c447b1c3e20c40478..75cce58ffaccdfacd985d3b0fff6a64198409a51 100644 (file)
@@ -3780,10 +3780,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_
        SAVE_OPLINE();
        obj = RT_CONSTANT(opline, opline->op1);
 
-       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        do {
                if (IS_CONST == IS_CONST ||
                    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
@@ -5152,11 +5148,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_
 
        SAVE_OPLINE();
        container = RT_CONSTANT(opline, opline->op1);
-
-       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = RT_CONSTANT(opline, opline->op2);
 
        if (IS_CONST == IS_CONST ||
@@ -5278,11 +5269,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC
 
        SAVE_OPLINE();
        container = RT_CONSTANT(opline, opline->op1);
-
-       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = RT_CONSTANT(opline, opline->op2);
 
        if (IS_CONST == IS_CONST ||
@@ -5549,10 +5535,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_
 
        object = RT_CONSTANT(opline, opline->op1);
 
-       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        if (IS_CONST != IS_CONST) {
                function_name = RT_CONSTANT(opline, opline->op2);
        }
@@ -6152,11 +6134,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PRO
 
        SAVE_OPLINE();
        container = RT_CONSTANT(opline, opline->op1);
-
-       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = RT_CONSTANT(opline, opline->op2);
 
        if (IS_CONST == IS_CONST ||
@@ -7342,11 +7319,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_
 
        SAVE_OPLINE();
        container = RT_CONSTANT(opline, opline->op1);
-
-       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        if (IS_CONST == IS_CONST ||
@@ -7468,11 +7440,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC
 
        SAVE_OPLINE();
        container = RT_CONSTANT(opline, opline->op1);
-
-       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        if (IS_CONST == IS_CONST ||
@@ -7739,10 +7706,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_
 
        object = RT_CONSTANT(opline, opline->op1);
 
-       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
                function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        }
@@ -8272,11 +8235,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PRO
 
        SAVE_OPLINE();
        container = RT_CONSTANT(opline, opline->op1);
-
-       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        if (IS_CONST == IS_CONST ||
@@ -9606,11 +9564,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_
 
        SAVE_OPLINE();
        container = RT_CONSTANT(opline, opline->op1);
-
-       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = EX_VAR(opline->op2.var);
 
        if (IS_CONST == IS_CONST ||
@@ -9732,11 +9685,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC
 
        SAVE_OPLINE();
        container = RT_CONSTANT(opline, opline->op1);
-
-       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        if (IS_CONST == IS_CONST ||
@@ -10003,10 +9951,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_
 
        object = RT_CONSTANT(opline, opline->op1);
 
-       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        if (IS_CV != IS_CONST) {
                function_name = EX_VAR(opline->op2.var);
        }
@@ -10535,11 +10479,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PRO
 
        SAVE_OPLINE();
        container = RT_CONSTANT(opline, opline->op1);
-
-       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        if (IS_CONST == IS_CONST ||
@@ -13032,10 +12971,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND
        SAVE_OPLINE();
        obj = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
 
-       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        do {
                if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
                    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
@@ -13876,11 +13811,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_
 
        SAVE_OPLINE();
        container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = RT_CONSTANT(opline, opline->op2);
 
        if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
@@ -14002,11 +13932,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST
 
        SAVE_OPLINE();
        container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = RT_CONSTANT(opline, opline->op2);
 
        if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
@@ -14244,10 +14169,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
 
        object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
 
-       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        if (IS_CONST != IS_CONST) {
                function_name = RT_CONSTANT(opline, opline->op2);
        }
@@ -14516,11 +14437,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TM
 
        SAVE_OPLINE();
        container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = RT_CONSTANT(opline, opline->op2);
 
        if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
@@ -15275,11 +15191,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR
 
        SAVE_OPLINE();
        container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
@@ -15401,11 +15312,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVA
 
        SAVE_OPLINE();
        container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
@@ -15643,10 +15549,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_T
 
        object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
 
-       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
                function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        }
@@ -15915,11 +15817,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TM
 
        SAVE_OPLINE();
        container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
@@ -16568,11 +16465,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HAN
 
        SAVE_OPLINE();
        container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = EX_VAR(opline->op2.var);
 
        if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
@@ -16694,11 +16586,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HA
 
        SAVE_OPLINE();
        container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
@@ -16936,10 +16823,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
 
        object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
 
-       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        if (IS_CV != IS_CONST) {
                function_name = EX_VAR(opline->op2.var);
        }
@@ -17208,11 +17091,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TM
 
        SAVE_OPLINE();
        container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
@@ -20962,11 +20840,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_H
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
 
        do {
@@ -21176,11 +21049,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HAN
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
 
        do {
@@ -21248,11 +21116,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HA
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
 
        do {
@@ -21378,10 +21241,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HAN
        SAVE_OPLINE();
 
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(
@@ -21402,10 +21261,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HA
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        property = RT_CONSTANT(opline, opline->op2);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -21440,11 +21295,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -21486,157 +21336,147 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+       property = RT_CONSTANT(opline, opline->op2);
+       value = RT_CONSTANT((opline+1), (opline+1)->op1);
 
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+       if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+               if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+                       object = Z_REFVAL_P(object);
+                       goto assign_object;
+               }
+               zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+               value = &EG(uninitialized_zval);
+               goto free_and_exit_assign_obj;
        }
 
+assign_object:
+       zobj = Z_OBJ_P(object);
+       if (IS_CONST == IS_CONST &&
+           EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
+               void **cache_slot = CACHE_ADDR(opline->extended_value);
+               uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
+               zend_object *zobj = Z_OBJ_P(object);
+               zval *property_val;
+
+               if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
+                       property_val = OBJ_PROP(zobj, prop_offset);
+                       if (Z_TYPE_P(property_val) != IS_UNDEF) {
+                               zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
+
+                               if (UNEXPECTED(prop_info != NULL)) {
+                                       zend_uchar orig_type = IS_UNDEF;
+
+                                       if (IS_CONST == IS_CONST) {
+                                               orig_type = Z_TYPE_P(value);
+                                       }
+
+                                       value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
+
+                                       /* will remain valid, thus no need to check prop_info in future here */
+                                       if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
+                                               CACHE_PTR_EX(cache_slot + 2, NULL);
+                                       }
+                                       goto free_and_exit_assign_obj;
+                               } else {
+fast_assign_obj:
+                                       value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
+                               }
+                       }
+               } else {
+                       if (EXPECTED(zobj->properties != NULL)) {
+                               if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
+                                       if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
+                                               GC_DELREF(zobj->properties);
+                                       }
+                                       zobj->properties = zend_array_dup(zobj->properties);
+                               }
+                               property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
+                               if (property_val) {
+                                       goto fast_assign_obj;
+                               }
+                       }
+
+                       if (!zobj->ce->__set) {
+
+                               if (EXPECTED(zobj->properties == NULL)) {
+                                       rebuild_object_properties(zobj);
+                               }
+                               if (IS_CONST == IS_CONST) {
+                                       if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
+                                               Z_ADDREF_P(value);
+                                       }
+                               } else if (IS_CONST != IS_TMP_VAR) {
+                                       if (Z_ISREF_P(value)) {
+                                               if (IS_CONST == IS_VAR) {
+                                                       zend_reference *ref = Z_REF_P(value);
+                                                       if (GC_DELREF(ref) == 0) {
+                                                               ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
+                                                               efree_size(ref, sizeof(zend_reference));
+                                                               value = &tmp;
+                                                       } else {
+                                                               value = Z_REFVAL_P(value);
+                                                               Z_TRY_ADDREF_P(value);
+                                                       }
+                                               } else {
+                                                       value = Z_REFVAL_P(value);
+                                                       Z_TRY_ADDREF_P(value);
+                                               }
+                                       } else if (IS_CONST == IS_CV) {
+                                               Z_TRY_ADDREF_P(value);
+                                       }
+                               }
+                               zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
+                               goto exit_assign_obj;
+                       }
+               }
+       }
+
+       if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
+               ZVAL_DEREF(value);
+       }
+
+       if (IS_CONST == IS_CONST) {
+               name = Z_STR_P(property);
+       } else {
+               name = zval_try_get_tmp_string(property, &tmp_name);
+               if (UNEXPECTED(!name)) {
+
+                       UNDEF_RESULT();
+                       goto exit_assign_obj;
+               }
+       }
+
+       value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+
+       if (IS_CONST != IS_CONST) {
+               zend_tmp_string_release(tmp_name);
+       }
+
+free_and_exit_assign_obj:
+
+exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
+
+       zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+       /* assign_obj has two opcodes! */
+       ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+       USE_OPLINE
+       zval *object, *property, *value, tmp;
+       zend_object *zobj;
+       zend_string *name, *tmp_name;
+
+       SAVE_OPLINE();
+       object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
        property = RT_CONSTANT(opline, opline->op2);
-       value = RT_CONSTANT((opline+1), (opline+1)->op1);
-
-       if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
-               if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
-                       object = Z_REFVAL_P(object);
-                       goto assign_object;
-               }
-               zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
-               value = &EG(uninitialized_zval);
-               goto free_and_exit_assign_obj;
-       }
-
-assign_object:
-       zobj = Z_OBJ_P(object);
-       if (IS_CONST == IS_CONST &&
-           EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
-               void **cache_slot = CACHE_ADDR(opline->extended_value);
-               uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
-               zend_object *zobj = Z_OBJ_P(object);
-               zval *property_val;
-
-               if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
-                       property_val = OBJ_PROP(zobj, prop_offset);
-                       if (Z_TYPE_P(property_val) != IS_UNDEF) {
-                               zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
-
-                               if (UNEXPECTED(prop_info != NULL)) {
-                                       zend_uchar orig_type = IS_UNDEF;
-
-                                       if (IS_CONST == IS_CONST) {
-                                               orig_type = Z_TYPE_P(value);
-                                       }
-
-                                       value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
-
-                                       /* will remain valid, thus no need to check prop_info in future here */
-                                       if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
-                                               CACHE_PTR_EX(cache_slot + 2, NULL);
-                                       }
-                                       goto free_and_exit_assign_obj;
-                               } else {
-fast_assign_obj:
-                                       value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
-                                       goto exit_assign_obj;
-                               }
-                       }
-               } else {
-                       if (EXPECTED(zobj->properties != NULL)) {
-                               if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
-                                       if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
-                                               GC_DELREF(zobj->properties);
-                                       }
-                                       zobj->properties = zend_array_dup(zobj->properties);
-                               }
-                               property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
-                               if (property_val) {
-                                       goto fast_assign_obj;
-                               }
-                       }
-
-                       if (!zobj->ce->__set) {
-
-                               if (EXPECTED(zobj->properties == NULL)) {
-                                       rebuild_object_properties(zobj);
-                               }
-                               if (IS_CONST == IS_CONST) {
-                                       if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
-                                               Z_ADDREF_P(value);
-                                       }
-                               } else if (IS_CONST != IS_TMP_VAR) {
-                                       if (Z_ISREF_P(value)) {
-                                               if (IS_CONST == IS_VAR) {
-                                                       zend_reference *ref = Z_REF_P(value);
-                                                       if (GC_DELREF(ref) == 0) {
-                                                               ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
-                                                               efree_size(ref, sizeof(zend_reference));
-                                                               value = &tmp;
-                                                       } else {
-                                                               value = Z_REFVAL_P(value);
-                                                               Z_TRY_ADDREF_P(value);
-                                                       }
-                                               } else {
-                                                       value = Z_REFVAL_P(value);
-                                                       Z_TRY_ADDREF_P(value);
-                                               }
-                                       } else if (IS_CONST == IS_CV) {
-                                               Z_TRY_ADDREF_P(value);
-                                       }
-                               }
-                               zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               goto exit_assign_obj;
-                       }
-               }
-       }
-
-       if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
-               ZVAL_DEREF(value);
-       }
-
-       if (IS_CONST == IS_CONST) {
-               name = Z_STR_P(property);
-       } else {
-               name = zval_try_get_tmp_string(property, &tmp_name);
-               if (UNEXPECTED(!name)) {
-
-                       UNDEF_RESULT();
-                       goto exit_assign_obj;
-               }
-       }
-
-       value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
-
-       if (IS_CONST != IS_CONST) {
-               zend_tmp_string_release(tmp_name);
-       }
-
-free_and_exit_assign_obj:
-
-exit_assign_obj:
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), value);
-       }
-
-       zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
-       /* assign_obj has two opcodes! */
-       ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       USE_OPLINE
-       zval *object, *property, *value, tmp;
-       zend_object *zobj;
-       zend_string *name, *tmp_name;
-
-       SAVE_OPLINE();
-       object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
-       property = RT_CONSTANT(opline, opline->op2);
-       value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
+       value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
 
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
@@ -21774,11 +21614,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -21918,11 +21753,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -22555,11 +22385,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_
        SAVE_OPLINE();
 
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
 
        value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -22597,11 +22422,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_
        SAVE_OPLINE();
 
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
 
        value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -23051,9 +22871,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDL
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        offset = RT_CONSTANT(opline, opline->op2);
 
        do {
@@ -23263,11 +23080,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -23479,11 +23291,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HA
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -23552,11 +23359,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_H
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -23683,10 +23485,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HA
        SAVE_OPLINE();
 
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(
@@ -23707,10 +23505,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_H
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -23745,11 +23539,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVA
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -23792,11 +23581,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        value = RT_CONSTANT((opline+1), (opline+1)->op1);
 
@@ -23936,11 +23720,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -24080,11 +23859,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -24224,11 +23998,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -24821,11 +24590,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR
        SAVE_OPLINE();
 
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -24863,11 +24627,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR
        SAVE_OPLINE();
 
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -25247,9 +25006,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HAND
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -26746,11 +26502,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HAND
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -26960,11 +26711,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLE
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -27032,11 +26778,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDL
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -27162,10 +26903,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLE
        SAVE_OPLINE();
 
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(
@@ -27186,10 +26923,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDL
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -27224,11 +26957,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HA
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -27270,11 +26998,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        value = RT_CONSTANT((opline+1), (opline+1)->op1);
 
@@ -27414,11 +27137,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -27558,11 +27276,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -27702,11 +27415,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
 
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -28373,11 +28081,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_
        SAVE_OPLINE();
 
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -28415,11 +28118,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_
        SAVE_OPLINE();
 
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -28798,9 +28496,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
-       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -29114,10 +28809,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND
        SAVE_OPLINE();
        obj = &EX(This);
 
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        do {
                if (IS_UNUSED == IS_CONST ||
                    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
@@ -29228,11 +28919,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONS
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
 
        do {
@@ -29329,11 +29015,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
 
        do {
@@ -29401,11 +29082,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
 
        do {
@@ -29468,11 +29144,6 @@ static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R
 
        SAVE_OPLINE();
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = RT_CONSTANT(opline, opline->op2);
 
        if (IS_UNUSED == IS_CONST ||
@@ -29598,10 +29269,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_
        SAVE_OPLINE();
 
        container = &EX(This);
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(
@@ -29622,10 +29289,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST
 
        SAVE_OPLINE();
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        property = RT_CONSTANT(opline, opline->op2);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -29645,11 +29308,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST
 
        SAVE_OPLINE();
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = RT_CONSTANT(opline, opline->op2);
 
        if (IS_UNUSED == IS_CONST ||
@@ -29776,11 +29434,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CO
 
        SAVE_OPLINE();
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -29800,11 +29453,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        value = RT_CONSTANT((opline+1), (opline+1)->op1);
 
@@ -29944,11 +29592,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -30088,11 +29731,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -30232,11 +29870,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -30375,11 +30008,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CON
        SAVE_OPLINE();
 
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
 
        value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -30416,11 +30044,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CON
        SAVE_OPLINE();
 
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
 
        value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -30541,10 +30164,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_S
 
        object = &EX(This);
 
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        if (IS_CONST != IS_CONST) {
                function_name = RT_CONSTANT(opline, opline->op2);
        }
@@ -30923,9 +30542,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HA
 
        SAVE_OPLINE();
        container = &EX(This);
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        offset = RT_CONSTANT(opline, opline->op2);
 
        do {
@@ -30971,11 +30587,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UN
 
        SAVE_OPLINE();
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = RT_CONSTANT(opline, opline->op2);
 
        if (IS_UNUSED == IS_CONST ||
@@ -31153,11 +30764,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPV
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -31254,11 +30860,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -31327,11 +30928,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVA
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -31395,11 +30991,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR
 
        SAVE_OPLINE();
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        if (IS_UNUSED == IS_CONST ||
@@ -31520,10 +31111,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR
        SAVE_OPLINE();
 
        container = &EX(This);
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(
@@ -31544,10 +31131,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVA
 
        SAVE_OPLINE();
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -31567,11 +31150,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVA
 
        SAVE_OPLINE();
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        if (IS_UNUSED == IS_CONST ||
@@ -31698,11 +31276,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TM
 
        SAVE_OPLINE();
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -31722,11 +31295,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        value = RT_CONSTANT((opline+1), (opline+1)->op1);
 
@@ -31866,11 +31434,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -32010,11 +31573,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -32154,11 +31712,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -32297,11 +31850,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMP
        SAVE_OPLINE();
 
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -32338,11 +31886,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMP
        SAVE_OPLINE();
 
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -32464,10 +32007,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_T
 
        object = &EX(This);
 
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
                function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        }
@@ -32759,9 +32298,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_H
 
        SAVE_OPLINE();
        container = &EX(This);
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -32808,11 +32344,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UN
 
        SAVE_OPLINE();
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        if (IS_UNUSED == IS_CONST ||
@@ -33416,7 +32947,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDL
        ZEND_VM_RETURN();
 }
 
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
 
@@ -33596,11 +33127,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_H
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -33697,11 +33223,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HAN
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -33769,11 +33290,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HA
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -33836,11 +33352,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HAN
 
        SAVE_OPLINE();
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = EX_VAR(opline->op2.var);
 
        if (IS_UNUSED == IS_CONST ||
@@ -33961,10 +33472,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HAN
        SAVE_OPLINE();
 
        container = &EX(This);
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(
@@ -33985,10 +33492,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HA
 
        SAVE_OPLINE();
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -34008,11 +33511,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HA
 
        SAVE_OPLINE();
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        if (IS_UNUSED == IS_CONST ||
@@ -34139,11 +33637,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV
 
        SAVE_OPLINE();
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -34163,11 +33656,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        value = RT_CONSTANT((opline+1), (opline+1)->op1);
 
@@ -34307,11 +33795,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -34451,11 +33934,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -34595,11 +34073,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
 
        SAVE_OPLINE();
        object = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -34738,11 +34211,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_
        SAVE_OPLINE();
 
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -34779,11 +34247,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_
        SAVE_OPLINE();
 
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -34904,10 +34367,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
 
        object = &EX(This);
 
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        if (IS_CV != IS_CONST) {
                function_name = EX_VAR(opline->op2.var);
        }
@@ -35199,9 +34658,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDL
 
        SAVE_OPLINE();
        container = &EX(This);
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -35247,11 +34703,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UN
 
        SAVE_OPLINE();
        container = &EX(This);
-
-       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        if (IS_UNUSED == IS_CONST ||
@@ -36307,10 +35758,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPC
        SAVE_OPLINE();
        obj = EX_VAR(opline->op1.var);
 
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        do {
                if (IS_CV == IS_CONST ||
                    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
@@ -37691,11 +37138,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HA
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
 
        do {
@@ -37905,11 +37347,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HAND
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
 
        do {
@@ -37977,11 +37414,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HAN
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
 
        do {
@@ -38156,11 +37588,6 @@ static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R
 
        SAVE_OPLINE();
        container = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = RT_CONSTANT(opline, opline->op2);
 
        if (IS_CV == IS_CONST ||
@@ -38286,10 +37713,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HAND
        SAVE_OPLINE();
 
        container = EX_VAR(opline->op1.var);
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(
@@ -38310,10 +37733,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HAN
 
        SAVE_OPLINE();
        container = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        property = RT_CONSTANT(opline, opline->op2);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -38333,11 +37752,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HAN
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = RT_CONSTANT(opline, opline->op2);
 
        if (IS_CV == IS_CONST ||
@@ -38464,11 +37878,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_
 
        SAVE_OPLINE();
        container = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -38488,11 +37897,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        value = RT_CONSTANT((opline+1), (opline+1)->op1);
 
@@ -38632,11 +38036,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -38776,11 +38175,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -38920,11 +38314,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
        value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -39557,11 +38946,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_O
        SAVE_OPLINE();
 
        container = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
 
        value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -39598,11 +38982,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_O
        SAVE_OPLINE();
 
        container = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = RT_CONSTANT(opline, opline->op2);
 
        value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -39766,10 +39145,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_S
 
        object = EX_VAR(opline->op1.var);
 
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        if (IS_CONST != IS_CONST) {
                function_name = RT_CONSTANT(opline, opline->op2);
        }
@@ -40112,9 +39487,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLE
 
        SAVE_OPLINE();
        container = EX_VAR(opline->op1.var);
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        offset = RT_CONSTANT(opline, opline->op2);
 
        do {
@@ -40239,11 +39611,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = RT_CONSTANT(opline, opline->op2);
 
        if (IS_CV == IS_CONST ||
@@ -41196,11 +40563,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_H
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -41412,11 +40774,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HAN
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -41485,11 +40842,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HA
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -41665,11 +41017,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HAN
 
        SAVE_OPLINE();
        container = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        if (IS_CV == IS_CONST ||
@@ -41790,10 +41137,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HAN
        SAVE_OPLINE();
 
        container = EX_VAR(opline->op1.var);
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(
@@ -41814,10 +41157,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HA
 
        SAVE_OPLINE();
        container = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -41837,11 +41176,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HA
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        if (IS_CV == IS_CONST ||
@@ -41968,11 +41302,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR
 
        SAVE_OPLINE();
        container = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -41992,11 +41321,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        value = RT_CONSTANT((opline+1), (opline+1)->op1);
 
@@ -42136,11 +41460,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -42280,11 +41599,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -42424,11 +41738,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -43021,11 +42330,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_
        SAVE_OPLINE();
 
        container = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -43062,11 +42366,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_
        SAVE_OPLINE();
 
        container = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -43230,10 +42529,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVA
 
        object = EX_VAR(opline->op1.var);
 
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
                function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
        }
@@ -43577,9 +42872,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDL
 
        SAVE_OPLINE();
        container = EX_VAR(opline->op1.var);
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -43705,11 +42997,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
 
        if (IS_CV == IS_CONST ||
@@ -46053,11 +45340,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDL
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -46267,11 +45549,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -46339,11 +45616,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLE
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -46518,11 +45790,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER
 
        SAVE_OPLINE();
        container = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = EX_VAR(opline->op2.var);
 
        if (IS_CV == IS_CONST ||
@@ -46643,10 +45910,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER
        SAVE_OPLINE();
 
        container = EX_VAR(opline->op1.var);
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(
@@ -46667,10 +45930,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLE
 
        SAVE_OPLINE();
        container = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -46690,11 +45949,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLE
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        if (IS_CV == IS_CONST ||
@@ -46821,11 +46075,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HAN
 
        SAVE_OPLINE();
        container = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        result = EX_VAR(opline->result.var);
        zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
@@ -46845,11 +46094,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        value = RT_CONSTANT((opline+1), (opline+1)->op1);
 
@@ -46989,11 +46233,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -47133,11 +46372,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -47277,11 +46511,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
 
        SAVE_OPLINE();
        object = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
        value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
 
@@ -47948,11 +47177,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_D
        SAVE_OPLINE();
 
        container = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -47989,11 +47213,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_D
        SAVE_OPLINE();
 
        container = EX_VAR(opline->op1.var);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
@@ -48157,10 +47376,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HA
 
        object = EX_VAR(opline->op1.var);
 
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        if (IS_CV != IS_CONST) {
                function_name = EX_VAR(opline->op2.var);
        }
@@ -48503,9 +47718,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(Z
 
        SAVE_OPLINE();
        container = EX_VAR(opline->op1.var);
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
        offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        do {
@@ -48630,11 +47842,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
-
-       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-               ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-       }
-
        offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
        if (IS_CV == IS_CONST ||
index ce6ee37751f8e2280e6c47cc0ae8664a10a5bac6..da50c6d61d2409e910a3ef86cdedd3f5347ad066 100644 (file)
@@ -1899,66 +1899,6 @@ failure:
        return NULL;
 }
 
-static void zend_calc_checked_this_r(zend_bitset checked_this, const zend_op_array *op_array, zend_cfg *cfg, int b, int checked)
-{
-       zend_op *opline = &op_array->opcodes[cfg->blocks[b].start];
-       zend_op *end = opline + cfg->blocks[b].len;
-       int old_checked = checked;
-       int i;
-
-       for (; opline < end; opline++) {
-               switch (opline->opcode) {
-                       case ZEND_ASSIGN_OBJ_OP:
-                       case ZEND_PRE_INC_OBJ:
-                       case ZEND_PRE_DEC_OBJ:
-                       case ZEND_POST_INC_OBJ:
-                       case ZEND_POST_DEC_OBJ:
-                       case ZEND_FETCH_OBJ_R:
-                       case ZEND_FETCH_OBJ_W:
-                       case ZEND_FETCH_OBJ_RW:
-                       case ZEND_FETCH_OBJ_IS:
-                       case ZEND_FETCH_OBJ_FUNC_ARG:
-                       case ZEND_FETCH_OBJ_UNSET:
-                       case ZEND_ASSIGN_OBJ:
-                       case ZEND_ASSIGN_OBJ_REF:
-                       case ZEND_INIT_METHOD_CALL:
-                       case ZEND_CLONE:
-                       case ZEND_UNSET_OBJ:
-                       case ZEND_ISSET_ISEMPTY_PROP_OBJ:
-                               if (opline->op1_type != IS_UNUSED) {
-                                       break;
-                               }
-                       case ZEND_FETCH_THIS:
-                               if (checked) {
-                                       zend_bitset_incl(checked_this, (opline - op_array->opcodes));
-                               }  else {
-                                       checked = 1;
-                               }
-                               break;
-                       default:
-                               break;
-               }
-       }
-
-       if (cfg->blocks[b].flags & ZEND_BB_TRY) {
-               checked = old_checked;
-       }
-
-       for (i = cfg->blocks[b].children; i >= 0; i = cfg->blocks[i].next_child) {
-               zend_calc_checked_this_r(checked_this, op_array, cfg, i, checked);
-       }
-}
-
-static zend_bitset zend_calc_checked_this(zend_arena **arena, const zend_op_array *op_array, zend_cfg *cfg)
-{
-       uint32_t bitset_len = zend_bitset_len(op_array->last);
-       zend_bitset checked_this = zend_arena_calloc(arena, bitset_len, ZEND_BITSET_ELM_SIZE);
-
-       zend_calc_checked_this_r(checked_this, op_array, cfg, 0, 0);
-
-       return checked_this;
-}
-
 static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op *rt_opline)
 {
        int b, i, end;
@@ -1968,7 +1908,6 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
        int call_level = 0;
        void *checkpoint = NULL;
        zend_lifetime_interval **ra = NULL;
-       zend_bitset checked_this = NULL;
        zend_bool is_terminated = 1; /* previous basic block is terminated by jump */
        zend_bool recv_emitted = 0;   /* emitted at least one RECV opcode */
 
@@ -2348,10 +2287,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                                goto done;
                                        case ZEND_FETCH_OBJ_R:
                                        case ZEND_FETCH_OBJ_IS:
-                                               if (opline->op1_type == IS_UNUSED && !checked_this) {
-                                                       checked_this = zend_calc_checked_this(&CG(arena), op_array, &ssa->cfg);
-                                               }
-                                               if (!zend_jit_fetch_obj_read(&dasm_state, opline, op_array, ssa, checked_this)) {
+                                               if (!zend_jit_fetch_obj_read(&dasm_state, opline, op_array, ssa)) {
                                                        goto jit_failure;
                                                }
                                                goto done;
index 003ddd3072fd072cdd0623bd2b027eb17442e747..02b6f606aebca6e8f42b347986168898907fcc03 100644 (file)
@@ -2003,24 +2003,6 @@ static int zend_jit_cannot_add_element_stub(dasm_State **Dst)
        return 1;
 }
 
-static int zend_jit_not_obj_stub(dasm_State **Dst)
-{
-       |->not_obj:
-       |.if X64
-               |       xor CARG1, CARG1
-               |       LOAD_ADDR CARG2, "Using $this when not in object context"
-               |       EXT_CALL zend_throw_error, r0
-       |.else
-               |       sub r4, 8
-               |       push "Using $this when not in object context"
-               |       push 0
-               |       EXT_CALL zend_throw_error, r0
-               |       add r4, 16
-       |.endif
-       |       jmp ->exception_handler
-       return 1;
-}
-
 static int zend_jit_undefined_function_stub(dasm_State **Dst)
 {
        |->undefined_function:
@@ -2283,7 +2265,6 @@ static const zend_jit_stub zend_jit_stubs[] = {
        JIT_STUB(undefined_offset_ex),
        JIT_STUB(undefined_index_ex),
        JIT_STUB(cannot_add_element_ex),
-       JIT_STUB(not_obj),
        JIT_STUB(undefined_function),
        JIT_STUB(negative_shift),
        JIT_STUB(mod_by_zero),
@@ -9389,7 +9370,7 @@ static zend_bool zend_may_be_dynamic_property(zend_class_entry *ce, zend_string
        return 0;
 }
 
-static int zend_jit_fetch_obj_read(dasm_State **Dst, zend_op *opline, const zend_op_array *op_array, zend_ssa *ssa, zend_bitset checked_this)
+static int zend_jit_fetch_obj_read(dasm_State **Dst, zend_op *opline, const zend_op_array *op_array, zend_ssa *ssa)
 {
        uint32_t op1_info;
        zend_class_entry *ce = NULL;
@@ -9433,14 +9414,6 @@ static int zend_jit_fetch_obj_read(dasm_State **Dst, zend_op *opline, const zend
        offset = zend_get_known_property_offset(ce, Z_STR_P(member), opline->op1_type == IS_UNUSED, op_array->filename);
 
        if (opline->op1_type == IS_UNUSED) {
-               if (!checked_this || !zend_bitset_in(checked_this, (opline - op_array->opcodes))) {
-                       |       IF_ZVAL_TYPE this_addr, IS_UNDEF, >1
-                       |.cold_code
-                       |1:
-                       |       SAVE_VALID_OPLINE opline
-                       |       jmp ->not_obj
-                       |.code
-               }
                |       GET_ZVAL_PTR FCARG1a, this_addr
        } else {
                if (op1_info & MAY_BE_REF) {