@@ -133,7 +133,7 @@ typedef struct {
133133 * are only supported since C++20). */
134134 void * ptr ;
135135 uint32_t type_mask ;
136- /* TODO: We could use the extra 32-bit of padding on 64-bit systems. */
136+ uint32_t generic_param_index ;
137137} zend_type ;
138138
139139typedef struct {
@@ -307,27 +307,28 @@ typedef struct {
307307#endif
308308
309309#define ZEND_TYPE_INIT_NONE (extra_flags ) \
310- _ZEND_TYPE_PREFIX { NULL, (extra_flags) }
310+ _ZEND_TYPE_PREFIX { NULL, (extra_flags), 0 }
311311
312312#define ZEND_TYPE_INIT_MASK (_type_mask ) \
313- _ZEND_TYPE_PREFIX { NULL, (_type_mask) }
313+ _ZEND_TYPE_PREFIX { NULL, (_type_mask), 0 }
314314
315315#define ZEND_TYPE_INIT_CODE (code , allow_null , extra_flags ) \
316316 ZEND_TYPE_INIT_MASK(((code) == _IS_BOOL ? MAY_BE_BOOL : ( (code) == IS_ITERABLE ? _ZEND_TYPE_ITERABLE_BIT : ((code) == IS_MIXED ? MAY_BE_ANY : (1 << (code))))) \
317317 | ((allow_null) ? _ZEND_TYPE_NULLABLE_BIT : 0) | (extra_flags))
318318
319319#define ZEND_TYPE_INIT_PTR (ptr , type_kind , allow_null , extra_flags ) \
320320 _ZEND_TYPE_PREFIX { (void *) (ptr), \
321- (type_kind) | ((allow_null) ? _ZEND_TYPE_NULLABLE_BIT : 0) | (extra_flags) }
321+ (type_kind) | ((allow_null) ? _ZEND_TYPE_NULLABLE_BIT : 0) | (extra_flags), \
322+ 0 }
322323
323324#define ZEND_TYPE_INIT_PTR_MASK (ptr , type_mask ) \
324- _ZEND_TYPE_PREFIX { (void *) (ptr), (type_mask) }
325+ _ZEND_TYPE_PREFIX { (void *) (ptr), (type_mask), 0 }
325326
326327#define ZEND_TYPE_INIT_UNION (ptr , extra_flags ) \
327- _ZEND_TYPE_PREFIX { (void *) (ptr), (_ZEND_TYPE_LIST_BIT|_ZEND_TYPE_UNION_BIT) | (extra_flags) }
328+ _ZEND_TYPE_PREFIX { (void *) (ptr), (_ZEND_TYPE_LIST_BIT|_ZEND_TYPE_UNION_BIT) | (extra_flags), 0 }
328329
329330#define ZEND_TYPE_INIT_INTERSECTION (ptr , extra_flags ) \
330- _ZEND_TYPE_PREFIX { (void *) (ptr), (_ZEND_TYPE_LIST_BIT|_ZEND_TYPE_INTERSECTION_BIT) | (extra_flags) }
331+ _ZEND_TYPE_PREFIX { (void *) (ptr), (_ZEND_TYPE_LIST_BIT|_ZEND_TYPE_INTERSECTION_BIT) | (extra_flags), 0 }
331332
332333#define ZEND_TYPE_INIT_CLASS (class_name , allow_null , extra_flags ) \
333334 ZEND_TYPE_INIT_PTR(class_name, _ZEND_TYPE_NAME_BIT, allow_null, extra_flags)
@@ -341,6 +342,9 @@ typedef struct {
341342#define ZEND_TYPE_INIT_CLASS_CONST_MASK (class_name , type_mask ) \
342343 ZEND_TYPE_INIT_PTR_MASK(class_name, (_ZEND_TYPE_LITERAL_NAME_BIT | (type_mask)))
343344
345+ #define ZEND_TYPE_INIT_GENERIC_PARAM (generic_name , index ) \
346+ _ZEND_TYPE_PREFIX { (void *) (generic_name), _ZEND_TYPE_GENERIC_PARAM_NAME_BIT, index }
347+
344348typedef union _zend_value {
345349 zend_long lval ; /* long value */
346350 double dval ; /* double value */
0 commit comments