From: Nikita Popov Date: Fri, 15 Feb 2019 10:28:14 +0000 (+0100) Subject: Merge branch 'PHP-7.4' X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=903821b1c7d6d4e8358608e19c6e47ce4c33ccb5;p=php Merge branch 'PHP-7.4' --- 903821b1c7d6d4e8358608e19c6e47ce4c33ccb5 diff --cc Zend/zend_API.c index c03b6bfa5b,97ccb61141..cd374383b1 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@@ -2241,8 -2262,17 +2241,12 @@@ ZEND_API int zend_register_functions(ze } if (scope) { - /* Look for ctor, dtor, clone - * If it's an old-style constructor, store it only if we don't have - * a constructor already. - */ - if ((fname_len == class_name_len) && !ctor && !memcmp(ZSTR_VAL(lowercase_name), lc_class_name, class_name_len+1)) { - ctor = reg_function; - } else if (zend_string_equals_literal(lowercase_name, "serialize")) { + /* Look for ctor, dtor, clone */ - if (ZSTR_VAL(lowercase_name)[0] != '_' || ZSTR_VAL(lowercase_name)[1] != '_') { ++ if (zend_string_equals_literal(lowercase_name, "serialize")) { + serialize_func = reg_function; + } else if (zend_string_equals_literal(lowercase_name, "unserialize")) { + unserialize_func = reg_function; + } else if (ZSTR_VAL(lowercase_name)[0] != '_' || ZSTR_VAL(lowercase_name)[1] != '_') { reg_function = NULL; } else if (zend_string_equals_literal(lowercase_name, ZEND_CONSTRUCTOR_FUNC_NAME)) { ctor = reg_function; diff --cc Zend/zend_compile.c index 33e6e47e9c,f814c48b3b..8ad0f8038b --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@@ -5600,8 -5632,20 +5600,14 @@@ void zend_begin_method_decl(zend_op_arr "public visibility and cannot be static"); } } - } else if (ZSTR_VAL(lcname)[0] == '_' && ZSTR_VAL(lcname)[1] == '_') { - if (zend_string_equals_literal(lcname, ZEND_CONSTRUCTOR_FUNC_NAME)) { + } else { - if (!in_trait && zend_string_equals_ci(lcname, ce->name)) { - if (!ce->constructor) { - ce->constructor = (zend_function *) op_array; - } - } else if (zend_string_equals_literal(lcname, "serialize")) { ++ if (zend_string_equals_literal(lcname, "serialize")) { + ce->serialize_func = (zend_function *) op_array; + } else if (zend_string_equals_literal(lcname, "unserialize")) { + ce->unserialize_func = (zend_function *) op_array; + } else if (ZSTR_VAL(lcname)[0] != '_' || ZSTR_VAL(lcname)[1] != '_') { - if (!is_static) { - op_array->fn_flags |= ZEND_ACC_ALLOW_STATIC; - } ++ /* pass */ + } else if (zend_string_equals_literal(lcname, ZEND_CONSTRUCTOR_FUNC_NAME)) { ce->constructor = (zend_function *) op_array; } else if (zend_string_equals_literal(lcname, ZEND_DESTRUCTOR_FUNC_NAME)) { ce->destructor = (zend_function *) op_array; diff --cc Zend/zend_inheritance.c index 072e0b1801,2ce4df3049..5ffc0b6520 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@@ -1287,7 -1293,11 +1293,11 @@@ static void zend_do_implement_interface static void zend_add_magic_methods(zend_class_entry* ce, zend_string* mname, zend_function* fe) /* {{{ */ { - if (ZSTR_VAL(mname)[0] != '_' || ZSTR_VAL(mname)[1] != '_') { + if (zend_string_equals_literal(mname, "serialize")) { + ce->serialize_func = fe; + } else if (zend_string_equals_literal(mname, "unserialize")) { + ce->unserialize_func = fe; - } else if (ZSTR_LEN(ce->name) != ZSTR_LEN(mname) && (ZSTR_VAL(mname)[0] != '_' || ZSTR_VAL(mname)[1] != '_')) { ++ } else if (ZSTR_VAL(mname)[0] != '_' || ZSTR_VAL(mname)[1] != '_') { /* pass */ } else if (zend_string_equals_literal(mname, ZEND_CLONE_FUNC_NAME)) { ce->clone = fe;