mirror of
https://github.com/php/php-src.git
synced 2024-11-27 20:03:40 +08:00
commit
74699533e5
1
NEWS
1
NEWS
@ -20,6 +20,7 @@ PHP NEWS
|
||||
- OpCache:
|
||||
. Fixed bug #78654 (Incorrectly computed opcache checksum on files with
|
||||
non-ascii characters). (mhagstrand)
|
||||
. Fixed bug #78747 (OpCache corrupts custom extension result). (Nikita)
|
||||
|
||||
- Reflection:
|
||||
. Fixed bug #78697 (ReflectionClass::ImplementsInterface - inaccurate error
|
||||
|
@ -1694,8 +1694,7 @@ uint32_t zend_get_func_info(const zend_call_info *call_info, const zend_ssa *ssa
|
||||
zval *zv;
|
||||
func_info_t *info;
|
||||
|
||||
zv = zend_hash_find_ex(&func_info, Z_STR_P(CRT_CONSTANT_EX(call_info->caller_op_array, call_info->caller_init_opline, call_info->caller_init_opline->op2, ssa->rt_constants)), 1);
|
||||
if (zv) {
|
||||
if (!call_info->callee_func->common.scope && (zv = zend_hash_find_ex(&func_info, Z_STR_P(CRT_CONSTANT_EX(call_info->caller_op_array, call_info->caller_init_opline, call_info->caller_init_opline->op2, ssa->rt_constants)), 1))) {
|
||||
info = Z_PTR_P(zv);
|
||||
if (UNEXPECTED(zend_optimizer_is_disabled_func(info->name, info->name_len))) {
|
||||
ret = MAY_BE_NULL;
|
||||
|
14
ext/opcache/tests/internal_func_info_static_method.phpt
Normal file
14
ext/opcache/tests/internal_func_info_static_method.phpt
Normal file
@ -0,0 +1,14 @@
|
||||
--TEST--
|
||||
Internal static methods should not be confused with global functions
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('zend-test')) die('skip requires zend-test');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
var_dump(is_bool(_ZendTestClass::is_object()));
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(false)
|
@ -158,17 +158,20 @@ static zend_function *zend_test_class_method_get(zend_object **object, zend_stri
|
||||
/* }}} */
|
||||
|
||||
static zend_function *zend_test_class_static_method_get(zend_class_entry *ce, zend_string *name) /* {{{ */ {
|
||||
zend_internal_function *fptr = emalloc(sizeof(zend_internal_function));
|
||||
fptr->type = ZEND_OVERLOADED_FUNCTION;
|
||||
fptr->num_args = 1;
|
||||
fptr->arg_info = NULL;
|
||||
fptr->scope = ce;
|
||||
fptr->fn_flags = ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_STATIC;
|
||||
fptr->function_name = name;
|
||||
fptr->handler = ZEND_FN(zend_test_func);
|
||||
zend_set_function_arg_flags((zend_function*)fptr);
|
||||
if (zend_string_equals_literal_ci(name, "test")) {
|
||||
zend_internal_function *fptr = emalloc(sizeof(zend_internal_function));
|
||||
fptr->type = ZEND_OVERLOADED_FUNCTION;
|
||||
fptr->num_args = 1;
|
||||
fptr->arg_info = NULL;
|
||||
fptr->scope = ce;
|
||||
fptr->fn_flags = ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_STATIC;
|
||||
fptr->function_name = name;
|
||||
fptr->handler = ZEND_FN(zend_test_func);
|
||||
zend_set_function_arg_flags((zend_function*)fptr);
|
||||
|
||||
return (zend_function*)fptr;
|
||||
return (zend_function*)fptr;
|
||||
}
|
||||
return zend_std_get_static_method(ce, name, NULL);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@ -178,11 +181,22 @@ static int zend_test_class_call_method(zend_string *method, zend_object *object,
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* Internal function returns bool, we return int. */
|
||||
static ZEND_METHOD(_ZendTestClass, is_object) /* {{{ */ {
|
||||
RETURN_LONG(42);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static ZEND_METHOD(_ZendTestTrait, testMethod) /* {{{ */ {
|
||||
RETURN_TRUE;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static const zend_function_entry zend_test_class_methods[] = {
|
||||
ZEND_ME(_ZendTestClass, is_object, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
|
||||
ZEND_FE_END
|
||||
};
|
||||
|
||||
static const zend_function_entry zend_test_trait_methods[] = {
|
||||
ZEND_ME(_ZendTestTrait, testMethod, NULL, ZEND_ACC_PUBLIC)
|
||||
ZEND_FE_END
|
||||
@ -195,7 +209,7 @@ PHP_MINIT_FUNCTION(zend_test)
|
||||
INIT_CLASS_ENTRY(class_entry, "_ZendTestInterface", NULL);
|
||||
zend_test_interface = zend_register_internal_interface(&class_entry);
|
||||
zend_declare_class_constant_long(zend_test_interface, ZEND_STRL("DUMMY"), 0);
|
||||
INIT_CLASS_ENTRY(class_entry, "_ZendTestClass", NULL);
|
||||
INIT_CLASS_ENTRY(class_entry, "_ZendTestClass", zend_test_class_methods);
|
||||
zend_test_class = zend_register_internal_class_ex(&class_entry, NULL);
|
||||
zend_class_implements(zend_test_class, 1, zend_test_interface);
|
||||
zend_test_class->create_object = zend_test_class_new;
|
||||
|
Loading…
Reference in New Issue
Block a user