@@ -133,7 +133,7 @@ typedef struct {
133
133
* are only supported since C++20). */
134
134
void * ptr ;
135
135
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 ;
137
137
} zend_type ;
138
138
139
139
typedef struct {
@@ -307,27 +307,28 @@ typedef struct {
307
307
#endif
308
308
309
309
#define ZEND_TYPE_INIT_NONE (extra_flags ) \
310
- _ZEND_TYPE_PREFIX { NULL, (extra_flags) }
310
+ _ZEND_TYPE_PREFIX { NULL, (extra_flags), 0 }
311
311
312
312
#define ZEND_TYPE_INIT_MASK (_type_mask ) \
313
- _ZEND_TYPE_PREFIX { NULL, (_type_mask) }
313
+ _ZEND_TYPE_PREFIX { NULL, (_type_mask), 0 }
314
314
315
315
#define ZEND_TYPE_INIT_CODE (code , allow_null , extra_flags ) \
316
316
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))))) \
317
317
| ((allow_null) ? _ZEND_TYPE_NULLABLE_BIT : 0) | (extra_flags))
318
318
319
319
#define ZEND_TYPE_INIT_PTR (ptr , type_kind , allow_null , extra_flags ) \
320
320
_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 }
322
323
323
324
#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 }
325
326
326
327
#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 }
328
329
329
330
#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 }
331
332
332
333
#define ZEND_TYPE_INIT_CLASS (class_name , allow_null , extra_flags ) \
333
334
ZEND_TYPE_INIT_PTR(class_name, _ZEND_TYPE_NAME_BIT, allow_null, extra_flags)
@@ -341,6 +342,9 @@ typedef struct {
341
342
#define ZEND_TYPE_INIT_CLASS_CONST_MASK (class_name , type_mask ) \
342
343
ZEND_TYPE_INIT_PTR_MASK(class_name, (_ZEND_TYPE_LITERAL_NAME_BIT | (type_mask)))
343
344
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
+
344
348
typedef union _zend_value {
345
349
zend_long lval ; /* long value */
346
350
double dval ; /* double value */
0 commit comments