From b1d82e2742689ed03c1548942975db6863b0fc75 Mon Sep 17 00:00:00 2001 From: Jorg Adam Sowa Date: Wed, 4 Oct 2023 22:57:19 +0200 Subject: [PATCH 1/8] Typed constants in date extension --- ext/date/php_date.stub.php | 104 ++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 60 deletions(-) diff --git a/ext/date/php_date.stub.php b/ext/date/php_date.stub.php index b148262eb4b5c..e61e44bd6e628 100644 --- a/ext/date/php_date.stub.php +++ b/ext/date/php_date.stub.php @@ -284,34 +284,34 @@ function date_sun_info(int $timestamp, float $latitude, float $longitude): array interface DateTimeInterface { - /** @var string */ - public const ATOM = DATE_ATOM; - /** @var string */ - public const COOKIE = DATE_COOKIE; - /** @var string */ - public const ISO8601 = DATE_ISO8601; - /** @var string */ - public const ISO8601_EXPANDED = DATE_ISO8601_EXPANDED; - /** @var string */ - public const RFC822 = DATE_RFC822; - /** @var string */ - public const RFC850 = DATE_RFC850; - /** @var string */ - public const RFC1036 = DATE_RFC1036; - /** @var string */ - public const RFC1123 = DATE_RFC1123; - /** @var string */ - public const RFC7231 = DATE_RFC7231; - /** @var string */ - public const RFC2822 = DATE_RFC2822; - /** @var string */ - public const RFC3339 = DATE_RFC3339; - /** @var string */ - public const RFC3339_EXTENDED = DATE_RFC3339_EXTENDED; - /** @var string */ - public const RSS = DATE_RSS; - /** @var string */ - public const W3C = DATE_W3C; + + public const string ATOM = DATE_ATOM; + + public const string COOKIE = DATE_COOKIE; + + public const string ISO8601 = DATE_ISO8601; + + public const string ISO8601_EXPANDED = DATE_ISO8601_EXPANDED; + + public const string RFC822 = DATE_RFC822; + + public const string RFC850 = DATE_RFC850; + + public const string RFC1036 = DATE_RFC1036; + + public const string RFC1123 = DATE_RFC1123; + + public const string RFC7231 = DATE_RFC7231; + + public const string RFC2822 = DATE_RFC2822; + + public const string RFC3339 = DATE_RFC3339; + + public const string RFC3339_EXTENDED = DATE_RFC3339_EXTENDED; + + public const string RSS = DATE_RSS; + + public const string W3C = DATE_W3C; /** @tentative-return-type */ public function format(string $format): string; @@ -556,75 +556,61 @@ public static function createFromInterface(DateTimeInterface $object): DateTimeI class DateTimeZone { /** - * @var int * @cvalue PHP_DATE_TIMEZONE_GROUP_AFRICA */ - public const AFRICA = UNKNOWN; + public const int AFRICA = UNKNOWN; /** - * @var int * @cvalue PHP_DATE_TIMEZONE_GROUP_AMERICA */ - public const AMERICA = UNKNOWN; + public const int AMERICA = UNKNOWN; /** - * @var int * @cvalue PHP_DATE_TIMEZONE_GROUP_ANTARCTICA */ - public const ANTARCTICA = UNKNOWN; + public const int ANTARCTICA = UNKNOWN; /** - * @var int * @cvalue PHP_DATE_TIMEZONE_GROUP_ARCTIC */ - public const ARCTIC = UNKNOWN; + public const int ARCTIC = UNKNOWN; /** - * @var int * @cvalue PHP_DATE_TIMEZONE_GROUP_ASIA */ - public const ASIA = UNKNOWN; + public const int ASIA = UNKNOWN; /** - * @var int * @cvalue PHP_DATE_TIMEZONE_GROUP_ATLANTIC */ - public const ATLANTIC = UNKNOWN; + public const int ATLANTIC = UNKNOWN; /** - * @var int * @cvalue PHP_DATE_TIMEZONE_GROUP_AUSTRALIA */ - public const AUSTRALIA = UNKNOWN; + public const int AUSTRALIA = UNKNOWN; /** - * @var int * @cvalue PHP_DATE_TIMEZONE_GROUP_EUROPE */ - public const EUROPE = UNKNOWN; + public const int EUROPE = UNKNOWN; /** - * @var int * @cvalue PHP_DATE_TIMEZONE_GROUP_INDIAN */ - public const INDIAN = UNKNOWN; + public const int INDIAN = UNKNOWN; /** - * @var int * @cvalue PHP_DATE_TIMEZONE_GROUP_PACIFIC */ - public const PACIFIC = UNKNOWN; + public const int PACIFIC = UNKNOWN; /** - * @var int * @cvalue PHP_DATE_TIMEZONE_GROUP_UTC */ - public const UTC = UNKNOWN; + public const int UTC = UNKNOWN; /** - * @var int * @cvalue PHP_DATE_TIMEZONE_GROUP_ALL */ - public const ALL = UNKNOWN; + public const int ALL = UNKNOWN; /** - * @var int * @cvalue PHP_DATE_TIMEZONE_GROUP_ALL_W_BC */ - public const ALL_WITH_BC = UNKNOWN; + public const int ALL_WITH_BC = UNKNOWN; /** - * @var int * @cvalue PHP_DATE_TIMEZONE_PER_COUNTRY */ - public const PER_COUNTRY = UNKNOWN; + public const int PER_COUNTRY = UNKNOWN; public function __construct(string $timezone) {} @@ -708,15 +694,13 @@ public static function __set_state(array $array): DateInterval {} class DatePeriod implements IteratorAggregate { /** - * @var int * @cvalue PHP_DATE_PERIOD_EXCLUDE_START_DATE */ - public const EXCLUDE_START_DATE = UNKNOWN; + public const int EXCLUDE_START_DATE = UNKNOWN; /** - * @var int * @cvalue PHP_DATE_PERIOD_INCLUDE_END_DATE */ - public const INCLUDE_END_DATE = UNKNOWN; + public const int INCLUDE_END_DATE = UNKNOWN; /** @readonly */ public ?DateTimeInterface $start; From f80bbf218f3e5a75937ed02f52dd33d0bc317ebf Mon Sep 17 00:00:00 2001 From: Jorg Adam Sowa Date: Sat, 7 Oct 2023 00:00:39 +0200 Subject: [PATCH 2/8] Added note about typed class constants in Date extension --- UPGRADING | 3 +++ 1 file changed, 3 insertions(+) diff --git a/UPGRADING b/UPGRADING index 09b277339ed3c..1001fed151c65 100644 --- a/UPGRADING +++ b/UPGRADING @@ -484,6 +484,9 @@ PHP 8.4 UPGRADE NOTES - Curl: . The Curl extension now requires at least libcurl 7.61.0. +- Date: + . The class constants are typed now. + - Intl: . The class constants are typed now. From d3d70051a253c0d834fa805db535bf24ec3406fe Mon Sep 17 00:00:00 2001 From: Jorg Adam Sowa Date: Sat, 7 Oct 2023 00:05:01 +0200 Subject: [PATCH 3/8] Inline the phpdocs of the class constants in date extension --- ext/date/php_date.stub.php | 64 ++++++++++---------------------------- 1 file changed, 16 insertions(+), 48 deletions(-) diff --git a/ext/date/php_date.stub.php b/ext/date/php_date.stub.php index e61e44bd6e628..2683b3bf55ec8 100644 --- a/ext/date/php_date.stub.php +++ b/ext/date/php_date.stub.php @@ -555,61 +555,33 @@ public static function createFromInterface(DateTimeInterface $object): DateTimeI class DateTimeZone { - /** - * @cvalue PHP_DATE_TIMEZONE_GROUP_AFRICA - */ + /** @cvalue PHP_DATE_TIMEZONE_GROUP_AFRICA */ public const int AFRICA = UNKNOWN; - /** - * @cvalue PHP_DATE_TIMEZONE_GROUP_AMERICA - */ + /** @cvalue PHP_DATE_TIMEZONE_GROUP_AMERICA */ public const int AMERICA = UNKNOWN; - /** - * @cvalue PHP_DATE_TIMEZONE_GROUP_ANTARCTICA - */ + /** @cvalue PHP_DATE_TIMEZONE_GROUP_ANTARCTICA */ public const int ANTARCTICA = UNKNOWN; - /** - * @cvalue PHP_DATE_TIMEZONE_GROUP_ARCTIC - */ + /** @cvalue PHP_DATE_TIMEZONE_GROUP_ARCTIC */ public const int ARCTIC = UNKNOWN; - /** - * @cvalue PHP_DATE_TIMEZONE_GROUP_ASIA - */ + /** @cvalue PHP_DATE_TIMEZONE_GROUP_ASIA */ public const int ASIA = UNKNOWN; - /** - * @cvalue PHP_DATE_TIMEZONE_GROUP_ATLANTIC - */ + /** @cvalue PHP_DATE_TIMEZONE_GROUP_ATLANTIC */ public const int ATLANTIC = UNKNOWN; - /** - * @cvalue PHP_DATE_TIMEZONE_GROUP_AUSTRALIA - */ + /** @cvalue PHP_DATE_TIMEZONE_GROUP_AUSTRALIA */ public const int AUSTRALIA = UNKNOWN; - /** - * @cvalue PHP_DATE_TIMEZONE_GROUP_EUROPE - */ + /** @cvalue PHP_DATE_TIMEZONE_GROUP_EUROPE */ public const int EUROPE = UNKNOWN; - /** - * @cvalue PHP_DATE_TIMEZONE_GROUP_INDIAN - */ + /** @cvalue PHP_DATE_TIMEZONE_GROUP_INDIAN */ public const int INDIAN = UNKNOWN; - /** - * @cvalue PHP_DATE_TIMEZONE_GROUP_PACIFIC - */ + /** @cvalue PHP_DATE_TIMEZONE_GROUP_PACIFIC */ public const int PACIFIC = UNKNOWN; - /** - * @cvalue PHP_DATE_TIMEZONE_GROUP_UTC - */ + /** @cvalue PHP_DATE_TIMEZONE_GROUP_UTC */ public const int UTC = UNKNOWN; - /** - * @cvalue PHP_DATE_TIMEZONE_GROUP_ALL - */ + /** @cvalue PHP_DATE_TIMEZONE_GROUP_ALL */ public const int ALL = UNKNOWN; - /** - * @cvalue PHP_DATE_TIMEZONE_GROUP_ALL_W_BC - */ + /** @cvalue PHP_DATE_TIMEZONE_GROUP_ALL_W_BC */ public const int ALL_WITH_BC = UNKNOWN; - /** - * @cvalue PHP_DATE_TIMEZONE_PER_COUNTRY - */ + /** @cvalue PHP_DATE_TIMEZONE_PER_COUNTRY */ public const int PER_COUNTRY = UNKNOWN; public function __construct(string $timezone) {} @@ -693,13 +665,9 @@ public static function __set_state(array $array): DateInterval {} class DatePeriod implements IteratorAggregate { - /** - * @cvalue PHP_DATE_PERIOD_EXCLUDE_START_DATE - */ + /** @cvalue PHP_DATE_PERIOD_EXCLUDE_START_DATE */ public const int EXCLUDE_START_DATE = UNKNOWN; - /** - * @cvalue PHP_DATE_PERIOD_INCLUDE_END_DATE - */ + /** @cvalue PHP_DATE_PERIOD_INCLUDE_END_DATE */ public const int INCLUDE_END_DATE = UNKNOWN; /** @readonly */ From aa7ead2d7fb88b9abbcd623a59722ff4ec2e6175 Mon Sep 17 00:00:00 2001 From: Jorg Adam Sowa Date: Sun, 8 Oct 2023 18:09:19 +0200 Subject: [PATCH 4/8] Inline PHPDoc comments --- ext/date/php_date.stub.php | 48 ++++++++++---------------------------- 1 file changed, 12 insertions(+), 36 deletions(-) diff --git a/ext/date/php_date.stub.php b/ext/date/php_date.stub.php index 2683b3bf55ec8..68c70776210c2 100644 --- a/ext/date/php_date.stub.php +++ b/ext/date/php_date.stub.php @@ -380,9 +380,7 @@ public static function getLastErrors(): array|false {} */ public function format(string $format): string {} - /** - * @tentative-return-type - */ + /** @tentative-return-type */ public function modify(string $modifier): DateTime|false {} /** @@ -391,9 +389,7 @@ public function modify(string $modifier): DateTime|false {} */ public function add(DateInterval $interval): DateTime {} - /** - * @tentative-return-type - */ + /** @tentative-return-type */ public function sub(DateInterval $interval): DateTime {} /** @@ -641,9 +637,7 @@ class DateInterval { public function __construct(string $duration) {} - /** - * @tentative-return-type - */ + /** @tentative-return-type */ public static function createFromDateString(string $datetime): DateInterval|false {} /** @@ -720,65 +714,47 @@ public static function __set_state(array $array): DatePeriod {} public function getIterator(): Iterator {} } -/** - * @strict-properties - */ +/** @strict-properties */ class DateError extends Error { } -/** - * @strict-properties - */ +/** @strict-properties */ class DateObjectError extends DateError { } -/** - * @strict-properties - */ +/** @strict-properties */ class DateRangeError extends DateError { } -/** - * @strict-properties - */ +/** @strict-properties */ class DateException extends Exception { } -/** - * @strict-properties - */ +/** @strict-properties */ class DateInvalidTimeZoneException extends DateException { } -/** - * @strict-properties - */ +/** @strict-properties */ class DateInvalidOperationException extends DateException { } -/** - * @strict-properties - */ +/** @strict-properties */ class DateMalformedStringException extends DateException { } -/** - * @strict-properties - */ +/** @strict-properties */ class DateMalformedIntervalStringException extends DateException { } -/** - * @strict-properties - */ +/** @strict-properties */ class DateMalformedPeriodStringException extends DateException { } From 4a2c8f18fa6a00ffef5438cdd5b9b02dfd02c1e3 Mon Sep 17 00:00:00 2001 From: Jorg Sowa Date: Mon, 27 Nov 2023 00:24:00 +0100 Subject: [PATCH 5/8] Update stub generated file --- ext/date/php_date_arginfo.h | 60 ++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/ext/date/php_date_arginfo.h b/ext/date/php_date_arginfo.h index dc865bc866c88..04aeb09758d40 100644 --- a/ext/date/php_date_arginfo.h +++ b/ext/date/php_date_arginfo.h @@ -860,98 +860,98 @@ static zend_class_entry *register_class_DateTimeInterface(void) zend_string *const_ATOM_value_str = zend_string_init(DATE_FORMAT_RFC3339, strlen(DATE_FORMAT_RFC3339), 1); ZVAL_STR(&const_ATOM_value, const_ATOM_value_str); zend_string *const_ATOM_name = zend_string_init_interned("ATOM", sizeof("ATOM") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_ATOM_name, &const_ATOM_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_ATOM_name, &const_ATOM_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(const_ATOM_name); zval const_COOKIE_value; zend_string *const_COOKIE_value_str = zend_string_init(DATE_FORMAT_COOKIE, strlen(DATE_FORMAT_COOKIE), 1); ZVAL_STR(&const_COOKIE_value, const_COOKIE_value_str); zend_string *const_COOKIE_name = zend_string_init_interned("COOKIE", sizeof("COOKIE") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_COOKIE_name, &const_COOKIE_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_COOKIE_name, &const_COOKIE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(const_COOKIE_name); zval const_ISO8601_value; zend_string *const_ISO8601_value_str = zend_string_init(DATE_FORMAT_ISO8601, strlen(DATE_FORMAT_ISO8601), 1); ZVAL_STR(&const_ISO8601_value, const_ISO8601_value_str); zend_string *const_ISO8601_name = zend_string_init_interned("ISO8601", sizeof("ISO8601") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_ISO8601_name, &const_ISO8601_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_ISO8601_name, &const_ISO8601_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(const_ISO8601_name); zval const_ISO8601_EXPANDED_value; zend_string *const_ISO8601_EXPANDED_value_str = zend_string_init(DATE_FORMAT_ISO8601_EXPANDED, strlen(DATE_FORMAT_ISO8601_EXPANDED), 1); ZVAL_STR(&const_ISO8601_EXPANDED_value, const_ISO8601_EXPANDED_value_str); zend_string *const_ISO8601_EXPANDED_name = zend_string_init_interned("ISO8601_EXPANDED", sizeof("ISO8601_EXPANDED") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_ISO8601_EXPANDED_name, &const_ISO8601_EXPANDED_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_ISO8601_EXPANDED_name, &const_ISO8601_EXPANDED_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(const_ISO8601_EXPANDED_name); zval const_RFC822_value; zend_string *const_RFC822_value_str = zend_string_init(DATE_FORMAT_RFC822, strlen(DATE_FORMAT_RFC822), 1); ZVAL_STR(&const_RFC822_value, const_RFC822_value_str); zend_string *const_RFC822_name = zend_string_init_interned("RFC822", sizeof("RFC822") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_RFC822_name, &const_RFC822_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_RFC822_name, &const_RFC822_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(const_RFC822_name); zval const_RFC850_value; zend_string *const_RFC850_value_str = zend_string_init(DATE_FORMAT_RFC850, strlen(DATE_FORMAT_RFC850), 1); ZVAL_STR(&const_RFC850_value, const_RFC850_value_str); zend_string *const_RFC850_name = zend_string_init_interned("RFC850", sizeof("RFC850") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_RFC850_name, &const_RFC850_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_RFC850_name, &const_RFC850_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(const_RFC850_name); zval const_RFC1036_value; zend_string *const_RFC1036_value_str = zend_string_init(DATE_FORMAT_RFC1036, strlen(DATE_FORMAT_RFC1036), 1); ZVAL_STR(&const_RFC1036_value, const_RFC1036_value_str); zend_string *const_RFC1036_name = zend_string_init_interned("RFC1036", sizeof("RFC1036") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_RFC1036_name, &const_RFC1036_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_RFC1036_name, &const_RFC1036_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(const_RFC1036_name); zval const_RFC1123_value; zend_string *const_RFC1123_value_str = zend_string_init(DATE_FORMAT_RFC1123, strlen(DATE_FORMAT_RFC1123), 1); ZVAL_STR(&const_RFC1123_value, const_RFC1123_value_str); zend_string *const_RFC1123_name = zend_string_init_interned("RFC1123", sizeof("RFC1123") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_RFC1123_name, &const_RFC1123_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_RFC1123_name, &const_RFC1123_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(const_RFC1123_name); zval const_RFC7231_value; zend_string *const_RFC7231_value_str = zend_string_init(DATE_FORMAT_RFC7231, strlen(DATE_FORMAT_RFC7231), 1); ZVAL_STR(&const_RFC7231_value, const_RFC7231_value_str); zend_string *const_RFC7231_name = zend_string_init_interned("RFC7231", sizeof("RFC7231") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_RFC7231_name, &const_RFC7231_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_RFC7231_name, &const_RFC7231_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(const_RFC7231_name); zval const_RFC2822_value; zend_string *const_RFC2822_value_str = zend_string_init(DATE_FORMAT_RFC2822, strlen(DATE_FORMAT_RFC2822), 1); ZVAL_STR(&const_RFC2822_value, const_RFC2822_value_str); zend_string *const_RFC2822_name = zend_string_init_interned("RFC2822", sizeof("RFC2822") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_RFC2822_name, &const_RFC2822_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_RFC2822_name, &const_RFC2822_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(const_RFC2822_name); zval const_RFC3339_value; zend_string *const_RFC3339_value_str = zend_string_init(DATE_FORMAT_RFC3339, strlen(DATE_FORMAT_RFC3339), 1); ZVAL_STR(&const_RFC3339_value, const_RFC3339_value_str); zend_string *const_RFC3339_name = zend_string_init_interned("RFC3339", sizeof("RFC3339") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_RFC3339_name, &const_RFC3339_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_RFC3339_name, &const_RFC3339_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(const_RFC3339_name); zval const_RFC3339_EXTENDED_value; zend_string *const_RFC3339_EXTENDED_value_str = zend_string_init(DATE_FORMAT_RFC3339_EXTENDED, strlen(DATE_FORMAT_RFC3339_EXTENDED), 1); ZVAL_STR(&const_RFC3339_EXTENDED_value, const_RFC3339_EXTENDED_value_str); zend_string *const_RFC3339_EXTENDED_name = zend_string_init_interned("RFC3339_EXTENDED", sizeof("RFC3339_EXTENDED") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_RFC3339_EXTENDED_name, &const_RFC3339_EXTENDED_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_RFC3339_EXTENDED_name, &const_RFC3339_EXTENDED_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(const_RFC3339_EXTENDED_name); zval const_RSS_value; zend_string *const_RSS_value_str = zend_string_init(DATE_FORMAT_RFC1123, strlen(DATE_FORMAT_RFC1123), 1); ZVAL_STR(&const_RSS_value, const_RSS_value_str); zend_string *const_RSS_name = zend_string_init_interned("RSS", sizeof("RSS") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_RSS_name, &const_RSS_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_RSS_name, &const_RSS_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(const_RSS_name); zval const_W3C_value; zend_string *const_W3C_value_str = zend_string_init(DATE_FORMAT_RFC3339, strlen(DATE_FORMAT_RFC3339), 1); ZVAL_STR(&const_W3C_value, const_W3C_value_str); zend_string *const_W3C_name = zend_string_init_interned("W3C", sizeof("W3C") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_W3C_name, &const_W3C_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_W3C_name, &const_W3C_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(const_W3C_name); return class_entry; @@ -989,85 +989,85 @@ static zend_class_entry *register_class_DateTimeZone(void) zval const_AFRICA_value; ZVAL_LONG(&const_AFRICA_value, PHP_DATE_TIMEZONE_GROUP_AFRICA); zend_string *const_AFRICA_name = zend_string_init_interned("AFRICA", sizeof("AFRICA") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_AFRICA_name, &const_AFRICA_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_AFRICA_name, &const_AFRICA_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_AFRICA_name); zval const_AMERICA_value; ZVAL_LONG(&const_AMERICA_value, PHP_DATE_TIMEZONE_GROUP_AMERICA); zend_string *const_AMERICA_name = zend_string_init_interned("AMERICA", sizeof("AMERICA") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_AMERICA_name, &const_AMERICA_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_AMERICA_name, &const_AMERICA_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_AMERICA_name); zval const_ANTARCTICA_value; ZVAL_LONG(&const_ANTARCTICA_value, PHP_DATE_TIMEZONE_GROUP_ANTARCTICA); zend_string *const_ANTARCTICA_name = zend_string_init_interned("ANTARCTICA", sizeof("ANTARCTICA") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_ANTARCTICA_name, &const_ANTARCTICA_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_ANTARCTICA_name, &const_ANTARCTICA_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_ANTARCTICA_name); zval const_ARCTIC_value; ZVAL_LONG(&const_ARCTIC_value, PHP_DATE_TIMEZONE_GROUP_ARCTIC); zend_string *const_ARCTIC_name = zend_string_init_interned("ARCTIC", sizeof("ARCTIC") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_ARCTIC_name, &const_ARCTIC_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_ARCTIC_name, &const_ARCTIC_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_ARCTIC_name); zval const_ASIA_value; ZVAL_LONG(&const_ASIA_value, PHP_DATE_TIMEZONE_GROUP_ASIA); zend_string *const_ASIA_name = zend_string_init_interned("ASIA", sizeof("ASIA") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_ASIA_name, &const_ASIA_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_ASIA_name, &const_ASIA_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_ASIA_name); zval const_ATLANTIC_value; ZVAL_LONG(&const_ATLANTIC_value, PHP_DATE_TIMEZONE_GROUP_ATLANTIC); zend_string *const_ATLANTIC_name = zend_string_init_interned("ATLANTIC", sizeof("ATLANTIC") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_ATLANTIC_name, &const_ATLANTIC_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_ATLANTIC_name, &const_ATLANTIC_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_ATLANTIC_name); zval const_AUSTRALIA_value; ZVAL_LONG(&const_AUSTRALIA_value, PHP_DATE_TIMEZONE_GROUP_AUSTRALIA); zend_string *const_AUSTRALIA_name = zend_string_init_interned("AUSTRALIA", sizeof("AUSTRALIA") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_AUSTRALIA_name, &const_AUSTRALIA_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_AUSTRALIA_name, &const_AUSTRALIA_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_AUSTRALIA_name); zval const_EUROPE_value; ZVAL_LONG(&const_EUROPE_value, PHP_DATE_TIMEZONE_GROUP_EUROPE); zend_string *const_EUROPE_name = zend_string_init_interned("EUROPE", sizeof("EUROPE") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_EUROPE_name, &const_EUROPE_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_EUROPE_name, &const_EUROPE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_EUROPE_name); zval const_INDIAN_value; ZVAL_LONG(&const_INDIAN_value, PHP_DATE_TIMEZONE_GROUP_INDIAN); zend_string *const_INDIAN_name = zend_string_init_interned("INDIAN", sizeof("INDIAN") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_INDIAN_name, &const_INDIAN_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_INDIAN_name, &const_INDIAN_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_INDIAN_name); zval const_PACIFIC_value; ZVAL_LONG(&const_PACIFIC_value, PHP_DATE_TIMEZONE_GROUP_PACIFIC); zend_string *const_PACIFIC_name = zend_string_init_interned("PACIFIC", sizeof("PACIFIC") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_PACIFIC_name, &const_PACIFIC_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_PACIFIC_name, &const_PACIFIC_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_PACIFIC_name); zval const_UTC_value; ZVAL_LONG(&const_UTC_value, PHP_DATE_TIMEZONE_GROUP_UTC); zend_string *const_UTC_name = zend_string_init_interned("UTC", sizeof("UTC") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_UTC_name, &const_UTC_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_UTC_name, &const_UTC_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_UTC_name); zval const_ALL_value; ZVAL_LONG(&const_ALL_value, PHP_DATE_TIMEZONE_GROUP_ALL); zend_string *const_ALL_name = zend_string_init_interned("ALL", sizeof("ALL") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_ALL_name, &const_ALL_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_ALL_name, &const_ALL_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_ALL_name); zval const_ALL_WITH_BC_value; ZVAL_LONG(&const_ALL_WITH_BC_value, PHP_DATE_TIMEZONE_GROUP_ALL_W_BC); zend_string *const_ALL_WITH_BC_name = zend_string_init_interned("ALL_WITH_BC", sizeof("ALL_WITH_BC") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_ALL_WITH_BC_name, &const_ALL_WITH_BC_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_ALL_WITH_BC_name, &const_ALL_WITH_BC_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_ALL_WITH_BC_name); zval const_PER_COUNTRY_value; ZVAL_LONG(&const_PER_COUNTRY_value, PHP_DATE_TIMEZONE_PER_COUNTRY); zend_string *const_PER_COUNTRY_name = zend_string_init_interned("PER_COUNTRY", sizeof("PER_COUNTRY") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_PER_COUNTRY_name, &const_PER_COUNTRY_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_PER_COUNTRY_name, &const_PER_COUNTRY_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_PER_COUNTRY_name); return class_entry; @@ -1094,13 +1094,13 @@ static zend_class_entry *register_class_DatePeriod(zend_class_entry *class_entry zval const_EXCLUDE_START_DATE_value; ZVAL_LONG(&const_EXCLUDE_START_DATE_value, PHP_DATE_PERIOD_EXCLUDE_START_DATE); zend_string *const_EXCLUDE_START_DATE_name = zend_string_init_interned("EXCLUDE_START_DATE", sizeof("EXCLUDE_START_DATE") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_EXCLUDE_START_DATE_name, &const_EXCLUDE_START_DATE_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_EXCLUDE_START_DATE_name, &const_EXCLUDE_START_DATE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_EXCLUDE_START_DATE_name); zval const_INCLUDE_END_DATE_value; ZVAL_LONG(&const_INCLUDE_END_DATE_value, PHP_DATE_PERIOD_INCLUDE_END_DATE); zend_string *const_INCLUDE_END_DATE_name = zend_string_init_interned("INCLUDE_END_DATE", sizeof("INCLUDE_END_DATE") - 1, 1); - zend_declare_class_constant_ex(class_entry, const_INCLUDE_END_DATE_name, &const_INCLUDE_END_DATE_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_class_constant(class_entry, const_INCLUDE_END_DATE_name, &const_INCLUDE_END_DATE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zend_string_release(const_INCLUDE_END_DATE_name); zval property_start_default_value; From 114422f0330f0d04aad2c723b8632029ea268396 Mon Sep 17 00:00:00 2001 From: Jorg Sowa Date: Thu, 14 Mar 2024 22:06:47 +0100 Subject: [PATCH 6/8] Updated auto-generated date header from stub --- ext/date/php_date_arginfo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/date/php_date_arginfo.h b/ext/date/php_date_arginfo.h index 04aeb09758d40..11fe6f4bccdfc 100644 --- a/ext/date/php_date_arginfo.h +++ b/ext/date/php_date_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 199789cfbbb53ead5c5418ae30935ffdd7c9685f */ + * Stub hash: 41560e99d4ea9b1f160c13345727f6d193af5133 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_strtotime, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, datetime, IS_STRING, 0) From 9fbd3ff57ca2813427d3a6b0b75ca394019004a2 Mon Sep 17 00:00:00 2001 From: Jorg Sowa Date: Tue, 19 Mar 2024 08:08:02 +0100 Subject: [PATCH 7/8] Reverted PHPDoc squashing --- ext/date/php_date.stub.php | 48 ++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/ext/date/php_date.stub.php b/ext/date/php_date.stub.php index 68c70776210c2..2683b3bf55ec8 100644 --- a/ext/date/php_date.stub.php +++ b/ext/date/php_date.stub.php @@ -380,7 +380,9 @@ public static function getLastErrors(): array|false {} */ public function format(string $format): string {} - /** @tentative-return-type */ + /** + * @tentative-return-type + */ public function modify(string $modifier): DateTime|false {} /** @@ -389,7 +391,9 @@ public function modify(string $modifier): DateTime|false {} */ public function add(DateInterval $interval): DateTime {} - /** @tentative-return-type */ + /** + * @tentative-return-type + */ public function sub(DateInterval $interval): DateTime {} /** @@ -637,7 +641,9 @@ class DateInterval { public function __construct(string $duration) {} - /** @tentative-return-type */ + /** + * @tentative-return-type + */ public static function createFromDateString(string $datetime): DateInterval|false {} /** @@ -714,47 +720,65 @@ public static function __set_state(array $array): DatePeriod {} public function getIterator(): Iterator {} } -/** @strict-properties */ +/** + * @strict-properties + */ class DateError extends Error { } -/** @strict-properties */ +/** + * @strict-properties + */ class DateObjectError extends DateError { } -/** @strict-properties */ +/** + * @strict-properties + */ class DateRangeError extends DateError { } -/** @strict-properties */ +/** + * @strict-properties + */ class DateException extends Exception { } -/** @strict-properties */ +/** + * @strict-properties + */ class DateInvalidTimeZoneException extends DateException { } -/** @strict-properties */ +/** + * @strict-properties + */ class DateInvalidOperationException extends DateException { } -/** @strict-properties */ +/** + * @strict-properties + */ class DateMalformedStringException extends DateException { } -/** @strict-properties */ +/** + * @strict-properties + */ class DateMalformedIntervalStringException extends DateException { } -/** @strict-properties */ +/** + * @strict-properties + */ class DateMalformedPeriodStringException extends DateException { } From 0a3986a5c3d3215475c04bcf419c3a3b18e59651 Mon Sep 17 00:00:00 2001 From: Jorg Sowa Date: Tue, 19 Mar 2024 08:09:15 +0100 Subject: [PATCH 8/8] Updated date stub --- ext/date/php_date_arginfo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/date/php_date_arginfo.h b/ext/date/php_date_arginfo.h index 11fe6f4bccdfc..86e2321d63e3f 100644 --- a/ext/date/php_date_arginfo.h +++ b/ext/date/php_date_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 41560e99d4ea9b1f160c13345727f6d193af5133 */ + * Stub hash: c4d04a19ff61ab112d598d994b4c3ad499c2ba9f */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_strtotime, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, datetime, IS_STRING, 0)