@@ -216,6 +216,7 @@ typedef struct _builtin_type_info {
216216
217217static const builtin_type_info builtin_types [] = {
218218 {ZEND_STRL ("null" ), IS_NULL },
219+ {ZEND_STRL ("true" ), IS_TRUE },
219220 {ZEND_STRL ("false" ), IS_FALSE },
220221 {ZEND_STRL ("int" ), IS_LONG },
221222 {ZEND_STRL ("float" ), IS_DOUBLE },
@@ -1245,6 +1246,8 @@ zend_string *zend_type_to_string_resolved(zend_type type, zend_class_entry *scop
12451246 str = add_type_string (str , ZSTR_KNOWN (ZEND_STR_BOOL ), /* is_intersection */ false);
12461247 } else if (type_mask & MAY_BE_FALSE ) {
12471248 str = add_type_string (str , ZSTR_KNOWN (ZEND_STR_FALSE ), /* is_intersection */ false);
1249+ } else if (type_mask & MAY_BE_TRUE ) {
1250+ str = add_type_string (str , ZSTR_KNOWN (ZEND_STR_TRUE ), /* is_intersection */ false);
12481251 }
12491252 if (type_mask & MAY_BE_VOID ) {
12501253 str = add_type_string (str , ZSTR_KNOWN (ZEND_STR_VOID ), /* is_intersection */ false);
@@ -6218,6 +6221,11 @@ static zend_type zend_compile_typename(
62186221 zend_error_noreturn (E_COMPILE_ERROR ,
62196222 "Duplicate type %s is redundant" , ZSTR_VAL (overlap_type_str ));
62206223 }
6224+ if ( ((ZEND_TYPE_PURE_MASK (type ) & MAY_BE_TRUE ) && (single_type_mask == MAY_BE_FALSE ))
6225+ || ((ZEND_TYPE_PURE_MASK (type ) & MAY_BE_FALSE ) && (single_type_mask == MAY_BE_TRUE )) ) {
6226+ zend_error_noreturn (E_COMPILE_ERROR ,
6227+ "Type contains both true and false, bool should be used instead" );
6228+ }
62216229 ZEND_TYPE_FULL_MASK (type ) |= ZEND_TYPE_PURE_MASK (single_type );
62226230 ZEND_TYPE_FULL_MASK (single_type ) &= ~_ZEND_TYPE_MAY_BE_MASK ;
62236231
0 commit comments