28
28
#include "zend_variables.h"
29
29
#include "zend_execute.h"
30
30
#include "zend_type_info.h"
31
-
31
+ #include "zend_frameless_function.h"
32
32
33
33
BEGIN_EXTERN_C ()
34
34
@@ -38,6 +38,7 @@ typedef struct _zend_function_entry {
38
38
const struct _zend_internal_arg_info * arg_info ;
39
39
uint32_t num_args ;
40
40
uint32_t flags ;
41
+ const zend_frameless_function_info * frameless_function_infos ;
41
42
} zend_function_entry ;
42
43
43
44
typedef struct _zend_fcall_info {
@@ -73,29 +74,30 @@ typedef struct _zend_fcall_info_cache {
73
74
#define ZEND_FUNCTION (name ) ZEND_NAMED_FUNCTION(zif_##name)
74
75
#define ZEND_METHOD (classname , name ) ZEND_NAMED_FUNCTION(zim_##classname##_##name)
75
76
76
- #define ZEND_FENTRY (zend_name , name , arg_info , flags ) { #zend_name, name, arg_info, (uint32_t) (sizeof(arg_info)/sizeof(struct _zend_internal_arg_info)-1), flags },
77
+ #define ZEND_FENTRY (zend_name , name , arg_info , flags ) { #zend_name, name, arg_info, (uint32_t) (sizeof(arg_info)/sizeof(struct _zend_internal_arg_info)-1), flags, NULL },
77
78
78
- #define ZEND_RAW_FENTRY (zend_name , name , arg_info , flags ) { zend_name, name, arg_info, (uint32_t) (sizeof(arg_info)/sizeof(struct _zend_internal_arg_info)-1), flags },
79
+ #define ZEND_RAW_FENTRY (zend_name , name , arg_info , flags , frameless_function_infos ) { zend_name, name, arg_info, (uint32_t) (sizeof(arg_info)/sizeof(struct _zend_internal_arg_info)-1), flags, frameless_function_infos },
79
80
80
81
/* Same as ZEND_NAMED_FE */
81
- #define ZEND_RAW_NAMED_FE (zend_name , name , arg_info ) ZEND_RAW_FENTRY(#zend_name, name, arg_info, 0)
82
+ #define ZEND_RAW_NAMED_FE (zend_name , name , arg_info ) ZEND_RAW_FENTRY(#zend_name, name, arg_info, 0, NULL )
82
83
83
- #define ZEND_NAMED_FE (zend_name , name , arg_info ) ZEND_RAW_FENTRY(#zend_name, name, arg_info, 0)
84
- #define ZEND_FE (name , arg_info ) ZEND_RAW_FENTRY(#name, zif_##name, arg_info, 0)
85
- #define ZEND_DEP_FE (name , arg_info ) ZEND_RAW_FENTRY(#name, zif_##name, arg_info, ZEND_ACC_DEPRECATED)
86
- #define ZEND_FALIAS (name , alias , arg_info ) ZEND_RAW_FENTRY(#name, zif_##alias, arg_info, 0)
87
- #define ZEND_DEP_FALIAS (name , alias , arg_info ) ZEND_RAW_FENTRY(#name, zif_##alias, arg_info, ZEND_ACC_DEPRECATED)
84
+ #define ZEND_NAMED_FE (zend_name , name , arg_info ) ZEND_RAW_FENTRY(#zend_name, name, arg_info, 0, NULL )
85
+ #define ZEND_FE (name , arg_info ) ZEND_RAW_FENTRY(#name, zif_##name, arg_info, 0, NULL )
86
+ #define ZEND_DEP_FE (name , arg_info ) ZEND_RAW_FENTRY(#name, zif_##name, arg_info, ZEND_ACC_DEPRECATED, NULL )
87
+ #define ZEND_FALIAS (name , alias , arg_info ) ZEND_RAW_FENTRY(#name, zif_##alias, arg_info, 0, NULL )
88
+ #define ZEND_DEP_FALIAS (name , alias , arg_info ) ZEND_RAW_FENTRY(#name, zif_##alias, arg_info, ZEND_ACC_DEPRECATED, NULL )
88
89
#define ZEND_NAMED_ME (zend_name , name , arg_info , flags ) ZEND_FENTRY(zend_name, name, arg_info, flags)
89
- #define ZEND_ME (classname , name , arg_info , flags ) ZEND_RAW_FENTRY(#name, zim_##classname##_##name, arg_info, flags)
90
- #define ZEND_DEP_ME (classname , name , arg_info , flags ) ZEND_RAW_FENTRY(#name, zim_##classname##_##name, arg_info, flags | ZEND_ACC_DEPRECATED)
91
- #define ZEND_ABSTRACT_ME (classname , name , arg_info ) ZEND_RAW_FENTRY(#name, NULL, arg_info, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
92
- #define ZEND_ABSTRACT_ME_WITH_FLAGS (classname , name , arg_info , flags ) ZEND_RAW_FENTRY(#name, NULL, arg_info, flags)
93
- #define ZEND_MALIAS (classname , name , alias , arg_info , flags ) ZEND_RAW_FENTRY(#name, zim_##classname##_##alias, arg_info, flags)
94
- #define ZEND_ME_MAPPING (name , func_name , arg_info , flags ) ZEND_RAW_FENTRY(#name, zif_##func_name, arg_info, flags)
90
+ #define ZEND_ME (classname , name , arg_info , flags ) ZEND_RAW_FENTRY(#name, zim_##classname##_##name, arg_info, flags, NULL)
91
+ #define ZEND_DEP_ME (classname , name , arg_info , flags ) ZEND_RAW_FENTRY(#name, zim_##classname##_##name, arg_info, flags | ZEND_ACC_DEPRECATED, NULL)
92
+ #define ZEND_ABSTRACT_ME (classname , name , arg_info ) ZEND_RAW_FENTRY(#name, NULL, arg_info, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT, NULL)
93
+ #define ZEND_ABSTRACT_ME_WITH_FLAGS (classname , name , arg_info , flags ) ZEND_RAW_FENTRY(#name, NULL, arg_info, flags, NULL)
94
+ #define ZEND_MALIAS (classname , name , alias , arg_info , flags ) ZEND_RAW_FENTRY(#name, zim_##classname##_##alias, arg_info, flags, NULL)
95
+ #define ZEND_ME_MAPPING (name , func_name , arg_info , flags ) ZEND_RAW_FENTRY(#name, zif_##func_name, arg_info, flags, NULL)
96
+ #define ZEND_DIRECT_FE (name , arg_info , frameless_function_infos ) { #name, zif_##name, arg_info, (uint32_t) (sizeof(arg_info)/sizeof(struct _zend_internal_arg_info)-1), 0, frameless_function_infos },
95
97
96
- #define ZEND_NS_FENTRY (ns , zend_name , name , arg_info , flags ) ZEND_RAW_FENTRY(ZEND_NS_NAME(ns, #zend_name), name, arg_info, flags)
98
+ #define ZEND_NS_FENTRY (ns , zend_name , name , arg_info , flags ) ZEND_RAW_FENTRY(ZEND_NS_NAME(ns, #zend_name), name, arg_info, flags, NULL )
97
99
98
- #define ZEND_NS_RAW_FENTRY (ns , zend_name , name , arg_info , flags ) ZEND_RAW_FENTRY(ZEND_NS_NAME(ns, zend_name), name, arg_info, flags)
100
+ #define ZEND_NS_RAW_FENTRY (ns , zend_name , name , arg_info , flags ) ZEND_RAW_FENTRY(ZEND_NS_NAME(ns, zend_name), name, arg_info, flags, NULL )
99
101
/**
100
102
* Note that if you are asserting that a function is compile-time evaluable, you are asserting that
101
103
*
@@ -106,7 +108,7 @@ typedef struct _zend_fcall_info_cache {
106
108
* 4. The function will not take an unreasonable amount of time or memory to compute on code that may be seen in practice.
107
109
* (e.g. str_repeat is special cased to check the length instead of using this)
108
110
*/
109
- #define ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE (name , arg_info ) ZEND_RAW_FENTRY(#name, zif_##name, arg_info, ZEND_ACC_COMPILE_TIME_EVAL)
111
+ #define ZEND_SUPPORTS_COMPILE_TIME_EVAL_FE (name , arg_info ) ZEND_RAW_FENTRY(#name, zif_##name, arg_info, ZEND_ACC_COMPILE_TIME_EVAL, NULL )
110
112
111
113
/* Same as ZEND_NS_NAMED_FE */
112
114
#define ZEND_NS_RAW_NAMED_FE (ns , zend_name , name , arg_info ) ZEND_NS_RAW_FENTRY(ns, #zend_name, name, arg_info, 0)
@@ -117,7 +119,7 @@ typedef struct _zend_fcall_info_cache {
117
119
#define ZEND_NS_FALIAS (ns , name , alias , arg_info ) ZEND_NS_RAW_FENTRY(ns, #name, zif_##alias, arg_info, 0)
118
120
#define ZEND_NS_DEP_FALIAS (ns , name , alias , arg_info ) ZEND_NS_RAW_FENTRY(ns, #name, zif_##alias, arg_info, ZEND_ACC_DEPRECATED)
119
121
120
- #define ZEND_FE_END { NULL, NULL, NULL, 0, 0 }
122
+ #define ZEND_FE_END { NULL, NULL, NULL, 0, 0, NULL }
121
123
122
124
#define _ZEND_ARG_INFO_FLAGS (pass_by_ref , is_variadic , is_tentative ) \
123
125
(((pass_by_ref) << _ZEND_SEND_MODE_SHIFT) | ((is_variadic) ? _ZEND_IS_VARIADIC_BIT : 0) | ((is_tentative) ? _ZEND_IS_TENTATIVE_BIT : 0))
0 commit comments