@@ -107,66 +107,97 @@ typedef struct _zend_fcall_info_cache {
107
107
108
108
#define ZEND_FE_END { NULL, NULL, NULL, 0, 0 }
109
109
110
- #define _ZEND_ARG_INFO_FLAGS (pass_by_ref , is_variadic ) \
111
- (((pass_by_ref) << _ZEND_SEND_MODE_SHIFT) | ((is_variadic) ? _ZEND_IS_VARIADIC_BIT : 0))
110
+ #define _ZEND_ARG_INFO_FLAGS (pass_by_ref , is_variadic , is_tentative ) \
111
+ (((pass_by_ref) << _ZEND_SEND_MODE_SHIFT) | ((is_variadic) ? _ZEND_IS_VARIADIC_BIT : 0) | ((is_tentative) ? _ZEND_IS_TENTATIVE_BIT : 0) )
112
112
113
113
/* Arginfo structures without type information */
114
114
#define ZEND_ARG_INFO (pass_by_ref , name ) \
115
- { #name, ZEND_TYPE_INIT_NONE(_ZEND_ARG_INFO_FLAGS(pass_by_ref, 0)), NULL },
115
+ { #name, ZEND_TYPE_INIT_NONE(_ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0 )), NULL },
116
116
#define ZEND_ARG_INFO_WITH_DEFAULT_VALUE (pass_by_ref , name , default_value ) \
117
- { #name, ZEND_TYPE_INIT_NONE(_ZEND_ARG_INFO_FLAGS(pass_by_ref, 0)), default_value },
117
+ { #name, ZEND_TYPE_INIT_NONE(_ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0 )), default_value },
118
118
#define ZEND_ARG_VARIADIC_INFO (pass_by_ref , name ) \
119
- { #name, ZEND_TYPE_INIT_NONE(_ZEND_ARG_INFO_FLAGS(pass_by_ref, 1)), NULL },
119
+ { #name, ZEND_TYPE_INIT_NONE(_ZEND_ARG_INFO_FLAGS(pass_by_ref, 1, 0 )), NULL },
120
120
/* Arginfo structures with simple type information */
121
121
#define ZEND_ARG_TYPE_INFO (pass_by_ref , name , type_hint , allow_null ) \
122
- { #name, ZEND_TYPE_INIT_CODE(type_hint, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0)), NULL },
122
+ { #name, ZEND_TYPE_INIT_CODE(type_hint, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0 )), NULL },
123
123
#define ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE (pass_by_ref , name , type_hint , allow_null , default_value ) \
124
- { #name, ZEND_TYPE_INIT_CODE(type_hint, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0)), default_value },
124
+ { #name, ZEND_TYPE_INIT_CODE(type_hint, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0 )), default_value },
125
125
#define ZEND_ARG_VARIADIC_TYPE_INFO (pass_by_ref , name , type_hint , allow_null ) \
126
- { #name, ZEND_TYPE_INIT_CODE(type_hint, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 1)), NULL },
126
+ { #name, ZEND_TYPE_INIT_CODE(type_hint, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 1, 0 )), NULL },
127
127
/* Arginfo structures with complex type information */
128
128
#define ZEND_ARG_TYPE_MASK (pass_by_ref , name , type_mask , default_value ) \
129
- { #name, ZEND_TYPE_INIT_MASK(type_mask | _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0)), default_value },
129
+ { #name, ZEND_TYPE_INIT_MASK(type_mask | _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0 )), default_value },
130
130
#define ZEND_ARG_OBJ_TYPE_MASK (pass_by_ref , name , class_name , type_mask , default_value ) \
131
- { #name, ZEND_TYPE_INIT_CLASS_CONST_MASK(#class_name, type_mask | _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0)), default_value },
131
+ { #name, ZEND_TYPE_INIT_CLASS_CONST_MASK(#class_name, type_mask | _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0 )), default_value },
132
132
/* Arginfo structures with object type information */
133
133
#define ZEND_ARG_OBJ_INFO (pass_by_ref , name , classname , allow_null ) \
134
- { #name, ZEND_TYPE_INIT_CLASS_CONST(#classname, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0)), NULL },
134
+ { #name, ZEND_TYPE_INIT_CLASS_CONST(#classname, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0 )), NULL },
135
135
#define ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE (pass_by_ref , name , classname , allow_null , default_value ) \
136
- { #name, ZEND_TYPE_INIT_CLASS_CONST(#classname, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0)), default_value },
136
+ { #name, ZEND_TYPE_INIT_CLASS_CONST(#classname, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0 )), default_value },
137
137
#define ZEND_ARG_VARIADIC_OBJ_INFO (pass_by_ref , name , classname , allow_null ) \
138
- { #name, ZEND_TYPE_INIT_CLASS_CONST(#classname, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 1)), NULL },
138
+ { #name, ZEND_TYPE_INIT_CLASS_CONST(#classname, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 1, 0 )), NULL },
139
139
/* Legacy arginfo structures */
140
140
#define ZEND_ARG_ARRAY_INFO (pass_by_ref , name , allow_null ) \
141
- { #name, ZEND_TYPE_INIT_CODE(IS_ARRAY, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0)), NULL },
141
+ { #name, ZEND_TYPE_INIT_CODE(IS_ARRAY, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0 )), NULL },
142
142
#define ZEND_ARG_CALLABLE_INFO (pass_by_ref , name , allow_null ) \
143
- { #name, ZEND_TYPE_INIT_CODE(IS_CALLABLE, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0)), NULL },
143
+ { #name, ZEND_TYPE_INIT_CODE(IS_CALLABLE, allow_null, _ZEND_ARG_INFO_FLAGS(pass_by_ref, 0, 0 )), NULL },
144
144
145
- #define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX (name , return_reference , required_num_args , class_name , allow_null ) \
145
+ #define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX2 (name , return_reference , required_num_args , class_name , allow_null , is_tentative_return_type ) \
146
146
static const zend_internal_arg_info name[] = { \
147
147
{ (const char*)(zend_uintptr_t)(required_num_args), \
148
- ZEND_TYPE_INIT_CLASS_CONST(#class_name, allow_null, _ZEND_ARG_INFO_FLAGS(return_reference, 0)), NULL },
148
+ ZEND_TYPE_INIT_CLASS_CONST(#class_name, allow_null, _ZEND_ARG_INFO_FLAGS(return_reference, 0, is_tentative_return_type)), NULL },
149
+
150
+ #define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX (name , return_reference , required_num_args , class_name , allow_null ) \
151
+ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX2(name, return_reference, required_num_args, class_name, allow_null, 0)
152
+
153
+ #define ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX (name , return_reference , required_num_args , class_name , allow_null ) \
154
+ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX2(name, return_reference, required_num_args, class_name, allow_null, 1)
149
155
150
156
#define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO (name , class_name , allow_null ) \
151
- ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, -1, class_name, allow_null)
157
+ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX2(name, 0, -1, class_name, allow_null, 0)
158
+
159
+ #define ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO (name , class_name , allow_null ) \
160
+ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX2(name, 0, -1, class_name, allow_null, 1)
161
+
162
+ #define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX2 (name , return_reference , required_num_args , type , is_tentative_return_type ) \
163
+ static const zend_internal_arg_info name[] = { \
164
+ { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_MASK(type | _ZEND_ARG_INFO_FLAGS(return_reference, 0, is_tentative_return_type)), NULL },
152
165
153
166
#define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX (name , return_reference , required_num_args , type ) \
167
+ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX2(name, return_reference, required_num_args, type, 0)
168
+
169
+ #define ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX (name , return_reference , required_num_args , type ) \
170
+ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX2(name, return_reference, required_num_args, type, 1)
171
+
172
+ #define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX2 (name , return_reference , required_num_args , class_name , type , is_tentative_return_type ) \
154
173
static const zend_internal_arg_info name[] = { \
155
- { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_MASK( type | _ZEND_ARG_INFO_FLAGS(return_reference, 0)), NULL },
174
+ { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_CLASS_CONST_MASK(#class_name, type | _ZEND_ARG_INFO_FLAGS(return_reference, 0, is_tentative_return_type )), NULL },
156
175
157
176
#define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX (name , return_reference , required_num_args , class_name , type ) \
177
+ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX2(name, return_reference, required_num_args, class_name, type, 0)
178
+
179
+ #define ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_TYPE_MASK_EX (name , return_reference , required_num_args , class_name , type ) \
180
+ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX2(name, return_reference, required_num_args, class_name, type, 1)
181
+
182
+ #define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX2 (name , return_reference , required_num_args , type , allow_null , is_tentative_return_type ) \
158
183
static const zend_internal_arg_info name[] = { \
159
- { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_CLASS_CONST_MASK(#class_name, type | _ZEND_ARG_INFO_FLAGS(return_reference, 0)), NULL },
184
+ { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_CODE(type, allow_null, _ZEND_ARG_INFO_FLAGS(return_reference, 0, is_tentative_return_type )), NULL },
160
185
161
186
#define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX (name , return_reference , required_num_args , type , allow_null ) \
162
- static const zend_internal_arg_info name[] = { \
163
- { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_CODE(type, allow_null, _ZEND_ARG_INFO_FLAGS(return_reference, 0)), NULL },
187
+ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX2(name, return_reference, required_num_args, type, allow_null, 0)
188
+
189
+ #define ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX (name , return_reference , required_num_args , type , allow_null ) \
190
+ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX2(name, return_reference, required_num_args, type, allow_null, 1)
191
+
164
192
#define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO (name , type , allow_null ) \
165
- ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, -1, type, allow_null)
193
+ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX2(name, 0, -1, type, allow_null, 0)
194
+
195
+ #define ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO (name , type , allow_null ) \
196
+ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX2(name, 0, -1, type, allow_null, 1)
166
197
167
198
#define ZEND_BEGIN_ARG_INFO_EX (name , _unused , return_reference , required_num_args ) \
168
199
static const zend_internal_arg_info name[] = { \
169
- { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_NONE(_ZEND_ARG_INFO_FLAGS(return_reference, 0)), NULL },
200
+ { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_INIT_NONE(_ZEND_ARG_INFO_FLAGS(return_reference, 0, 0 )), NULL },
170
201
#define ZEND_BEGIN_ARG_INFO (name , _unused ) \
171
202
ZEND_BEGIN_ARG_INFO_EX(name, {}, ZEND_RETURN_VALUE, -1)
172
203
#define ZEND_END_ARG_INFO () };
0 commit comments