Skip to content

Commit 7b707fa

Browse files
committed
Preserve zend_internal_attribute_register as is for internal API BC
Signed-off-by: Bob Weinand <bobwei9@hotmail.com>
1 parent 2231393 commit 7b707fa

File tree

6 files changed

+20
-14
lines changed

6 files changed

+20
-14
lines changed

UPGRADING.INTERNALS

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,6 @@ PHP 8.2 INTERNALS UPGRADE NOTES
3939
- zend_object_do_operation_t
4040
* Added a new zero_position argument to php_stream_fopen_from_fd_rel to reflect
4141
if this a newly created file so the current file offset needs not to be checked.
42-
* zend_internal_attribute_register() no longer takes a flags argument nor
43-
registers the attribute class directly. Instead specify #[Attribute] with the
44-
appropriate target flags in the .stub.php file.
4542

4643
========================
4744
2. Build system changes

Zend/zend_attributes.c

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ static void free_internal_attribute(zval *v)
317317
pefree(Z_PTR_P(v), 1);
318318
}
319319

320-
ZEND_API zend_internal_attribute *zend_internal_attribute_register(zend_class_entry *ce)
320+
ZEND_API zend_internal_attribute *zend_mark_internal_attribute(zend_class_entry *ce)
321321
{
322322
zend_internal_attribute *internal_attr;
323323
zend_attribute *attr;
@@ -344,6 +344,14 @@ ZEND_API zend_internal_attribute *zend_internal_attribute_register(zend_class_en
344344
zend_error_noreturn(E_ERROR, "Classes must be first marked as attribute before being able to be registered as internal attribute class");
345345
}
346346

347+
ZEND_API zend_internal_attribute *zend_internal_attribute_register(zend_class_entry *ce, uint32_t flags)
348+
{
349+
zend_attribute *attr = zend_add_class_attribute(ce, zend_ce_attribute->name, 1);
350+
ZVAL_LONG(&attr->args[0].value, flags);
351+
352+
return zend_mark_internal_attribute(ce);
353+
}
354+
347355
ZEND_API zend_internal_attribute *zend_internal_attribute_get(zend_string *lcname)
348356
{
349357
return zend_hash_find_ptr(&internal_attributes, lcname);
@@ -356,23 +364,23 @@ void zend_register_attribute_ce(void)
356364
zend_hash_init(&internal_attributes, 8, NULL, free_internal_attribute, 1);
357365

358366
zend_ce_attribute = register_class_Attribute();
359-
attr = zend_internal_attribute_register(zend_ce_attribute);
367+
attr = zend_mark_internal_attribute(zend_ce_attribute);
360368
attr->validator = validate_attribute;
361369

362370
zend_ce_return_type_will_change_attribute = register_class_ReturnTypeWillChange();
363-
zend_internal_attribute_register(zend_ce_return_type_will_change_attribute);
371+
zend_mark_internal_attribute(zend_ce_return_type_will_change_attribute);
364372

365373
zend_ce_allow_dynamic_properties = register_class_AllowDynamicProperties();
366-
attr = zend_internal_attribute_register(zend_ce_allow_dynamic_properties);
374+
attr = zend_mark_internal_attribute(zend_ce_allow_dynamic_properties);
367375
attr->validator = validate_allow_dynamic_properties;
368376

369377
zend_ce_sensitive_parameter = register_class_SensitiveParameter();
370-
zend_internal_attribute_register(zend_ce_sensitive_parameter);
378+
zend_mark_internal_attribute(zend_ce_sensitive_parameter);
371379

372380
memcpy(&attributes_object_handlers_sensitive_parameter_value, &std_object_handlers, sizeof(zend_object_handlers));
373381
attributes_object_handlers_sensitive_parameter_value.get_properties_for = attributes_sensitive_parameter_value_get_properties_for;
374382

375-
/* This is not an actual attribute, thus the zend_internal_attribute_register() call is missing. */
383+
/* This is not an actual attribute, thus the zend_mark_internal_attribute() call is missing. */
376384
zend_ce_sensitive_parameter_value = register_class_SensitiveParameterValue();
377385
zend_ce_sensitive_parameter_value->create_object = attributes_sensitive_parameter_value_new;
378386
}

Zend/zend_attributes.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ ZEND_API zend_result zend_get_attribute_value(zval *ret, zend_attribute *attr, u
7777
ZEND_API zend_string *zend_get_attribute_target_names(uint32_t targets);
7878
ZEND_API bool zend_is_attribute_repeated(HashTable *attributes, zend_attribute *attr);
7979

80-
ZEND_API zend_internal_attribute *zend_internal_attribute_register(zend_class_entry *ce);
80+
ZEND_API zend_internal_attribute *zend_mark_internal_attribute(zend_class_entry *ce);
81+
ZEND_API zend_internal_attribute *zend_internal_attribute_register(zend_class_entry *ce, uint32_t flags);
8182
ZEND_API zend_internal_attribute *zend_internal_attribute_get(zend_string *lcname);
8283

8384
ZEND_API zend_attribute *zend_add_attribute(

Zend/zend_builtin_functions.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1200,7 +1200,7 @@ ZEND_FUNCTION(set_exception_handler)
12001200
zend_fcall_info_cache fcc;
12011201

12021202
ZEND_PARSE_PARAMETERS_START(1, 1)
1203-
Z_PARAM_FUNC_OR_NULL(fci, fcc)
1203+
Z_PARAM_FUNC_OR_NULL(fci, fcc)`
12041204
ZEND_PARSE_PARAMETERS_END();
12051205

12061206
if (Z_TYPE(EG(user_exception_handler)) != IS_UNDEF) {

build/gen_stub.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ function processStubFile(string $stubFile, Context $context, bool $includeOnly =
7373

7474
foreach ($fileInfo->dependencies as $dependency) {
7575
// TODO add header search path for extensions?
76-
$prefixes = [dirname($stubFile) . "/", ""];
76+
$prefixes = [dirname($stubFile) . "/", dirname(__DIR__) . "/"];
7777
foreach ($prefixes as $prefix) {
7878
$depFile = $prefix . $dependency;
7979
if (file_exists($depFile)) {

ext/zend_test/test.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -634,12 +634,12 @@ PHP_MINIT_FUNCTION(zend_test)
634634

635635
zend_test_attribute = register_class_ZendTestAttribute();
636636
{
637-
zend_internal_attribute *attr = zend_internal_attribute_register(zend_test_attribute);
637+
zend_internal_attribute *attr = zend_mark_internal_attribute(zend_test_attribute);
638638
attr->validator = zend_attribute_validate_zendtestattribute;
639639
}
640640

641641
zend_test_parameter_attribute = register_class_ZendTestParameterAttribute();
642-
zend_internal_attribute_register(zend_test_parameter_attribute);
642+
zend_mark_internal_attribute(zend_test_parameter_attribute);
643643

644644
{
645645
zend_attribute *attr;

0 commit comments

Comments
 (0)