@ -711,7 +711,7 @@ ZEND_VM_HELPER(zend_binary_assign_op_obj_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
SAVE_OPLINE ( ) ;
object = GET_OP1_OBJ_ZVAL_PTR_PTR ( BP_VAR_RW ) ;
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_OBJ _P ( object ) = = NULL ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( object ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_UNFETCHED_OP ( ( opline + 1 ) - > op1_type , ( opline + 1 ) - > op1 . var ) ;
FREE_UNFETCHED_OP2 ( ) ;
@ -771,7 +771,7 @@ ZEND_VM_HELPER(zend_binary_assign_op_dim_helper, VAR|UNUSED|CV, CONST|TMPVAR|UNU
SAVE_OPLINE ( ) ;
container = GET_OP1_OBJ_ZVAL_PTR_PTR ( BP_VAR_RW ) ;
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_OBJ _P ( container ) = = NULL ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( container ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_UNFETCHED_OP ( ( opline + 1 ) - > op1_type , ( opline + 1 ) - > op1 . var ) ;
FREE_UNFETCHED_OP2 ( ) ;
@ -1101,7 +1101,7 @@ ZEND_VM_HELPER(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
SAVE_OPLINE ( ) ;
object = GET_OP1_OBJ_ZVAL_PTR_PTR ( BP_VAR_RW ) ;
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_OBJ _P ( object ) = = NULL ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( object ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_UNFETCHED_OP2 ( ) ;
HANDLE_EXCEPTION ( ) ;
@ -1180,7 +1180,7 @@ ZEND_VM_HELPER(zend_post_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
SAVE_OPLINE ( ) ;
object = GET_OP1_OBJ_ZVAL_PTR_PTR ( BP_VAR_RW ) ;
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_OBJ _P ( object ) = = NULL ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( object ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_UNFETCHED_OP2 ( ) ;
HANDLE_EXCEPTION ( ) ;
@ -1813,7 +1813,7 @@ ZEND_VM_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMP|VAR|UNUSED|THIS|CV, CONST|TMPVAR
SAVE_OPLINE ( ) ;
container = GET_OP1_OBJ_ZVAL_PTR ( BP_VAR_R ) ;
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_OBJ _P ( container ) = = NULL ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( container ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_UNFETCHED_OP2 ( ) ;
HANDLE_EXCEPTION ( ) ;
@ -1886,7 +1886,7 @@ ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, VAR|UNUSED|THIS|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 ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( container ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_OP2 ( ) ;
HANDLE_EXCEPTION ( ) ;
@ -1912,7 +1912,7 @@ ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, VAR|UNUSED|THIS|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 ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( container ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_OP2 ( ) ;
HANDLE_EXCEPTION ( ) ;
@ -1937,7 +1937,7 @@ ZEND_VM_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR
SAVE_OPLINE ( ) ;
container = GET_OP1_OBJ_ZVAL_PTR ( BP_VAR_IS ) ;
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_OBJ _P ( container ) = = NULL ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( container ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_UNFETCHED_OP2 ( ) ;
HANDLE_EXCEPTION ( ) ;
@ -2013,7 +2013,7 @@ ZEND_VM_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMP|VAR|UNUSED|THIS|CV, CONST
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 ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( container ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_OP2 ( ) ;
HANDLE_EXCEPTION ( ) ;
@ -2045,7 +2045,7 @@ ZEND_VM_HANDLER(97, ZEND_FETCH_OBJ_UNSET, VAR|UNUSED|THIS|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 ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( container ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_UNFETCHED_OP2 ( ) ;
HANDLE_EXCEPTION ( ) ;
@ -2166,7 +2166,7 @@ ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, SPEC(
SAVE_OPLINE ( ) ;
object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF ( BP_VAR_W ) ;
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_OBJ _P ( object ) = = NULL ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( object ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_UNFETCHED_OP2 ( ) ;
HANDLE_EXCEPTION ( ) ;
@ -3095,7 +3095,7 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|THIS|CV, CONST|T
object = GET_OP1_OBJ_ZVAL_PTR_UNDEF ( BP_VAR_R ) ;
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_OBJ _P ( object ) = = NULL ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( object ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_OP2 ( ) ;
HANDLE_EXCEPTION ( ) ;
@ -3275,7 +3275,7 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR,
zend_throw_error ( NULL , " Cannot call constructor " ) ;
HANDLE_EXCEPTION ( ) ;
}
if ( Z_OBJ ( EX ( This ) ) & & Z_OBJ ( EX ( This ) ) - > ce ! = ce - > constructor - > common . scope & & ( ce - > constructor - > common . fn_flags & ZEND_ACC_PRIVATE ) ) {
if ( Z_TYPE ( EX ( This ) ) = = IS_OBJECT & & Z_OBJ ( EX ( This ) ) - > ce ! = ce - > constructor - > common . scope & & ( ce - > constructor - > common . fn_flags & ZEND_ACC_PRIVATE ) ) {
zend_throw_error ( NULL , " Cannot call private %s::__construct() " , ZSTR_VAL ( ce - > name ) ) ;
HANDLE_EXCEPTION ( ) ;
}
@ -3284,7 +3284,7 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR,
object = NULL ;
if ( ! ( fbc - > common . fn_flags & ZEND_ACC_STATIC ) ) {
if ( Z_OBJ ( EX ( This ) ) & & instanceof_function ( Z_OBJCE ( EX ( This ) ) , ce ) ) {
if ( Z_TYPE ( EX ( This ) ) = = IS_OBJECT & & instanceof_function ( Z_OBJCE ( EX ( This ) ) , ce ) ) {
object = Z_OBJ ( EX ( This ) ) ;
ce = object - > ce ;
} else {
@ -3313,7 +3313,11 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR,
/* previous opcode is ZEND_FETCH_CLASS */
if ( ( opline - > op1 . num & ZEND_FETCH_CLASS_MASK ) = = ZEND_FETCH_CLASS_PARENT | |
( opline - > op1 . num & ZEND_FETCH_CLASS_MASK ) = = ZEND_FETCH_CLASS_SELF ) {
ce = EX ( called_scope ) ;
if ( Z_TYPE ( EX ( This ) ) = = IS_OBJECT ) {
ce = Z_OBJCE ( EX ( This ) ) ;
} else {
ce = Z_CE ( EX ( This ) ) ;
}
}
}
@ -3989,8 +3993,7 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL))
} else { /* ZEND_OVERLOADED_FUNCTION */
zval retval ;
/* Not sure what should be done here if it's a static method */
object = Z_OBJ ( call - > This ) ;
if ( UNEXPECTED ( object = = NULL ) ) {
if ( UNEXPECTED ( Z_TYPE ( call - > This ) ! = IS_OBJECT ) ) {
zend_vm_stack_free_args ( call ) ;
if ( fbc - > type = = ZEND_OVERLOADED_FUNCTION_TEMPORARY ) {
zend_string_release ( fbc - > common . function_name ) ;
@ -4002,6 +4005,7 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL))
HANDLE_EXCEPTION ( ) ;
}
object = Z_OBJ ( call - > This ) ;
EG ( scope ) = fbc - > common . scope ;
ret = RETURN_VALUE_USED ( opline ) ? EX_VAR ( opline - > result . var ) : & retval ;
@ -4737,12 +4741,12 @@ ZEND_VM_HANDLER(119, ZEND_SEND_ARRAY, ANY, ANY)
if ( ZEND_CALL_INFO ( EX ( call ) ) & ZEND_CALL_CLOSURE ) {
OBJ_RELEASE ( ( zend_object * ) EX ( call ) - > func - > common . prototype ) ;
}
if ( Z_OBJ ( EX ( call ) - > This ) ) {
if ( Z_TYPE ( EX ( call ) - > This ) = = IS_OBJECT ) {
OBJ_RELEASE ( Z_OBJ ( EX ( call ) - > This ) ) ;
}
EX ( call ) - > func = ( zend_function * ) & zend_pass_function ;
EX ( call ) - > called_scope = NULL ;
Z_OBJ ( EX ( call ) - > This ) = NULL ;
ZEND_SET_CALL_INFO ( EX ( call ) , 0 , ZEND_CALL_INFO ( EX ( call ) ) ) ;
} else {
uint32_t arg_num ;
HashTable * ht ;
@ -4784,12 +4788,12 @@ ZEND_VM_C_LABEL(send_array):
if ( ZEND_CALL_INFO ( EX ( call ) ) & ZEND_CALL_CLOSURE ) {
OBJ_RELEASE ( ( zend_object * ) EX ( call ) - > func - > common . prototype ) ;
}
if ( Z_OBJ ( EX ( call ) - > This ) ) {
if ( Z_TYPE ( EX ( call ) - > This ) = = IS_OBJECT ) {
OBJ_RELEASE ( Z_OBJ ( EX ( call ) - > This ) ) ;
}
EX ( call ) - > func = ( zend_function * ) & zend_pass_function ;
EX ( call ) - > called_scope = NULL ;
Z_OBJ ( EX ( call ) - > This ) = NULL ;
ZEND_SET_CALL_INFO ( EX ( call ) , 0 , ZEND_CALL_INFO ( EX ( call ) ) ) ;
break ;
}
@ -4841,13 +4845,13 @@ ZEND_VM_HANDLER(120, ZEND_SEND_USER, VAR|CV, NUM)
if ( ZEND_CALL_INFO ( EX ( call ) ) & ZEND_CALL_CLOSURE ) {
OBJ_RELEASE ( ( zend_object * ) EX ( call ) - > func - > common . prototype ) ;
}
if ( Z_OBJ ( EX ( call ) - > This ) ) {
if ( Z_TYPE ( EX ( call ) - > This ) = = IS_OBJECT ) {
OBJ_RELEASE ( Z_OBJ ( EX ( call ) - > This ) ) ;
}
ZVAL_UNDEF ( param ) ;
EX ( call ) - > func = ( zend_function * ) & zend_pass_function ;
EX ( call ) - > called_scope = NULL ;
Z_OBJ ( EX ( call ) - > This ) = NULL ;
ZEND_SET_CALL_INFO ( EX ( call ) , 0 , ZEND_CALL_INFO ( EX ( call ) ) ) ;
FREE_OP1 ( ) ;
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION ( ) ;
@ -5144,7 +5148,7 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|THIS|CV, ANY)
SAVE_OPLINE ( ) ;
obj = GET_OP1_OBJ_ZVAL_PTR_UNDEF ( BP_VAR_R ) ;
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_OBJ _P ( obj ) = = NULL ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( obj ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
HANDLE_EXCEPTION ( ) ;
}
@ -5658,7 +5662,9 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL)
new_op_array - > scope = EG ( scope ) ;
call = zend_vm_stack_push_call_frame ( ZEND_CALL_NESTED_CODE ,
( zend_function * ) new_op_array , 0 , EX ( called_scope ) , Z_OBJ ( EX ( This ) ) ) ;
( zend_function * ) new_op_array , 0 ,
Z_TYPE ( EX ( This ) ) ! = IS_OBJECT ? Z_CE ( EX ( This ) ) : NULL ,
Z_TYPE ( EX ( This ) ) = = IS_OBJECT ? Z_OBJ ( EX ( This ) ) : NULL ) ;
if ( EX ( symbol_table ) ) {
call - > symbol_table = EX ( symbol_table ) ;
@ -5814,7 +5820,7 @@ ZEND_VM_HANDLER(75, ZEND_UNSET_DIM, VAR|UNUSED|THIS|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 ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( container ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_UNFETCHED_OP2 ( ) ;
HANDLE_EXCEPTION ( ) ;
@ -5906,7 +5912,7 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|THIS|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 ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( container ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_UNFETCHED_OP2 ( ) ;
HANDLE_EXCEPTION ( ) ;
@ -6730,7 +6736,7 @@ ZEND_VM_HANDLER(115, ZEND_ISSET_ISEMPTY_DIM_OBJ, CONST|TMPVAR|UNUSED|THIS|CV, CO
SAVE_OPLINE ( ) ;
container = GET_OP1_OBJ_ZVAL_PTR ( BP_VAR_IS ) ;
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_OBJ _P ( container ) = = NULL ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( container ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_UNFETCHED_OP2 ( ) ;
HANDLE_EXCEPTION ( ) ;
@ -6869,7 +6875,7 @@ ZEND_VM_HANDLER(148, ZEND_ISSET_ISEMPTY_PROP_OBJ, CONST|TMPVAR|UNUSED|THIS|CV, C
SAVE_OPLINE ( ) ;
container = GET_OP1_OBJ_ZVAL_PTR ( BP_VAR_IS ) ;
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_OBJ _P ( container ) = = NULL ) ) {
if ( OP1_TYPE = = IS_UNUSED & & UNEXPECTED ( Z_TYPE _P ( container ) = = IS_UNDEF ) ) {
zend_throw_error ( NULL , " Using $this when not in object context " ) ;
FREE_UNFETCHED_OP2 ( ) ;
HANDLE_EXCEPTION ( ) ;
@ -7509,20 +7515,28 @@ ZEND_VM_HANDLER(153, ZEND_DECLARE_LAMBDA_FUNCTION, CONST, UNUSED)
{
USE_OPLINE
zval * zfunc ;
zval * object ;
zend_class_entry * called_scope ;
SAVE_OPLINE ( ) ;
zfunc = zend_hash_find ( EG ( function_table ) , Z_STR_P ( EX_CONSTANT ( opline - > op1 ) ) ) ;
ZEND_ASSERT ( zfunc ! = NULL & & Z_FUNC_P ( zfunc ) - > type = = ZEND_USER_FUNCTION ) ;
if ( UNEXPECTED ( ( Z_FUNC_P ( zfunc ) - > common . fn_flags & ZEND_ACC_STATIC ) | |
if ( Z_TYPE ( EX ( This ) ) = = IS_OBJECT ) {
called_scope = Z_OBJCE ( EX ( This ) ) ;
if ( UNEXPECTED ( ( Z_FUNC_P ( zfunc ) - > common . fn_flags & ZEND_ACC_STATIC ) | |
( EX ( func ) - > common . fn_flags & ZEND_ACC_STATIC ) ) ) {
zend_create_closure ( EX_VAR ( opline - > result . var ) , Z_FUNC_P ( zfunc ) ,
EG ( scope ) , EX ( called_scope ) , NULL ) ;
object = NULL ;
} else {
object = & EX ( This ) ;
}
} else {
zend_create_closure ( EX_VAR ( opline - > result . var ) , Z_FUNC_P ( zfunc ) ,
EG ( scope ) , EX ( called_scope ) , Z_OBJ ( EX ( This ) ) ? & EX ( This ) : NULL ) ;
called_scope = Z_CE ( EX ( This ) ) ;
object = NULL ;
}
zend_create_closure ( EX_VAR ( opline - > result . var ) , Z_FUNC_P ( zfunc ) ,
EG ( scope ) , called_scope , object ) ;
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION ( ) ;
}
@ -8057,6 +8071,7 @@ ZEND_VM_HANDLER(151, ZEND_ASSERT_CHECK, ANY, JMP_ADDR)
ZEND_VM_HANDLER ( 157 , ZEND_FETCH_CLASS_NAME , ANY , ANY , CLASS_FETCH )
{
uint32_t fetch_type ;
zend_class_entry * called_scope ;
USE_OPLINE
SAVE_OPLINE ( ) ;
@ -8082,7 +8097,12 @@ ZEND_VM_HANDLER(157, ZEND_FETCH_CLASS_NAME, ANY, ANY, CLASS_FETCH)
ZVAL_STR_COPY ( EX_VAR ( opline - > result . var ) , EG ( scope ) - > parent - > name ) ;
break ;
case ZEND_FETCH_CLASS_STATIC :
ZVAL_STR_COPY ( EX_VAR ( opline - > result . var ) , EX ( called_scope ) - > name ) ;
if ( Z_TYPE ( EX ( This ) ) = = IS_OBJECT ) {
called_scope = Z_OBJCE ( EX ( This ) ) ;
} else {
called_scope = Z_CE ( EX ( This ) ) ;
}
ZVAL_STR_COPY ( EX_VAR ( opline - > result . var ) , called_scope - > name ) ;
break ;
EMPTY_SWITCH_DEFAULT_CASE ( )
}