@@ -1037,15 +1037,18 @@ ZEND_API int zend_check_protected(zend_class_entry *ce, zend_class_entry *scope)
1037
1037
1038
1038
static inline zend_op_array * zend_get_proxy_call_function (zend_class_entry * ce , zend_string * method_name , int is_static ) /* {{{ */ {
1039
1039
zend_op_array * call_user_call = ecalloc (1 , ZEND_MM_ALIGNED_SIZE (sizeof (zend_op_array )) + sizeof (zend_op ));
1040
+ zend_function * fbc = is_static ? ce -> __callstatic : ce -> __call ;
1040
1041
1041
- ZEND_ASSERT (ce -> type == ZEND_USER_CLASS );
1042
+ ZEND_ASSERT (fbc );
1042
1043
1043
1044
call_user_call -> type = ZEND_USER_FUNCTION ;
1044
1045
call_user_call -> scope = ce ;
1045
- call_user_call -> prototype = is_static ? ce -> __callstatic : ce -> __call ;
1046
+ call_user_call -> prototype = fbc ;
1046
1047
call_user_call -> fn_flags = ZEND_ACC_CALL_VIA_HANDLER | (is_static ? (ZEND_ACC_STATIC | ZEND_ACC_PUBLIC ) : 0 );
1047
1048
call_user_call -> this_var = -1 ;
1048
- call_user_call -> filename = is_static ? ce -> __callstatic -> op_array . filename : ce -> __call -> op_array .filename ;
1049
+ call_user_call -> filename = (fbc -> type == ZEND_USER_FUNCTION )? fbc -> op_array .filename : STR_EMPTY_ALLOC ();
1050
+ call_user_call -> line_start = (fbc -> type == ZEND_USER_FUNCTION )? fbc -> op_array .line_start : 0 ;
1051
+ call_user_call -> line_end = (fbc -> type == ZEND_USER_FUNCTION )? fbc -> op_array .line_end : 0 ;
1049
1052
call_user_call -> opcodes = (zend_op * )((char * )call_user_call + ZEND_MM_ALIGNED_SIZE (sizeof (zend_op_array )));
1050
1053
call_user_call -> opcodes [0 ].opcode = ZEND_PROXY_CALL ;
1051
1054
call_user_call -> opcodes [0 ].op1_type = IS_UNUSED ;
@@ -1064,26 +1067,7 @@ static inline zend_op_array *zend_get_proxy_call_function(zend_class_entry *ce,
1064
1067
1065
1068
static inline union _zend_function * zend_get_user_call_function (zend_class_entry * ce , zend_string * method_name ) /* {{{ */
1066
1069
{
1067
- if (ce -> type == ZEND_USER_CLASS ) {
1068
- return (union _zend_function * )zend_get_proxy_call_function (ce , method_name , 0 );
1069
- } else {
1070
- zend_internal_function * call_user_call = emalloc (sizeof (zend_internal_function ));
1071
- call_user_call -> type = ZEND_INTERNAL_FUNCTION ;
1072
- call_user_call -> module = (ce -> type == ZEND_INTERNAL_CLASS ) ? ce -> info .internal .module : NULL ;
1073
- call_user_call -> handler = zend_std_call_user_call ;
1074
- call_user_call -> arg_info = NULL ;
1075
- call_user_call -> num_args = 0 ;
1076
- call_user_call -> scope = ce ;
1077
- call_user_call -> fn_flags = ZEND_ACC_CALL_VIA_HANDLER ;
1078
- //??? keep compatibility for "\0" characters
1079
- //??? see: Zend/tests/bug46238.phpt
1080
- if (UNEXPECTED (strlen (method_name -> val ) != method_name -> len )) {
1081
- call_user_call -> function_name = zend_string_init (method_name -> val , strlen (method_name -> val ), 0 );
1082
- } else {
1083
- call_user_call -> function_name = zend_string_copy (method_name );
1084
- }
1085
- return (union _zend_function * )call_user_call ;
1086
- }
1070
+ return (union _zend_function * )zend_get_proxy_call_function (ce , method_name , 0 );
1087
1071
}
1088
1072
/* }}} */
1089
1073
@@ -1214,27 +1198,7 @@ ZEND_API void zend_std_callstatic_user_call(INTERNAL_FUNCTION_PARAMETERS) /* {{{
1214
1198
1215
1199
static inline union _zend_function * zend_get_user_callstatic_function (zend_class_entry * ce , zend_string * method_name ) /* {{{ */
1216
1200
{
1217
- if (ce -> type == ZEND_USER_CLASS ) {
1218
- return (union _zend_function * )zend_get_proxy_call_function (ce , method_name , 1 );
1219
- } else {
1220
- zend_internal_function * callstatic_user_call = emalloc (sizeof (zend_internal_function ));
1221
- callstatic_user_call -> type = ZEND_INTERNAL_FUNCTION ;
1222
- callstatic_user_call -> module = (ce -> type == ZEND_INTERNAL_CLASS ) ? ce -> info .internal .module : NULL ;
1223
- callstatic_user_call -> handler = zend_std_callstatic_user_call ;
1224
- callstatic_user_call -> arg_info = NULL ;
1225
- callstatic_user_call -> num_args = 0 ;
1226
- callstatic_user_call -> scope = ce ;
1227
- callstatic_user_call -> fn_flags = ZEND_ACC_STATIC | ZEND_ACC_PUBLIC | ZEND_ACC_CALL_VIA_HANDLER ;
1228
- //??? keep compatibility for "\0" characters
1229
- //??? see: Zend/tests/bug46238.phpt
1230
- if (UNEXPECTED (strlen (method_name -> val ) != method_name -> len )) {
1231
- callstatic_user_call -> function_name = zend_string_init (method_name -> val , strlen (method_name -> val ), 0 );
1232
- } else {
1233
- callstatic_user_call -> function_name = zend_string_copy (method_name );
1234
- }
1235
-
1236
- return (zend_function * )callstatic_user_call ;
1237
- }
1201
+ return (union _zend_function * )zend_get_proxy_call_function (ce , method_name , 1 );
1238
1202
}
1239
1203
/* }}} */
1240
1204
0 commit comments