@@ -5995,108 +5995,6 @@ ZEND_VM_HANDLER(68, ZEND_NEW, UNUSED|CLASS_FETCH|CONST|VAR, UNUSED|CACHE_SLOT, N
5995
5995
ZEND_VM_NEXT_OPCODE ();
5996
5996
}
5997
5997
5998
- ZEND_VM_COLD_CONST_HANDLER (110 , ZEND_CLONE , CONST |TMPVAR |UNUSED |THIS |CV , ANY )
5999
- {
6000
- USE_OPLINE
6001
- zval * obj ;
6002
- zend_object * zobj ;
6003
- zend_class_entry * ce , * scope ;
6004
- zend_function * clone ;
6005
-
6006
- SAVE_OPLINE ();
6007
- obj = GET_OP1_OBJ_ZVAL_PTR_UNDEF (BP_VAR_R );
6008
-
6009
- do {
6010
- if (OP1_TYPE == IS_CONST ||
6011
- (OP1_TYPE != IS_UNUSED && UNEXPECTED (Z_TYPE_P (obj ) != IS_OBJECT ))) {
6012
- if ((OP1_TYPE & (IS_VAR |IS_CV )) && Z_ISREF_P (obj )) {
6013
- obj = Z_REFVAL_P (obj );
6014
- if (EXPECTED (Z_TYPE_P (obj ) == IS_OBJECT )) {
6015
- break ;
6016
- }
6017
- }
6018
- ZVAL_UNDEF (EX_VAR (opline -> result .var ));
6019
- if (OP1_TYPE == IS_CV && UNEXPECTED (Z_TYPE_P (obj ) == IS_UNDEF )) {
6020
- ZVAL_UNDEFINED_OP1 ();
6021
- if (UNEXPECTED (EG (exception ) != NULL )) {
6022
- HANDLE_EXCEPTION ();
6023
- }
6024
- }
6025
- zend_throw_error (NULL , "__clone method called on non-object" );
6026
- FREE_OP1 ();
6027
- FREE_OP2 ();
6028
- HANDLE_EXCEPTION ();
6029
- }
6030
- } while (0 );
6031
-
6032
- zobj = Z_OBJ_P (obj );
6033
- ce = zobj -> ce ;
6034
- clone = ce -> clone ;
6035
- if (UNEXPECTED (zobj -> handlers -> clone_obj == NULL )) {
6036
- zend_throw_error (NULL , "Trying to clone an uncloneable object of class %s" , ZSTR_VAL (ce -> name ));
6037
- FREE_OP1 ();
6038
- FREE_OP2 ();
6039
- ZVAL_UNDEF (EX_VAR (opline -> result .var ));
6040
- HANDLE_EXCEPTION ();
6041
- }
6042
-
6043
- if (clone && !(clone -> common .fn_flags & ZEND_ACC_PUBLIC )) {
6044
- scope = EX (func )-> op_array .scope ;
6045
- if (clone -> common .scope != scope ) {
6046
- if (UNEXPECTED (clone -> common .fn_flags & ZEND_ACC_PRIVATE )
6047
- || UNEXPECTED (!zend_check_protected (zend_get_function_root_class (clone ), scope ))) {
6048
- zend_wrong_clone_call (clone , scope );
6049
- FREE_OP1 ();
6050
- FREE_OP2 ();
6051
- ZVAL_UNDEF (EX_VAR (opline -> result .var ));
6052
- HANDLE_EXCEPTION ();
6053
- }
6054
- }
6055
- }
6056
-
6057
- zend_object * cloned ;
6058
- if (zobj -> handlers -> clone_obj_with ) {
6059
- scope = EX (func )-> op_array .scope ;
6060
- if (OP2_TYPE != IS_UNUSED ) {
6061
- zval * properties = GET_OP2_ZVAL_PTR (BP_VAR_R );
6062
- if (Z_TYPE_P (properties ) != IS_ARRAY ) {
6063
- zend_type_error ("Only arrays can be unpacked for clone, %s given" , zend_zval_value_name (properties ));
6064
- FREE_OP1 ();
6065
- FREE_OP2 ();
6066
- ZVAL_UNDEF (EX_VAR (opline -> result .var ));
6067
- HANDLE_EXCEPTION ();
6068
- }
6069
-
6070
- cloned = zobj -> handlers -> clone_obj_with (zobj , scope , Z_ARR_P (properties ));
6071
- } else {
6072
- cloned = zobj -> handlers -> clone_obj_with (zobj , scope , NULL );
6073
- }
6074
-
6075
- if (UNEXPECTED (EG (exception ))) {
6076
- OBJ_RELEASE (cloned );
6077
- FREE_OP1 ();
6078
- FREE_OP2 ();
6079
- ZVAL_UNDEF (EX_VAR (opline -> result .var ));
6080
- HANDLE_EXCEPTION ();
6081
- }
6082
- } else {
6083
- if (OP2_TYPE != IS_UNUSED ) {
6084
- zend_throw_error (NULL , "Trying to clone an object with updated properties that is not compatible %s" , ZSTR_VAL (ce -> name ));
6085
- FREE_OP1 ();
6086
- FREE_OP2 ();
6087
- ZVAL_UNDEF (EX_VAR (opline -> result .var ));
6088
- HANDLE_EXCEPTION ();
6089
- }
6090
-
6091
- cloned = zobj -> handlers -> clone_obj (zobj );
6092
- }
6093
-
6094
- ZVAL_OBJ (EX_VAR (opline -> result .var ), cloned );
6095
- FREE_OP1 ();
6096
- FREE_OP2 ();
6097
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION ();
6098
- }
6099
-
6100
5998
ZEND_VM_HOT_HANDLER (99 , ZEND_FETCH_CONSTANT , UNUSED |CONST_FETCH , CONST , CACHE_SLOT )
6101
5999
{
6102
6000
USE_OPLINE
0 commit comments