diff --git a/Zend/zend_type_code.h b/Zend/zend_type_code.h index d56dcfe0dd7..6ed86ab7631 100644 --- a/Zend/zend_type_code.h +++ b/Zend/zend_type_code.h @@ -18,48 +18,43 @@ #define ZEND_TYPE_CODE_H enum { - /* Regular data types */ - IS_UNDEF, - IS_NULL, - IS_FALSE, - IS_TRUE, - IS_LONG, - IS_DOUBLE, - IS_STRING, - IS_ARRAY, - IS_OBJECT, - IS_RESOURCE, - IS_REFERENCE, - IS_CONSTANT_AST, /* Constant expressions */ - - /** - * One after the largest regular data type; used internally - * for overlapping ranges below. - */ - _IS_REGULAR_END, + /* Regular data types: Must be in sync with zend_variables.c. */ + IS_UNDEF = 0, + IS_NULL = 1, + IS_FALSE = 2, + IS_TRUE = 3, + IS_LONG = 4, + IS_DOUBLE = 5, + IS_STRING = 6, + IS_ARRAY = 7, + IS_OBJECT = 8, + IS_RESOURCE = 9, + IS_REFERENCE = 10, + IS_CONSTANT_AST = 11, /* Constant expressions */ /* Fake types used only for type hinting. * These are allowed to overlap with the types below. */ - IS_CALLABLE = _IS_REGULAR_END, - IS_ITERABLE, - IS_VOID, - IS_STATIC, - IS_MIXED, - IS_NEVER, - - _IS_FAKE_END, + IS_CALLABLE = 12, + IS_ITERABLE = 13, + IS_VOID = 14, + IS_STATIC = 15, + IS_MIXED = 16, + IS_NEVER = 17, /* internal types */ - IS_INDIRECT = _IS_REGULAR_END, - IS_PTR, - IS_ALIAS_PTR, - _IS_ERROR, - - _IS_INTERNAL_END, + IS_INDIRECT = 12, + IS_PTR = 13, + IS_ALIAS_PTR = 14, + _IS_ERROR = 15, /* used for casts */ - _IS_BOOL = _IS_FAKE_END > _IS_INTERNAL_END ? _IS_FAKE_END : _IS_INTERNAL_END, - _IS_NUMBER, + _IS_BOOL = 18, + _IS_NUMBER = 19, }; +#define ZEND_SAME_FAKE_TYPE(faketype, realtype) ( \ + (faketype) == (realtype) \ + || ((faketype) == _IS_BOOL && ((realtype) == IS_TRUE || (realtype) == IS_FALSE)) \ +) + #endif /* ZEND_TYPE_CODE_H */ diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c index 4b0f119068b..27e09d7db22 100644 --- a/Zend/zend_variables.c +++ b/Zend/zend_variables.c @@ -51,11 +51,6 @@ static const zend_rc_dtor_func_t zend_rc_dtor_func[] = { [IS_CONSTANT_AST] = (zend_rc_dtor_func_t)zend_ast_ref_destroy }; -#if ZEND_GCC_VERSION >= 4006 || defined(__clang__) -_Static_assert(sizeof(zend_rc_dtor_func) / sizeof(zend_rc_dtor_func[0]) == _IS_REGULAR_END, - "zend_rc_dtor_func has the wrong size"); -#endif - ZEND_API void ZEND_FASTCALL rc_dtor_func(zend_refcounted *p) { ZEND_ASSERT(GC_TYPE(p) <= IS_CONSTANT_AST);