]> granicus.if.org Git - php/commitdiff
Convert fatal errors into EngineExceptions
authorDmitry Stogov <dmitry@zend.com>
Wed, 1 Apr 2015 12:54:03 +0000 (15:54 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 1 Apr 2015 12:54:03 +0000 (15:54 +0300)
Zend/tests/exception_016.phpt [new file with mode: 0644]
Zend/zend_execute.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

diff --git a/Zend/tests/exception_016.phpt b/Zend/tests/exception_016.phpt
new file mode 100644 (file)
index 0000000..ffa0a45
--- /dev/null
@@ -0,0 +1,16 @@
+--TEST--
+Exceptions on improper usage of $this
+--FILE--
+<?php
+try {
+       $this->foo();
+} catch (EngineException $e) {
+       echo "\nException: " . $e->getMessage() . " in " , $e->getFile() . " on line " . $e->getLine() . "\n";
+}
+
+$this->foo();
+?>
+--EXPECTF--
+Exception: Using $this when not in object context in %sexception_016.php on line %d
+
+Fatal error: Using $this when not in object context in %sexception_016.php on line %d
index 6c0d707c74c42797a79f6cd19f4681820a6c4ab6..06c25c7bc1240d368c2b2884d0cf7f639a0f1634 100644 (file)
@@ -502,24 +502,15 @@ static inline zval *_get_zval_ptr_ptr(int op_type, znode_op node, const zend_exe
 }
 
 static zend_always_inline zval *_get_obj_zval_ptr_unused(zend_execute_data *execute_data)
-{
-       if (EXPECTED(Z_OBJ(EX(This)) != NULL)) {
-               return &EX(This);
-       } else {
-               zend_error_noreturn(E_ERROR, "Using $this when not in object context");
-               return NULL;
-       }
+{      
+       return &EX(This);
 }
 
 static inline zval *_get_obj_zval_ptr(int op_type, znode_op op, zend_execute_data *execute_data, zend_free_op *should_free, int type)
 {
        if (op_type == IS_UNUSED) {
-               if (EXPECTED(Z_OBJ(EX(This)) != NULL)) {
-                       *should_free = NULL;
-                       return &EX(This);
-               } else {
-                       zend_error_noreturn(E_ERROR, "Using $this when not in object context");
-               }
+               *should_free = NULL;
+               return &EX(This);
        }
        return get_zval_ptr(op_type, op, execute_data, should_free, type);
 }
@@ -527,12 +518,8 @@ static inline zval *_get_obj_zval_ptr(int op_type, znode_op op, zend_execute_dat
 static inline zval *_get_obj_zval_ptr_ptr(int op_type, znode_op node, zend_execute_data *execute_data, zend_free_op *should_free, int type)
 {
        if (op_type == IS_UNUSED) {
-               if (EXPECTED(Z_OBJ(EX(This)) != NULL)) {
-                       *should_free = NULL;
-                       return &EX(This);
-               } else {
-                       zend_error_noreturn(E_ERROR, "Using $this when not in object context");
-               }
+               *should_free = NULL;
+               return &EX(This);
        }
        return get_zval_ptr_ptr(op_type, node, execute_data, should_free, type);
 }
index 350833655fd7fe9d845a705d661fa29289ac268e..6a0f3d2b24986c91e5c80a341a0b0f80a98edfcd 100644 (file)
@@ -632,6 +632,12 @@ ZEND_VM_HELPER_EX(zend_binary_assign_op_obj_helper, VAR|UNUSED|CV, CONST|TMPVAR|
        SAVE_OPLINE();
        object = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW);
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+               FREE_OP2();
+               HANDLE_EXCEPTION();
+       }
        if (OP1_TYPE == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -719,6 +725,12 @@ ZEND_VM_HELPER_EX(zend_binary_assign_op_dim_helper, VAR|UNUSED|CV, CONST|TMPVAR|
 
        SAVE_OPLINE();
        container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW);
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+               FREE_UNFETCHED_OP2();
+               HANDLE_EXCEPTION();
+       }
        if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -1053,6 +1065,11 @@ ZEND_VM_HELPER_EX(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|C
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
        retval = EX_VAR(opline->result.var);
 
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_OP2();
+               HANDLE_EXCEPTION();
+       }
        if (OP1_TYPE == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                FREE_OP2();
@@ -1151,6 +1168,11 @@ ZEND_VM_HELPER_EX(zend_post_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
        retval = EX_VAR(opline->result.var);
 
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_OP2();
+               HANDLE_EXCEPTION();
+       }
        if (OP1_TYPE == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                FREE_OP2();
@@ -1774,6 +1796,11 @@ ZEND_VM_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMP|VAR|UNUSED|CV, CONST|TMPVAR|CV)
        container = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_R);
        offset  = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_OP2();
+               HANDLE_EXCEPTION();
+       }
        if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -1839,6 +1866,11 @@ ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, VAR|UNUSED|CV, CONST|TMPVAR|CV)
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
        container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_OP2();
+               HANDLE_EXCEPTION();
+       }
        if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                FREE_OP2();
@@ -1867,6 +1899,11 @@ ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, VAR|UNUSED|CV, CONST|TMPVAR|CV)
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
        container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW);
 
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_OP2();
+               HANDLE_EXCEPTION();
+       }
        if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                FREE_OP2();
@@ -1895,6 +1932,11 @@ ZEND_VM_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|CV, CONST|TMPVAR|CV)
        container = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_IS);
        offset  = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_OP2();
+               HANDLE_EXCEPTION();
+       }
        if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -1963,6 +2005,11 @@ ZEND_VM_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMP|VAR|UNUSED|CV, CONST|TMPV
                property = GET_OP2_ZVAL_PTR(BP_VAR_R);
                container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
 
+               if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+                       FREE_OP2();
+                       HANDLE_EXCEPTION();
+               }
                if (OP1_TYPE == IS_CONST || OP1_TYPE == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
                        FREE_OP2();
@@ -1998,6 +2045,11 @@ ZEND_VM_HANDLER(97, ZEND_FETCH_OBJ_UNSET, VAR|UNUSED|CV, CONST|TMPVAR|CV)
        container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_UNSET);
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_OP2();
+               HANDLE_EXCEPTION();
+       }
        if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                FREE_OP2();
@@ -2061,6 +2113,11 @@ ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|CV, CONST|TMPVAR|CV)
        object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
        property_name = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_OP2();
+               HANDLE_EXCEPTION();
+       }
        if (OP1_TYPE == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                FREE_OP2();
@@ -2782,6 +2839,12 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, TMPVAR|UNUSED|CV, CONST|TMPVAR|CV)
 
        object = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_R);
 
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_OP2();
+               HANDLE_EXCEPTION();
+       }
+
        if (OP1_TYPE != IS_UNUSED) {
                ZVAL_DEREF(object);
                if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -4739,6 +4802,11 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|CV, ANY)
        SAVE_OPLINE();
        obj = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_R);
 
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(obj) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               HANDLE_EXCEPTION();
+       }
+
        do {
                if (OP1_TYPE == IS_CONST ||
                    (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
@@ -5343,6 +5411,11 @@ ZEND_VM_HANDLER(75, ZEND_UNSET_DIM, VAR|UNUSED|CV, CONST|TMPVAR|CV)
 
        SAVE_OPLINE();
        container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_UNSET);
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP2();
+               HANDLE_EXCEPTION();
+       }
        if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
                FREE_UNFETCHED_OP2();
@@ -5427,6 +5500,11 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|CV, CONST|TMPVAR|CV)
 
        SAVE_OPLINE();
        container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_UNSET);
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP2();
+               HANDLE_EXCEPTION();
+       }
        if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
                FREE_UNFETCHED_OP2();
@@ -6186,6 +6264,11 @@ ZEND_VM_HANDLER(115, ZEND_ISSET_ISEMPTY_DIM_OBJ, CONST|TMPVAR|UNUSED|CV, CONST|T
        container = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_IS);
        offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_OP2();
+               HANDLE_EXCEPTION();
+       }
 ZEND_VM_C_LABEL(isset_dim_obj_again):
        if (OP1_TYPE != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
                HashTable *ht = Z_ARRVAL_P(container);
@@ -6303,6 +6386,11 @@ ZEND_VM_HANDLER(148, ZEND_ISSET_ISEMPTY_PROP_OBJ, CONST|TMPVAR|UNUSED|CV, CONST|
        container = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_IS);
        offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
+       if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_OP2();
+               HANDLE_EXCEPTION();
+       }
        if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
index 77c2002cb44109d74b8c056d8820d1d6545cceaf..b98c14735becb8abbecaac7509fe297d8a15860d 100644 (file)
@@ -3131,6 +3131,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_
        SAVE_OPLINE();
        obj = EX_CONSTANT(opline->op1);
 
+       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(obj) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               HANDLE_EXCEPTION();
+       }
+
        do {
                if (IS_CONST == IS_CONST ||
                    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
@@ -4746,6 +4751,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_H
        container = EX_CONSTANT(opline->op1);
        offset  = EX_CONSTANT(opline->op2);
 
+       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -4811,6 +4821,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_
        container = EX_CONSTANT(opline->op1);
        offset  = EX_CONSTANT(opline->op2);
 
+       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -4878,6 +4893,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
                property = EX_CONSTANT(opline->op2);
                container = NULL;
 
+               if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+                       HANDLE_EXCEPTION();
+               }
                if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
 
@@ -5642,6 +5662,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CON
        container = EX_CONSTANT(opline->op1);
        offset = EX_CONSTANT(opline->op2);
 
+       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
 isset_dim_obj_again:
        if (IS_CONST != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
                HashTable *ht = Z_ARRVAL_P(container);
@@ -5758,6 +5783,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CO
        container = EX_CONSTANT(opline->op1);
        offset = EX_CONSTANT(opline->op2);
 
+       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -8184,6 +8214,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HAND
        container = EX_CONSTANT(opline->op1);
        offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -8249,6 +8284,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HAN
        container = EX_CONSTANT(opline->op1);
        offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -8316,6 +8356,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
                property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
                container = NULL;
 
+               if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+                       HANDLE_EXCEPTION();
+               }
                if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
 
@@ -8813,6 +8858,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CON
        container = EX_CONSTANT(opline->op1);
        offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
 isset_dim_obj_again:
        if (IS_CONST != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
                HashTable *ht = Z_ARRVAL_P(container);
@@ -8929,6 +8979,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CO
        container = EX_CONSTANT(opline->op1);
        offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -9726,6 +9781,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_
        container = EX_CONSTANT(opline->op1);
        offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -9792,6 +9852,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR
        container = EX_CONSTANT(opline->op1);
        offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -9860,6 +9925,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
                property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
                container = NULL;
 
+               if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+                       zval_ptr_dtor_nogc(free_op2);
+                       HANDLE_EXCEPTION();
+               }
                if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
                        zval_ptr_dtor_nogc(free_op2);
@@ -10307,6 +10377,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CON
        container = EX_CONSTANT(opline->op1);
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
 isset_dim_obj_again:
        if (IS_CONST != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
                HashTable *ht = Z_ARRVAL_P(container);
@@ -10424,6 +10499,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CO
        container = EX_CONSTANT(opline->op1);
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -11289,6 +11369,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_HAN
        container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
        offset  = EX_CONSTANT(opline->op2);
 
+       if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_TMP_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -11356,6 +11441,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CO
                property = EX_CONSTANT(opline->op2);
                container = NULL;
 
+               if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+                       HANDLE_EXCEPTION();
+               }
                if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
 
@@ -12478,6 +12568,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CV_HANDLE
        container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
        offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_TMP_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -12545,6 +12640,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV
                property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
                container = NULL;
 
+               if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+                       HANDLE_EXCEPTION();
+               }
                if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
 
@@ -12945,6 +13045,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HA
        container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
        offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_TMP_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -13013,6 +13118,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TM
                property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
                container = NULL;
 
+               if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+                       zval_ptr_dtor_nogc(free_op2);
+                       HANDLE_EXCEPTION();
+               }
                if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
                        zval_ptr_dtor_nogc(free_op2);
@@ -14727,6 +14837,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
        property = EX_CONSTANT(opline->op2);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -14814,6 +14930,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -15146,6 +15268,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
        property = EX_CONSTANT(opline->op2);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
 
@@ -15243,6 +15370,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
        property = EX_CONSTANT(opline->op2);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
 
@@ -15446,6 +15578,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HAN
        container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
        offset  = EX_CONSTANT(opline->op2);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -15510,6 +15647,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HAN
        property = EX_CONSTANT(opline->op2);
 
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -15538,6 +15680,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HA
        property = EX_CONSTANT(opline->op2);
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -15568,6 +15715,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CO
                property = EX_CONSTANT(opline->op2);
                container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
+               if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+                       HANDLE_EXCEPTION();
+               }
                if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
 
@@ -15603,6 +15755,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
        property = EX_CONSTANT(opline->op2);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -15630,6 +15787,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_HAND
        object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
        property_name = EX_CONSTANT(opline->op2);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
 
@@ -16145,6 +16307,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDL
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
 
@@ -16229,6 +16396,11 @@ 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, &free_op1);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
 
@@ -16882,6 +17054,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -17860,6 +18038,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -17947,6 +18131,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -18279,6 +18469,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
 
@@ -18376,6 +18571,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
 
@@ -18579,6 +18779,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLE
        container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
        offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -18643,6 +18848,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLE
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -18671,6 +18881,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDL
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -18701,6 +18916,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV
                property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
                container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
+               if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+                       HANDLE_EXCEPTION();
+               }
                if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
 
@@ -18736,6 +18956,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HA
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -18763,6 +18988,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_HANDLER
        object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
        property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
 
@@ -19240,6 +19470,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
 
@@ -19324,6 +19559,11 @@ 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, &free_op1);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
 
@@ -19511,6 +19751,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
        SAVE_OPLINE();
        object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -19598,6 +19844,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -19932,6 +20184,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                zval_ptr_dtor_nogc(free_op2);
@@ -20030,6 +20287,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                zval_ptr_dtor_nogc(free_op2);
@@ -20234,6 +20496,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HA
        container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
        offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -20299,6 +20566,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HA
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                zval_ptr_dtor_nogc(free_op2);
@@ -20327,6 +20599,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_H
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                zval_ptr_dtor_nogc(free_op2);
@@ -20357,6 +20634,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TM
                property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
                container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
+               if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+                       zval_ptr_dtor_nogc(free_op2);
+                       HANDLE_EXCEPTION();
+               }
                if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
                        zval_ptr_dtor_nogc(free_op2);
@@ -20392,6 +20674,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVA
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                zval_ptr_dtor_nogc(free_op2);
@@ -20419,6 +20706,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_HAN
        object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
        property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                zval_ptr_dtor_nogc(free_op2);
@@ -20801,6 +21093,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HAND
 
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
@@ -20885,6 +21182,11 @@ 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, &free_op1);
+       if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+               HANDLE_EXCEPTION();
+       }
        if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
@@ -20934,6 +21236,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND
        SAVE_OPLINE();
        obj = _get_obj_zval_ptr_unused(execute_data);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(obj) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               HANDLE_EXCEPTION();
+       }
+
        do {
                if (IS_UNUSED == IS_CONST ||
                    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
@@ -21039,6 +21346,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
        SAVE_OPLINE();
        object = _get_obj_zval_ptr_unused(execute_data);
        property = EX_CONSTANT(opline->op2);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -21126,6 +21439,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
        SAVE_OPLINE();
        container = _get_obj_zval_ptr_unused(execute_data);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -21420,6 +21739,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
        property = EX_CONSTANT(opline->op2);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
 
@@ -21517,6 +21841,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
        property = EX_CONSTANT(opline->op2);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
 
@@ -21603,6 +21932,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_
        container = _get_obj_zval_ptr_unused(execute_data);
        offset  = EX_CONSTANT(opline->op2);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -21667,6 +22001,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_
        property = EX_CONSTANT(opline->op2);
 
        container = _get_obj_zval_ptr_unused(execute_data);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -21695,6 +22034,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST
        property = EX_CONSTANT(opline->op2);
        container = _get_obj_zval_ptr_unused(execute_data);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -21723,6 +22067,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST
        container = _get_obj_zval_ptr_unused(execute_data);
        offset  = EX_CONSTANT(opline->op2);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -21790,6 +22139,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
                property = EX_CONSTANT(opline->op2);
                container = _get_obj_zval_ptr_unused(execute_data);
 
+               if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+                       HANDLE_EXCEPTION();
+               }
                if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
 
@@ -21825,6 +22179,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CO
        container = _get_obj_zval_ptr_unused(execute_data);
        property = EX_CONSTANT(opline->op2);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -21852,6 +22211,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_H
        object = _get_obj_zval_ptr_unused(execute_data);
        property_name = EX_CONSTANT(opline->op2);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
 
@@ -21924,6 +22288,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
 
        object = _get_obj_zval_ptr_unused(execute_data);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
+
        if (IS_UNUSED != IS_UNUSED) {
                ZVAL_DEREF(object);
                if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -22125,6 +22495,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_CONST_HA
 
        SAVE_OPLINE();
        container = _get_obj_zval_ptr_unused(execute_data);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
 
@@ -22209,6 +22584,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HA
 
        SAVE_OPLINE();
        container = _get_obj_zval_ptr_unused(execute_data);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
 
@@ -22253,6 +22633,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNU
        container = _get_obj_zval_ptr_unused(execute_data);
        offset = EX_CONSTANT(opline->op2);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
 isset_dim_obj_again:
        if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
                HashTable *ht = Z_ARRVAL_P(container);
@@ -22369,6 +22754,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UN
        container = _get_obj_zval_ptr_unused(execute_data);
        offset = EX_CONSTANT(opline->op2);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -22819,6 +23209,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
        SAVE_OPLINE();
        container = _get_obj_zval_ptr_unused(execute_data);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -23329,6 +23725,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
        SAVE_OPLINE();
        object = _get_obj_zval_ptr_unused(execute_data);
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -23416,6 +23818,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
        SAVE_OPLINE();
        container = _get_obj_zval_ptr_unused(execute_data);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -23710,6 +24118,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
 
@@ -23807,6 +24220,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
 
@@ -23893,6 +24311,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HAN
        container = _get_obj_zval_ptr_unused(execute_data);
        offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -23957,6 +24380,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HAN
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
        container = _get_obj_zval_ptr_unused(execute_data);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -23985,6 +24413,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HA
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
        container = _get_obj_zval_ptr_unused(execute_data);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -24013,6 +24446,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HA
        container = _get_obj_zval_ptr_unused(execute_data);
        offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -24080,6 +24518,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
                property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
                container = _get_obj_zval_ptr_unused(execute_data);
 
+               if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+                       HANDLE_EXCEPTION();
+               }
                if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
 
@@ -24115,6 +24558,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV
        container = _get_obj_zval_ptr_unused(execute_data);
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -24142,6 +24590,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_HAND
        object = _get_obj_zval_ptr_unused(execute_data);
        property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
 
@@ -24214,6 +24667,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
 
        object = _get_obj_zval_ptr_unused(execute_data);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
+
        if (IS_UNUSED != IS_UNUSED) {
                ZVAL_DEREF(object);
                if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -24314,6 +24773,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_CV_HANDL
 
        SAVE_OPLINE();
        container = _get_obj_zval_ptr_unused(execute_data);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
 
@@ -24398,6 +24862,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDL
 
        SAVE_OPLINE();
        container = _get_obj_zval_ptr_unused(execute_data);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
 
@@ -24442,6 +24911,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNU
        container = _get_obj_zval_ptr_unused(execute_data);
        offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
 isset_dim_obj_again:
        if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
                HashTable *ht = Z_ARRVAL_P(container);
@@ -24558,6 +25032,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UN
        container = _get_obj_zval_ptr_unused(execute_data);
        offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -24735,6 +25214,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
        SAVE_OPLINE();
        object = _get_obj_zval_ptr_unused(execute_data);
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -24822,6 +25307,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
        SAVE_OPLINE();
        container = _get_obj_zval_ptr_unused(execute_data);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -25117,6 +25608,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                zval_ptr_dtor_nogc(free_op2);
@@ -25215,6 +25711,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                zval_ptr_dtor_nogc(free_op2);
@@ -25302,6 +25803,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR
        container = _get_obj_zval_ptr_unused(execute_data);
        offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -25367,6 +25873,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
        container = _get_obj_zval_ptr_unused(execute_data);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                zval_ptr_dtor_nogc(free_op2);
@@ -25395,6 +25906,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVA
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
        container = _get_obj_zval_ptr_unused(execute_data);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                zval_ptr_dtor_nogc(free_op2);
@@ -25423,6 +25939,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVA
        container = _get_obj_zval_ptr_unused(execute_data);
        offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -25491,6 +26012,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
                property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
                container = _get_obj_zval_ptr_unused(execute_data);
 
+               if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+                       zval_ptr_dtor_nogc(free_op2);
+                       HANDLE_EXCEPTION();
+               }
                if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
                        zval_ptr_dtor_nogc(free_op2);
@@ -25526,6 +26052,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TM
        container = _get_obj_zval_ptr_unused(execute_data);
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                zval_ptr_dtor_nogc(free_op2);
@@ -25553,6 +26084,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
        object = _get_obj_zval_ptr_unused(execute_data);
        property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                zval_ptr_dtor_nogc(free_op2);
@@ -25625,6 +26161,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_T
 
        object = _get_obj_zval_ptr_unused(execute_data);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
+
        if (IS_UNUSED != IS_UNUSED) {
                ZVAL_DEREF(object);
                if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -25726,6 +26268,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_TMPVAR_H
 
        SAVE_OPLINE();
        container = _get_obj_zval_ptr_unused(execute_data);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
@@ -25810,6 +26357,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_H
 
        SAVE_OPLINE();
        container = _get_obj_zval_ptr_unused(execute_data);
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
@@ -25855,6 +26407,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNU
        container = _get_obj_zval_ptr_unused(execute_data);
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
 isset_dim_obj_again:
        if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
                HashTable *ht = Z_ARRVAL_P(container);
@@ -25972,6 +26529,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UN
        container = _get_obj_zval_ptr_unused(execute_data);
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -26807,6 +27369,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPC
        SAVE_OPLINE();
        obj = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(obj) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               HANDLE_EXCEPTION();
+       }
+
        do {
                if (IS_CV == IS_CONST ||
                    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
@@ -28149,6 +28716,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
        SAVE_OPLINE();
        object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
        property = EX_CONSTANT(opline->op2);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -28236,6 +28809,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -28568,6 +29147,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
        property = EX_CONSTANT(opline->op2);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
 
@@ -28665,6 +29249,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
        property = EX_CONSTANT(opline->op2);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
 
@@ -29079,6 +29668,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HAND
        container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
        offset  = EX_CONSTANT(opline->op2);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -29143,6 +29737,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HAND
        property = EX_CONSTANT(opline->op2);
 
        container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -29171,6 +29770,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HAN
        property = EX_CONSTANT(opline->op2);
        container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -29199,6 +29803,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HAN
        container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
        offset  = EX_CONSTANT(opline->op2);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -29266,6 +29875,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CON
                property = EX_CONSTANT(opline->op2);
                container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
 
+               if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+                       HANDLE_EXCEPTION();
+               }
                if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
 
@@ -29301,6 +29915,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_
        container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
        property = EX_CONSTANT(opline->op2);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -29364,6 +29983,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_HANDL
        object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
        property_name = EX_CONSTANT(opline->op2);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
 
@@ -29590,6 +30214,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST
 
        object = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
+
        if (IS_CV != IS_UNUSED) {
                ZVAL_DEREF(object);
                if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -29923,6 +30553,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLE
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
 
@@ -30007,6 +30642,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLE
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
 
@@ -30153,6 +30793,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_
        container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
        offset = EX_CONSTANT(opline->op2);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
 isset_dim_obj_again:
        if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
                HashTable *ht = Z_ARRVAL_P(container);
@@ -30269,6 +30914,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV
        container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
        offset = EX_CONSTANT(opline->op2);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -31433,6 +32083,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -33158,6 +33814,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
        SAVE_OPLINE();
        object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -33245,6 +33907,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -33577,6 +34245,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
 
@@ -33674,6 +34347,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
 
@@ -33907,6 +34585,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER
        container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
        offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -33971,6 +34654,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
        container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -33999,6 +34687,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLE
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
        container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -34027,6 +34720,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLE
        container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
        offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -34094,6 +34792,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_
                property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
                container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
 
+               if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+                       HANDLE_EXCEPTION();
+               }
                if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
 
@@ -34129,6 +34832,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HAN
        container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
 
@@ -34156,6 +34864,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_HANDLER(
        object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
        property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
 
@@ -34444,6 +35157,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HA
 
        object = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
+
        if (IS_CV != IS_UNUSED) {
                ZVAL_DEREF(object);
                if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -34698,6 +35417,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(Z
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
 
@@ -34782,6 +35506,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(Z
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
 
@@ -34826,6 +35555,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_
        container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
        offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
 isset_dim_obj_again:
        if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
                HashTable *ht = Z_ARRVAL_P(container);
@@ -34942,6 +35676,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV
        container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
        offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -35670,6 +36409,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
        SAVE_OPLINE();
        object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -35757,6 +36502,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
+               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
@@ -36091,6 +36842,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                zval_ptr_dtor_nogc(free_op2);
@@ -36189,6 +36945,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
        retval = EX_VAR(opline->result.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
                zval_ptr_dtor_nogc(free_op2);
@@ -36423,6 +37184,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HAN
        container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
        offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -36488,6 +37254,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HAN
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
        container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                zval_ptr_dtor_nogc(free_op2);
@@ -36516,6 +37287,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HA
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
        container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                zval_ptr_dtor_nogc(free_op2);
@@ -36544,6 +37320,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HA
        container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
        offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -36612,6 +37393,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP
                property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
                container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
 
+               if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+                       zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+                       zval_ptr_dtor_nogc(free_op2);
+                       HANDLE_EXCEPTION();
+               }
                if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
                        zend_error(E_EXCEPTION | E_ERROR, "Cannot use temporary expression in write context");
                        zval_ptr_dtor_nogc(free_op2);
@@ -36647,6 +37433,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR
        container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an object");
                zval_ptr_dtor_nogc(free_op2);
@@ -36674,6 +37465,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_HAND
        object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
        property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot use string offset as an array");
                zval_ptr_dtor_nogc(free_op2);
@@ -36868,6 +37664,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVA
 
        object = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
+
        if (IS_CV != IS_UNUSED) {
                ZVAL_DEREF(object);
                if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -37123,6 +37925,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDL
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
@@ -37207,6 +38014,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDL
 
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
                zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
@@ -37252,6 +38064,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_
        container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
 isset_dim_obj_again:
        if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
                HashTable *ht = Z_ARRVAL_P(container);
@@ -37369,6 +38186,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV
        container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -37712,6 +38534,11 @@ 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, &free_op1);
 
+       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(obj) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               HANDLE_EXCEPTION();
+       }
+
        do {
                if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
                    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
@@ -38726,6 +39553,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST
        container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
        offset  = EX_CONSTANT(opline->op2);
 
+       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -38886,6 +39718,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
 
        object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
 
+       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
+
        if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
                ZVAL_DEREF(object);
                if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -39204,6 +40042,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMP
        container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
        offset = EX_CONSTANT(opline->op2);
 
+       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
 isset_dim_obj_again:
        if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
                HashTable *ht = Z_ARRVAL_P(container);
@@ -39320,6 +40163,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TM
        container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
        offset = EX_CONSTANT(opline->op2);
 
+       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -40749,6 +41597,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HA
        container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
        offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -40873,6 +41726,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
 
        object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
 
+       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
+
        if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
                ZVAL_DEREF(object);
                if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -41009,6 +41868,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMP
        container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
        offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
 isset_dim_obj_again:
        if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
                HashTable *ht = Z_ARRVAL_P(container);
@@ -41125,6 +41989,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TM
        container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
        offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
+       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+
+               HANDLE_EXCEPTION();
+       }
        if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -41740,6 +42609,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVA
        container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
        offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);
@@ -41865,6 +42739,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_T
 
        object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
 
+       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
+
        if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
                ZVAL_DEREF(object);
                if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -42002,6 +42882,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMP
        container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
 isset_dim_obj_again:
        if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
                HashTable *ht = Z_ARRVAL_P(container);
@@ -42119,6 +43004,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TM
        container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
+       if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
+               zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
+               zval_ptr_dtor_nogc(free_op2);
+               HANDLE_EXCEPTION();
+       }
        if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
                        container = Z_REFVAL_P(container);