From 11ce460fad44371b97dae4aeb438b3627f0836d5 Mon Sep 17 00:00:00 2001 From: Daniel Scherzer Date: Wed, 4 Sep 2024 14:18:51 -0700 Subject: [PATCH 1/6] Generated arginfo header files: use known strings for prop names when possible Instead of allocating, using, and then releasing a zend_string for every property name unconditionally, only do so when the minimum supported version of PHP does not have that string in its known strings (ZEND_KNOWN_STRINGS). If the string is already known, just use the known version directly. This is already done for some non-generated class registrations, e.g. in `zend_enum_register_props()`. --- Zend/zend_attributes_arginfo.h | 12 +- Zend/zend_exceptions_arginfo.h | 60 +++------- build/gen_stub.php | 148 +++++++++++++++++++++++- ext/bcmath/bcmath_arginfo.h | 4 +- ext/curl/curl_file_arginfo.h | 4 +- ext/dom/php_dom_arginfo.h | 32 ++--- ext/libxml/libxml_arginfo.h | 16 +-- ext/mysqli/mysqli_arginfo.h | 8 +- ext/pdo/pdo_arginfo.h | 4 +- ext/reflection/php_reflection_arginfo.h | 48 ++------ ext/soap/soap_arginfo.h | 8 +- ext/standard/dir_arginfo.h | 4 +- ext/tidy/tidy_arginfo.h | 20 +--- ext/tokenizer/tokenizer_arginfo.h | 4 +- ext/xmlreader/php_xmlreader_arginfo.h | 8 +- 15 files changed, 203 insertions(+), 177 deletions(-) diff --git a/Zend/zend_attributes_arginfo.h b/Zend/zend_attributes_arginfo.h index 817dacbd44d50..018caa47d0ac5 100644 --- a/Zend/zend_attributes_arginfo.h +++ b/Zend/zend_attributes_arginfo.h @@ -207,9 +207,7 @@ static zend_class_entry *register_class_SensitiveParameterValue(void) zval property_value_default_value; ZVAL_UNDEF(&property_value_default_value); - zend_string *property_value_name = zend_string_init("value", sizeof("value") - 1, 1); - zend_declare_typed_property(class_entry, property_value_name, &property_value_default_value, ZEND_ACC_PRIVATE|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ANY)); - zend_string_release(property_value_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_VALUE), &property_value_default_value, ZEND_ACC_PRIVATE|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ANY)); return class_entry; } @@ -240,15 +238,11 @@ static zend_class_entry *register_class_Deprecated(void) zval property_message_default_value; ZVAL_UNDEF(&property_message_default_value); - zend_string *property_message_name = zend_string_init("message", sizeof("message") - 1, 1); - zend_declare_typed_property(class_entry, property_message_name, &property_message_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL)); - zend_string_release(property_message_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_MESSAGE), &property_message_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL)); zval property_since_default_value; ZVAL_UNDEF(&property_since_default_value); - zend_string *property_since_name = zend_string_init("since", sizeof("since") - 1, 1); - zend_declare_typed_property(class_entry, property_since_name, &property_since_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL)); - zend_string_release(property_since_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_SINCE), &property_since_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL)); zend_string *attribute_name_Attribute_class_Deprecated_0 = zend_string_init_interned("Attribute", sizeof("Attribute") - 1, 1); zend_attribute *attribute_Attribute_class_Deprecated_0 = zend_add_class_attribute(class_entry, attribute_name_Attribute_class_Deprecated_0, 1); diff --git a/Zend/zend_exceptions_arginfo.h b/Zend/zend_exceptions_arginfo.h index 0519b61e3d978..cef37a1f0f0b9 100644 --- a/Zend/zend_exceptions_arginfo.h +++ b/Zend/zend_exceptions_arginfo.h @@ -163,46 +163,32 @@ static zend_class_entry *register_class_Exception(zend_class_entry *class_entry_ zval property_message_default_value; ZVAL_EMPTY_STRING(&property_message_default_value); - zend_string *property_message_name = zend_string_init("message", sizeof("message") - 1, 1); - zend_declare_typed_property(class_entry, property_message_name, &property_message_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0)); - zend_string_release(property_message_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_MESSAGE), &property_message_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0)); zval property_string_default_value; ZVAL_EMPTY_STRING(&property_string_default_value); - zend_string *property_string_name = zend_string_init("string", sizeof("string") - 1, 1); - zend_declare_typed_property(class_entry, property_string_name, &property_string_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_string_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_STRING), &property_string_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_code_default_value; ZVAL_LONG(&property_code_default_value, 0); - zend_string *property_code_name = zend_string_init("code", sizeof("code") - 1, 1); - zend_declare_typed_property(class_entry, property_code_name, &property_code_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0)); - zend_string_release(property_code_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_CODE), &property_code_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0)); zval property_file_default_value; ZVAL_EMPTY_STRING(&property_file_default_value); - zend_string *property_file_name = zend_string_init("file", sizeof("file") - 1, 1); - zend_declare_typed_property(class_entry, property_file_name, &property_file_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_file_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_FILE), &property_file_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_line_default_value; ZVAL_LONG(&property_line_default_value, 0); - zend_string *property_line_name = zend_string_init("line", sizeof("line") - 1, 1); - zend_declare_typed_property(class_entry, property_line_name, &property_line_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); - zend_string_release(property_line_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_LINE), &property_line_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zval property_trace_default_value; ZVAL_EMPTY_ARRAY(&property_trace_default_value); - zend_string *property_trace_name = zend_string_init("trace", sizeof("trace") - 1, 1); - zend_declare_typed_property(class_entry, property_trace_name, &property_trace_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ARRAY)); - zend_string_release(property_trace_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_TRACE), &property_trace_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ARRAY)); zval property_previous_default_value; ZVAL_NULL(&property_previous_default_value); - zend_string *property_previous_name = zend_string_init("previous", sizeof("previous") - 1, 1); zend_string *property_previous_class_Throwable = zend_string_init("Throwable", sizeof("Throwable")-1, 1); - zend_declare_typed_property(class_entry, property_previous_name, &property_previous_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_CLASS(property_previous_class_Throwable, 0, MAY_BE_NULL)); - zend_string_release(property_previous_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_PREVIOUS), &property_previous_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_CLASS(property_previous_class_Throwable, 0, MAY_BE_NULL)); return class_entry; } @@ -216,9 +202,7 @@ static zend_class_entry *register_class_ErrorException(zend_class_entry *class_e zval property_severity_default_value; ZVAL_LONG(&property_severity_default_value, E_ERROR); - zend_string *property_severity_name = zend_string_init("severity", sizeof("severity") - 1, 1); - zend_declare_typed_property(class_entry, property_severity_name, &property_severity_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); - zend_string_release(property_severity_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_SEVERITY), &property_severity_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); return class_entry; } @@ -233,46 +217,32 @@ static zend_class_entry *register_class_Error(zend_class_entry *class_entry_Thro zval property_message_default_value; ZVAL_EMPTY_STRING(&property_message_default_value); - zend_string *property_message_name = zend_string_init("message", sizeof("message") - 1, 1); - zend_declare_typed_property(class_entry, property_message_name, &property_message_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0)); - zend_string_release(property_message_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_MESSAGE), &property_message_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0)); zval property_string_default_value; ZVAL_EMPTY_STRING(&property_string_default_value); - zend_string *property_string_name = zend_string_init("string", sizeof("string") - 1, 1); - zend_declare_typed_property(class_entry, property_string_name, &property_string_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_string_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_STRING), &property_string_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_code_default_value; ZVAL_LONG(&property_code_default_value, 0); - zend_string *property_code_name = zend_string_init("code", sizeof("code") - 1, 1); - zend_declare_typed_property(class_entry, property_code_name, &property_code_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0)); - zend_string_release(property_code_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_CODE), &property_code_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0)); zval property_file_default_value; ZVAL_EMPTY_STRING(&property_file_default_value); - zend_string *property_file_name = zend_string_init("file", sizeof("file") - 1, 1); - zend_declare_typed_property(class_entry, property_file_name, &property_file_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_file_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_FILE), &property_file_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_line_default_value; ZVAL_UNDEF(&property_line_default_value); - zend_string *property_line_name = zend_string_init("line", sizeof("line") - 1, 1); - zend_declare_typed_property(class_entry, property_line_name, &property_line_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); - zend_string_release(property_line_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_LINE), &property_line_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zval property_trace_default_value; ZVAL_EMPTY_ARRAY(&property_trace_default_value); - zend_string *property_trace_name = zend_string_init("trace", sizeof("trace") - 1, 1); - zend_declare_typed_property(class_entry, property_trace_name, &property_trace_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ARRAY)); - zend_string_release(property_trace_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_TRACE), &property_trace_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ARRAY)); zval property_previous_default_value; ZVAL_NULL(&property_previous_default_value); - zend_string *property_previous_name = zend_string_init("previous", sizeof("previous") - 1, 1); zend_string *property_previous_class_Throwable = zend_string_init("Throwable", sizeof("Throwable")-1, 1); - zend_declare_typed_property(class_entry, property_previous_name, &property_previous_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_CLASS(property_previous_class_Throwable, 0, MAY_BE_NULL)); - zend_string_release(property_previous_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_PREVIOUS), &property_previous_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_CLASS(property_previous_class_Throwable, 0, MAY_BE_NULL)); return class_entry; } diff --git a/build/gen_stub.php b/build/gen_stub.php index 45641f4061b9c..ba43a721941b2 100755 --- a/build/gen_stub.php +++ b/build/gen_stub.php @@ -2918,6 +2918,100 @@ class PropertyInfo extends VariableLike public bool $isDocReadonly; public bool $isVirtual; + // Map possible variable names to the known string constant, see + // ZEND_KNOWN_STRINGS + private const PHP_80_KNOWN = [ + "file" => "ZEND_STR_FILE", + "line" => "ZEND_STR_LINE", + "function" => "ZEND_STR_FUNCTION", + "class" => "ZEND_STR_CLASS", + "object" => "ZEND_STR_OBJECT", + "type" => "ZEND_STR_TYPE", + // ZEND_STR_OBJECT_OPERATOR and ZEND_STR_PAAMAYIM_NEKUDOTAYIM are + // not valid variable names + "args" => "ZEND_STR_ARGS", + "unknown" => "ZEND_STR_UNKNOWN", + "eval" => "ZEND_STR_EVAL", + "include" => "ZEND_STR_INCLUDE", + "require" => "ZEND_STR_REQUIRE", + "include_once" => "ZEND_STR_INCLUDE_ONCE", + "require_once" => "ZEND_STR_REQUIRE_ONCE", + "scalar" => "ZEND_STR_SCALAR", + "error_reporting" => "ZEND_STR_ERROR_REPORTING", + "static" => "ZEND_STR_STATIC", + // ZEND_STR_THIS cannot be used since $this cannot be reassigned + "value" => "ZEND_STR_VALUE", + "key" => "ZEND_STR_KEY", + "__invoke" => "ZEND_STR_MAGIC_INVOKE", + "previous" => "ZEND_STR_PREVIOUS", + "code" => "ZEND_STR_CODE", + "message" => "ZEND_STR_MESSAGE", + "severity" => "ZEND_STR_SEVERITY", + "string" => "ZEND_STR_STRING", + "trace" => "ZEND_STR_TRACE", + "scheme" => "ZEND_STR_SCHEME", + "host" => "ZEND_STR_HOST", + "port" => "ZEND_STR_PORT", + "user" => "ZEND_STR_USER", + "pass" => "ZEND_STR_PASS", + "path" => "ZEND_STR_PATH", + "query" => "ZEND_STR_QUERY", + "fragment" => "ZEND_STR_FRAGMENT", + "NULL" => "ZEND_STR_NULL", + "boolean" => "ZEND_STR_BOOLEAN", + "integer" => "ZEND_STR_INTEGER", + "double" => "ZEND_STR_DOUBLE", + "array" => "ZEND_STR_ARRAY", + "resource" => "ZEND_STR_RESOURCE", + // ZEND_STR_CLOSED_RESOURCE has a space in it + "name" => "ZEND_STR_NAME", + // ZEND_STR_ARGV and ZEND_STR_ARGC are superglobals that wouldn't be + // variable names + "Array" => "ZEND_STR_ARRAY_CAPITALIZED", + "bool" => "ZEND_STR_BOOL", + "int" => "ZEND_STR_INT", + "float" => "ZEND_STR_FLOAT", + "callable" => "ZEND_STR_CALLABLE", + "iterable" => "ZEND_STR_ITERABLE", + "void" => "ZEND_STR_VOID", + "false" => "ZEND_STR_FALSE", + "null" => "ZEND_STR_NULL_LOWERCASE", + "mixed" => "ZEND_STR_MIXED", + ]; + + // NEW in 8.1 + private const PHP_81_KNOWN = [ + "Unknown" => "ZEND_STR_UNKNOWN_CAPITALIZED", + "never" => "ZEND_STR_NEVER", + "__sleep" => "ZEND_STR_SLEEP", + "__wakeup" => "ZEND_STR_WAKEUP", + "cases" => "ZEND_STR_CASES", + "from" => "ZEND_STR_FROM", + "tryFrom" => "ZEND_STR_TRYFROM", + "tryfrom" => "ZEND_STR_TRYFROM_LOWERCASE", + // Omit ZEND_STR_AUTOGLOBAL_(SERVER|ENV|REQUEST) + ]; + + // NEW in 8.2 + private const PHP_82_KNOWN = [ + "true" => "ZEND_STR_TRUE", + "Traversable" => "ZEND_STR_TRAVERSABLE", + "count" => "ZEND_STR_COUNT", + "SensitiveParameter" => "ZEND_STR_SENSITIVEPARAMETER", + ]; + + // Only new string in 8.3 is ZEND_STR_CONST_EXPR_PLACEHOLDER which is + // not a valid variable name ("[constant expression]") + + // NEW in 8.4 + private const PHP_84_KNOWN = [ + "exit" => "ZEND_STR_EXIT", + "Deprecated" => "ZEND_STR_DEPRECATED", + "since" => "ZEND_STR_SINCE", + "get" => "ZEND_STR_GET", + "set" => "ZEND_STR_SET", + ]; + /** * @var AttributeInfo[] $attributes */ @@ -3003,8 +3097,8 @@ public function getDeclaration(array $allConstInfos): string { $code .= $defaultValue->initializeZval($zvalName); } - $code .= "\tzend_string *property_{$propertyName}_name = zend_string_init(\"$propertyName\", sizeof(\"$propertyName\") - 1, 1);\n"; - $nameCode = "property_{$propertyName}_name"; + [ $stringInit, $nameCode, $stringRelease ] = $this->getString( $propertyName ); + $code .= $stringInit; if ($this->exposedDocComment) { $commentCode = "property_{$propertyName}_comment"; @@ -3035,11 +3129,59 @@ public function getDeclaration(array $allConstInfos): string { ); $code .= implode("", $flagsCode); - $code .= "\tzend_string_release(property_{$propertyName}_name);\n"; + $code .= $stringRelease; return $code; } + /** + * Get an array of three strings: + * - declaration of zend_string, if needed, or empty otherwise + * - usage of that zend_string, or usage with ZSTR_KNOWN() + * - freeing the zend_string, if needed + * + * @param string $propName + * @return string[] + */ + private function getString( string $propName ): array { + // Generally strings will not be known + $nameCode = "property_{$propName}_name"; + $result = [ + "\tzend_string *$nameCode = zend_string_init(\"$propName\", sizeof(\"$propName\") - 1, 1);\n", + $nameCode, + "\tzend_string_release($nameCode);\n" + ]; + $minPhp = $phpVersionIdMinimumCompatibility ?? PHP_84_VERSION_ID; + if ( $minPhp < PHP_80_VERSION_ID ) { + // No known strings in 7.0 + return $result; + } + $include = self::PHP_80_KNOWN; + switch ( $minPhp ) { + case PHP_84_VERSION_ID: + $include = array_merge( $include, self::PHP_84_KNOWN ); + // Intentional fall through + + case PHP_83_VERSION_ID: + case PHP_82_VERSION_ID: + $include = array_merge( $include, self::PHP_82_KNOWN ); + // Intentional fall through + + case PHP_81_VERSION_ID: + $include = array_merge( $include, self::PHP_81_KNOWN ); + break; + } + if ( array_key_exists( $propName, $include ) ) { + $knownStr = $include[$propName]; + return [ + '', + "ZSTR_KNOWN($knownStr)", + '', + ]; + } + return $result; + } + /** * @return array */ diff --git a/ext/bcmath/bcmath_arginfo.h b/ext/bcmath/bcmath_arginfo.h index 12a0fa6800e0c..fac7669ad0929 100644 --- a/ext/bcmath/bcmath_arginfo.h +++ b/ext/bcmath/bcmath_arginfo.h @@ -189,9 +189,7 @@ static zend_class_entry *register_class_BcMath_Number(zend_class_entry *class_en zval property_value_default_value; ZVAL_UNDEF(&property_value_default_value); - zend_string *property_value_name = zend_string_init("value", sizeof("value") - 1, 1); - zend_declare_typed_property(class_entry, property_value_name, &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_value_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_VALUE), &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_scale_default_value; ZVAL_UNDEF(&property_scale_default_value); diff --git a/ext/curl/curl_file_arginfo.h b/ext/curl/curl_file_arginfo.h index bbf6900546a15..e409c6e772513 100644 --- a/ext/curl/curl_file_arginfo.h +++ b/ext/curl/curl_file_arginfo.h @@ -60,9 +60,7 @@ static zend_class_entry *register_class_CURLFile(void) zval property_name_default_value; ZVAL_EMPTY_STRING(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_mime_default_value; ZVAL_EMPTY_STRING(&property_mime_default_value); diff --git a/ext/dom/php_dom_arginfo.h b/ext/dom/php_dom_arginfo.h index e1f230ccbcf03..ea7362b0b83f7 100644 --- a/ext/dom/php_dom_arginfo.h +++ b/ext/dom/php_dom_arginfo.h @@ -1874,9 +1874,7 @@ static zend_class_entry *register_class_DOMDocumentType(zend_class_entry *class_ zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_entities_default_value; ZVAL_UNDEF(&property_entities_default_value); @@ -2293,9 +2291,7 @@ static zend_class_entry *register_class_DOMAttr(zend_class_entry *class_entry_DO zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_specified_default_value; ZVAL_UNDEF(&property_specified_default_value); @@ -2305,9 +2301,7 @@ static zend_class_entry *register_class_DOMAttr(zend_class_entry *class_entry_DO zval property_value_default_value; ZVAL_UNDEF(&property_value_default_value); - zend_string *property_value_name = zend_string_init("value", sizeof("value") - 1, 1); - zend_declare_typed_property(class_entry, property_value_name, &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_value_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_VALUE), &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_ownerElement_default_value; ZVAL_UNDEF(&property_ownerElement_default_value); @@ -2552,9 +2546,7 @@ static zend_class_entry *register_class_DOMException(zend_class_entry *class_ent zval property_code_default_value; ZVAL_LONG(&property_code_default_value, 0); - zend_string *property_code_name = zend_string_init("code", sizeof("code") - 1, 1); - zend_declare_typed_property(class_entry, property_code_name, &property_code_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0)); - zend_string_release(property_code_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_CODE), &property_code_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0)); return class_entry; } @@ -3124,15 +3116,11 @@ static zend_class_entry *register_class_Dom_Attr(zend_class_entry *class_entry_D zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_value_default_value; ZVAL_UNDEF(&property_value_default_value); - zend_string *property_value_name = zend_string_init("value", sizeof("value") - 1, 1); - zend_declare_typed_property(class_entry, property_value_name, &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_value_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_VALUE), &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_ownerElement_default_value; ZVAL_UNDEF(&property_ownerElement_default_value); @@ -3249,9 +3237,7 @@ static zend_class_entry *register_class_Dom_DocumentType(zend_class_entry *class zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_entities_default_value; ZVAL_UNDEF(&property_entities_default_value); @@ -3541,9 +3527,7 @@ static zend_class_entry *register_class_Dom_TokenList(zend_class_entry *class_en zval property_value_default_value; ZVAL_UNDEF(&property_value_default_value); - zend_string *property_value_name = zend_string_init("value", sizeof("value") - 1, 1); - zend_declare_typed_property(class_entry, property_value_name, &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_value_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_VALUE), &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); return class_entry; } diff --git a/ext/libxml/libxml_arginfo.h b/ext/libxml/libxml_arginfo.h index 3f952f1abc123..86336d09c7d1b 100644 --- a/ext/libxml/libxml_arginfo.h +++ b/ext/libxml/libxml_arginfo.h @@ -115,9 +115,7 @@ static zend_class_entry *register_class_LibXMLError(void) zval property_code_default_value; ZVAL_UNDEF(&property_code_default_value); - zend_string *property_code_name = zend_string_init("code", sizeof("code") - 1, 1); - zend_declare_typed_property(class_entry, property_code_name, &property_code_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); - zend_string_release(property_code_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_CODE), &property_code_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zval property_column_default_value; ZVAL_UNDEF(&property_column_default_value); @@ -127,21 +125,15 @@ static zend_class_entry *register_class_LibXMLError(void) zval property_message_default_value; ZVAL_UNDEF(&property_message_default_value); - zend_string *property_message_name = zend_string_init("message", sizeof("message") - 1, 1); - zend_declare_typed_property(class_entry, property_message_name, &property_message_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_message_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_MESSAGE), &property_message_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_file_default_value; ZVAL_UNDEF(&property_file_default_value); - zend_string *property_file_name = zend_string_init("file", sizeof("file") - 1, 1); - zend_declare_typed_property(class_entry, property_file_name, &property_file_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_file_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_FILE), &property_file_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_line_default_value; ZVAL_UNDEF(&property_line_default_value); - zend_string *property_line_name = zend_string_init("line", sizeof("line") - 1, 1); - zend_declare_typed_property(class_entry, property_line_name, &property_line_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); - zend_string_release(property_line_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_LINE), &property_line_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); return class_entry; } diff --git a/ext/mysqli/mysqli_arginfo.h b/ext/mysqli/mysqli_arginfo.h index e45c3550a6c53..4e624d623d807 100644 --- a/ext/mysqli/mysqli_arginfo.h +++ b/ext/mysqli/mysqli_arginfo.h @@ -1444,9 +1444,7 @@ static zend_class_entry *register_class_mysqli_result(zend_class_entry *class_en zval property_type_default_value; ZVAL_UNDEF(&property_type_default_value); - zend_string *property_type_name = zend_string_init("type", sizeof("type") - 1, 1); - zend_declare_typed_property(class_entry, property_type_name, &property_type_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); - zend_string_release(property_type_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_TYPE), &property_type_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); return class_entry; } @@ -1530,9 +1528,7 @@ static zend_class_entry *register_class_mysqli_warning(void) zval property_message_default_value; ZVAL_UNDEF(&property_message_default_value); - zend_string *property_message_name = zend_string_init("message", sizeof("message") - 1, 1); - zend_declare_typed_property(class_entry, property_message_name, &property_message_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_message_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_MESSAGE), &property_message_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_sqlstate_default_value; ZVAL_UNDEF(&property_sqlstate_default_value); diff --git a/ext/pdo/pdo_arginfo.h b/ext/pdo/pdo_arginfo.h index ed904d2b33ce9..d2df2f0b0eb23 100644 --- a/ext/pdo/pdo_arginfo.h +++ b/ext/pdo/pdo_arginfo.h @@ -20,9 +20,7 @@ static zend_class_entry *register_class_PDOException(zend_class_entry *class_ent zval property_code_default_value; ZVAL_LONG(&property_code_default_value, 0); - zend_string *property_code_name = zend_string_init("code", sizeof("code") - 1, 1); - zend_declare_typed_property(class_entry, property_code_name, &property_code_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0)); - zend_string_release(property_code_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_CODE), &property_code_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_NONE(0)); zval property_errorInfo_default_value; ZVAL_NULL(&property_errorInfo_default_value); diff --git a/ext/reflection/php_reflection_arginfo.h b/ext/reflection/php_reflection_arginfo.h index f68542f745e98..089f0f8540a4c 100644 --- a/ext/reflection/php_reflection_arginfo.h +++ b/ext/reflection/php_reflection_arginfo.h @@ -1359,9 +1359,7 @@ static zend_class_entry *register_class_ReflectionFunctionAbstract(zend_class_en zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); return class_entry; } @@ -1450,9 +1448,7 @@ static zend_class_entry *register_class_ReflectionMethod(zend_class_entry *class zval property_class_default_value; ZVAL_UNDEF(&property_class_default_value); - zend_string *property_class_name = zend_string_init("class", sizeof("class") - 1, 1); - zend_declare_typed_property(class_entry, property_class_name, &property_class_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_class_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_CLASS), &property_class_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); return class_entry; } @@ -1503,9 +1499,7 @@ static zend_class_entry *register_class_ReflectionClass(zend_class_entry *class_ zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); return class_entry; } @@ -1595,15 +1589,11 @@ static zend_class_entry *register_class_ReflectionProperty(zend_class_entry *cla zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_class_default_value; ZVAL_UNDEF(&property_class_default_value); - zend_string *property_class_name = zend_string_init("class", sizeof("class") - 1, 1); - zend_declare_typed_property(class_entry, property_class_name, &property_class_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_class_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_CLASS), &property_class_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); return class_entry; } @@ -1642,15 +1632,11 @@ static zend_class_entry *register_class_ReflectionClassConstant(zend_class_entry zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_class_default_value; ZVAL_UNDEF(&property_class_default_value); - zend_string *property_class_name = zend_string_init("class", sizeof("class") - 1, 1); - zend_declare_typed_property(class_entry, property_class_name, &property_class_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_class_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_CLASS), &property_class_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); return class_entry; } @@ -1665,9 +1651,7 @@ static zend_class_entry *register_class_ReflectionParameter(zend_class_entry *cl zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_attribute *attribute_Deprecated_func_getclass_0 = zend_add_function_attribute(zend_hash_str_find_ptr(&class_entry->function_table, "getclass", sizeof("getclass") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); @@ -1760,9 +1744,7 @@ static zend_class_entry *register_class_ReflectionExtension(zend_class_entry *cl zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); return class_entry; } @@ -1777,9 +1759,7 @@ static zend_class_entry *register_class_ReflectionZendExtension(zend_class_entry zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); return class_entry; } @@ -1810,9 +1790,7 @@ static zend_class_entry *register_class_ReflectionAttribute(zend_class_entry *cl zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); return class_entry; } @@ -1867,9 +1845,7 @@ static zend_class_entry *register_class_ReflectionConstant(zend_class_entry *cla zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); return class_entry; } diff --git a/ext/soap/soap_arginfo.h b/ext/soap/soap_arginfo.h index ca0d2d9644e84..9ec093c5c9cd2 100644 --- a/ext/soap/soap_arginfo.h +++ b/ext/soap/soap_arginfo.h @@ -372,9 +372,7 @@ static zend_class_entry *register_class_SoapHeader(void) zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_data_default_value; ZVAL_NULL(&property_data_default_value); @@ -545,9 +543,7 @@ static zend_class_entry *register_class_SoapClient(void) zval property_trace_default_value; ZVAL_FALSE(&property_trace_default_value); - zend_string *property_trace_name = zend_string_init("trace", sizeof("trace") - 1, 1); - zend_declare_typed_property(class_entry, property_trace_name, &property_trace_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); - zend_string_release(property_trace_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_TRACE), &property_trace_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); zval property_compression_default_value; ZVAL_NULL(&property_compression_default_value); diff --git a/ext/standard/dir_arginfo.h b/ext/standard/dir_arginfo.h index 47ab180ed7b17..8440c154e60b9 100644 --- a/ext/standard/dir_arginfo.h +++ b/ext/standard/dir_arginfo.h @@ -62,9 +62,7 @@ static zend_class_entry *register_class_Directory(void) zval property_path_default_value; ZVAL_UNDEF(&property_path_default_value); - zend_string *property_path_name = zend_string_init("path", sizeof("path") - 1, 1); - zend_declare_typed_property(class_entry, property_path_name, &property_path_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_path_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_PATH), &property_path_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_handle_default_value; ZVAL_UNDEF(&property_handle_default_value); diff --git a/ext/tidy/tidy_arginfo.h b/ext/tidy/tidy_arginfo.h index 56c0b78c32e47..b7dae788ef316 100644 --- a/ext/tidy/tidy_arginfo.h +++ b/ext/tidy/tidy_arginfo.h @@ -536,9 +536,7 @@ static zend_class_entry *register_class_tidy(void) zval property_value_default_value; ZVAL_NULL(&property_value_default_value); - zend_string *property_value_name = zend_string_init("value", sizeof("value") - 1, 1); - zend_declare_typed_property(class_entry, property_value_name, &property_value_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL)); - zend_string_release(property_value_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_VALUE), &property_value_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL)); return class_entry; } @@ -552,27 +550,19 @@ static zend_class_entry *register_class_tidyNode(void) zval property_value_default_value; ZVAL_UNDEF(&property_value_default_value); - zend_string *property_value_name = zend_string_init("value", sizeof("value") - 1, 1); - zend_declare_typed_property(class_entry, property_value_name, &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_value_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_VALUE), &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_type_default_value; ZVAL_UNDEF(&property_type_default_value); - zend_string *property_type_name = zend_string_init("type", sizeof("type") - 1, 1); - zend_declare_typed_property(class_entry, property_type_name, &property_type_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); - zend_string_release(property_type_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_TYPE), &property_type_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zval property_line_default_value; ZVAL_UNDEF(&property_line_default_value); - zend_string *property_line_name = zend_string_init("line", sizeof("line") - 1, 1); - zend_declare_typed_property(class_entry, property_line_name, &property_line_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); - zend_string_release(property_line_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_LINE), &property_line_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zval property_column_default_value; ZVAL_UNDEF(&property_column_default_value); diff --git a/ext/tokenizer/tokenizer_arginfo.h b/ext/tokenizer/tokenizer_arginfo.h index 04b7406596130..b98a5655b6c74 100644 --- a/ext/tokenizer/tokenizer_arginfo.h +++ b/ext/tokenizer/tokenizer_arginfo.h @@ -84,9 +84,7 @@ static zend_class_entry *register_class_PhpToken(zend_class_entry *class_entry_S zval property_line_default_value; ZVAL_UNDEF(&property_line_default_value); - zend_string *property_line_name = zend_string_init("line", sizeof("line") - 1, 1); - zend_declare_typed_property(class_entry, property_line_name, &property_line_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); - zend_string_release(property_line_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_LINE), &property_line_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); zval property_pos_default_value; ZVAL_UNDEF(&property_pos_default_value); diff --git a/ext/xmlreader/php_xmlreader_arginfo.h b/ext/xmlreader/php_xmlreader_arginfo.h index 78e7c2dda44c2..dd5ca550f606d 100644 --- a/ext/xmlreader/php_xmlreader_arginfo.h +++ b/ext/xmlreader/php_xmlreader_arginfo.h @@ -360,9 +360,7 @@ static zend_class_entry *register_class_XMLReader(void) zval property_name_default_value; ZVAL_UNDEF(&property_name_default_value); - zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_name_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_NAME), &property_name_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_namespaceURI_default_value; ZVAL_UNDEF(&property_namespaceURI_default_value); @@ -384,9 +382,7 @@ static zend_class_entry *register_class_XMLReader(void) zval property_value_default_value; ZVAL_UNDEF(&property_value_default_value); - zend_string *property_value_name = zend_string_init("value", sizeof("value") - 1, 1); - zend_declare_typed_property(class_entry, property_value_name, &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); - zend_string_release(property_value_name); + zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_VALUE), &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_VIRTUAL, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zval property_xmlLang_default_value; ZVAL_UNDEF(&property_xmlLang_default_value); From 0a146f0189585589836caffd59ecc14ab280fc88 Mon Sep 17 00:00:00 2001 From: Daniel Scherzer Date: Thu, 5 Sep 2024 13:48:43 -0700 Subject: [PATCH 2/6] zend_string.h: add a note about updating known strings --- Zend/zend_string.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Zend/zend_string.h b/Zend/zend_string.h index 93b9207a80059..88263d5d7a5d3 100644 --- a/Zend/zend_string.h +++ b/Zend/zend_string.h @@ -560,6 +560,8 @@ EMPTY_SWITCH_DEFAULT_CASE() #endif } +// When adding a new string here, please also update build/gen_stub.php to the +// known strings to be used in property registration; see gh-15751 #define ZEND_KNOWN_STRINGS(_) \ _(ZEND_STR_FILE, "file") \ _(ZEND_STR_LINE, "line") \ From 78393d6aa0d15afd2a1c74aab7c28bcfcfeae8aa Mon Sep 17 00:00:00 2001 From: Daniel Scherzer Date: Tue, 10 Sep 2024 14:51:08 -0700 Subject: [PATCH 3/6] Update for `ZEND_STR_DEPRECATED_CAPITALIZED` renaming --- build/gen_stub.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/gen_stub.php b/build/gen_stub.php index ba43a721941b2..a11241fe6f50c 100755 --- a/build/gen_stub.php +++ b/build/gen_stub.php @@ -3006,7 +3006,7 @@ class PropertyInfo extends VariableLike // NEW in 8.4 private const PHP_84_KNOWN = [ "exit" => "ZEND_STR_EXIT", - "Deprecated" => "ZEND_STR_DEPRECATED", + "Deprecated" => "ZEND_STR_DEPRECATED_CAPITALIZED", "since" => "ZEND_STR_SINCE", "get" => "ZEND_STR_GET", "set" => "ZEND_STR_SET", From 8a119da602b3b8c5c7ba2e350eedc24e924c322e Mon Sep 17 00:00:00 2001 From: Daniel Scherzer Date: Sat, 28 Sep 2024 13:04:45 -0700 Subject: [PATCH 4/6] gen_stub: improve a bit Drop spaces from brackets, don't hard code latest version --- build/gen_stub.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build/gen_stub.php b/build/gen_stub.php index a11241fe6f50c..fac6c95c0ab65 100755 --- a/build/gen_stub.php +++ b/build/gen_stub.php @@ -3097,7 +3097,7 @@ public function getDeclaration(array $allConstInfos): string { $code .= $defaultValue->initializeZval($zvalName); } - [ $stringInit, $nameCode, $stringRelease ] = $this->getString( $propertyName ); + [$stringInit, $nameCode, $stringRelease] = $this->getString( $propertyName ); $code .= $stringInit; if ($this->exposedDocComment) { @@ -3151,7 +3151,8 @@ private function getString( string $propName ): array { $nameCode, "\tzend_string_release($nameCode);\n" ]; - $minPhp = $phpVersionIdMinimumCompatibility ?? PHP_84_VERSION_ID; + // If not set, use the current latest version + $minPhp = $phpVersionIdMinimumCompatibility ?? end( ALL_PHP_VERSION_IDS ); if ( $minPhp < PHP_80_VERSION_ID ) { // No known strings in 7.0 return $result; From d3ce1b64e1428b5fbbcd125a4c1f2fda42fb036e Mon Sep 17 00:00:00 2001 From: Daniel Scherzer Date: Sat, 28 Sep 2024 13:27:33 -0700 Subject: [PATCH 5/6] Fix end() on constant --- build/gen_stub.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/gen_stub.php b/build/gen_stub.php index fac6c95c0ab65..9dea6a0ea5567 100755 --- a/build/gen_stub.php +++ b/build/gen_stub.php @@ -3152,7 +3152,8 @@ private function getString( string $propName ): array { "\tzend_string_release($nameCode);\n" ]; // If not set, use the current latest version - $minPhp = $phpVersionIdMinimumCompatibility ?? end( ALL_PHP_VERSION_IDS ); + $allVersions = ALL_PHP_VERSION_IDS; + $minPhp = $phpVersionIdMinimumCompatibility ?? end( $allVersions ); if ( $minPhp < PHP_80_VERSION_ID ) { // No known strings in 7.0 return $result; From 7bc8df41de499f6f1a86e0cc3694dc788662ebab Mon Sep 17 00:00:00 2001 From: Daniel Scherzer Date: Sat, 28 Sep 2024 14:11:30 -0700 Subject: [PATCH 6/6] More whitespaces fixes --- build/gen_stub.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/build/gen_stub.php b/build/gen_stub.php index 9dea6a0ea5567..bf4f66f7e9908 100755 --- a/build/gen_stub.php +++ b/build/gen_stub.php @@ -3097,7 +3097,7 @@ public function getDeclaration(array $allConstInfos): string { $code .= $defaultValue->initializeZval($zvalName); } - [$stringInit, $nameCode, $stringRelease] = $this->getString( $propertyName ); + [$stringInit, $nameCode, $stringRelease] = $this->getString($propertyName); $code .= $stringInit; if ($this->exposedDocComment) { @@ -3143,7 +3143,7 @@ public function getDeclaration(array $allConstInfos): string { * @param string $propName * @return string[] */ - private function getString( string $propName ): array { + private function getString(string $propName): array { // Generally strings will not be known $nameCode = "property_{$propName}_name"; $result = [ @@ -3153,27 +3153,27 @@ private function getString( string $propName ): array { ]; // If not set, use the current latest version $allVersions = ALL_PHP_VERSION_IDS; - $minPhp = $phpVersionIdMinimumCompatibility ?? end( $allVersions ); - if ( $minPhp < PHP_80_VERSION_ID ) { + $minPhp = $phpVersionIdMinimumCompatibility ?? end($allVersions); + if ($minPhp < PHP_80_VERSION_ID) { // No known strings in 7.0 return $result; } $include = self::PHP_80_KNOWN; - switch ( $minPhp ) { + switch ($minPhp) { case PHP_84_VERSION_ID: - $include = array_merge( $include, self::PHP_84_KNOWN ); + $include = array_merge($include, self::PHP_84_KNOWN); // Intentional fall through case PHP_83_VERSION_ID: case PHP_82_VERSION_ID: - $include = array_merge( $include, self::PHP_82_KNOWN ); + $include = array_merge($include, self::PHP_82_KNOWN); // Intentional fall through case PHP_81_VERSION_ID: - $include = array_merge( $include, self::PHP_81_KNOWN ); + $include = array_merge($include, self::PHP_81_KNOWN); break; } - if ( array_key_exists( $propName, $include ) ) { + if (array_key_exists($propName,$include)) { $knownStr = $include[$propName]; return [ '',