mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Merge branch 'PHP-8.4'
* PHP-8.4: Remove dynamic defs from property hooks Add missing hooks JIT restart code
This commit is contained in:
commit
0591defd6f
4 changed files with 48 additions and 0 deletions
|
@ -4199,6 +4199,24 @@ static void preload_link(void)
|
||||||
preload_remove_declares(op_array);
|
preload_remove_declares(op_array);
|
||||||
}
|
}
|
||||||
} ZEND_HASH_FOREACH_END();
|
} ZEND_HASH_FOREACH_END();
|
||||||
|
|
||||||
|
if (ce->num_hooked_props > 0) {
|
||||||
|
zend_property_info *info;
|
||||||
|
|
||||||
|
ZEND_HASH_MAP_FOREACH_PTR(&ce->properties_info, info) {
|
||||||
|
if (info->hooks) {
|
||||||
|
for (uint32_t i = 0; i < ZEND_PROPERTY_HOOK_COUNT; i++) {
|
||||||
|
if (info->hooks[i]) {
|
||||||
|
op_array = &info->hooks[i]->op_array;
|
||||||
|
ZEND_ASSERT(op_array->type == ZEND_USER_FUNCTION);
|
||||||
|
if (!(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
|
||||||
|
preload_remove_declares(op_array);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} ZEND_HASH_FOREACH_END();
|
||||||
|
}
|
||||||
} ZEND_HASH_FOREACH_END();
|
} ZEND_HASH_FOREACH_END();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3983,6 +3983,24 @@ static void zend_jit_restart_preloaded_script(zend_persistent_script *script)
|
||||||
zend_jit_restart_preloaded_op_array(op_array);
|
zend_jit_restart_preloaded_op_array(op_array);
|
||||||
}
|
}
|
||||||
} ZEND_HASH_FOREACH_END();
|
} ZEND_HASH_FOREACH_END();
|
||||||
|
|
||||||
|
if (ce->num_hooked_props > 0) {
|
||||||
|
zend_property_info *prop;
|
||||||
|
|
||||||
|
ZEND_HASH_MAP_FOREACH_PTR(&ce->properties_info, prop) {
|
||||||
|
if (prop->hooks) {
|
||||||
|
for (uint32_t i = 0; i < ZEND_PROPERTY_HOOK_COUNT; i++) {
|
||||||
|
if (prop->hooks[i]) {
|
||||||
|
op_array = &prop->hooks[i]->op_array;
|
||||||
|
ZEND_ASSERT(op_array->type == ZEND_USER_FUNCTION);
|
||||||
|
if (!(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
|
||||||
|
zend_jit_restart_preloaded_op_array(op_array);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} ZEND_HASH_FOREACH_END();
|
||||||
|
}
|
||||||
} ZEND_HASH_FOREACH_END();
|
} ZEND_HASH_FOREACH_END();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,15 @@ class Test {
|
||||||
echo "dynamic\n";
|
echo "dynamic\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int $hook {
|
||||||
|
get {
|
||||||
|
function dynamic_in_hook() {
|
||||||
|
echo "dynamic in hook\n";
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function func() {
|
function func() {
|
||||||
|
@ -16,3 +25,4 @@ function func() {
|
||||||
$test = new Test;
|
$test = new Test;
|
||||||
$test->method();
|
$test->method();
|
||||||
func();
|
func();
|
||||||
|
$test->hook;
|
||||||
|
|
|
@ -15,7 +15,9 @@ if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows
|
||||||
<?php
|
<?php
|
||||||
dynamic();
|
dynamic();
|
||||||
dynamic2();
|
dynamic2();
|
||||||
|
dynamic_in_hook();
|
||||||
?>
|
?>
|
||||||
--EXPECT--
|
--EXPECT--
|
||||||
dynamic
|
dynamic
|
||||||
dynamic2
|
dynamic2
|
||||||
|
dynamic in hook
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue