]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.4'
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 15 Feb 2019 10:28:14 +0000 (11:28 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 15 Feb 2019 10:28:14 +0000 (11:28 +0100)
1  2 
Zend/zend_API.c
Zend/zend_compile.c
Zend/zend_inheritance.c

diff --cc Zend/zend_API.c
index c03b6bfa5bd86be860d231c40f7aca9398ebd4bf,97ccb611418b76d9fb98f93fd52ae359e846ee23..cd374383b19ad0ff418d4f273322c8d2cff362c3
@@@ -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;
index 33e6e47e9cf988cb16e0c2afec1cc4fbe40474a1,f814c48b3b8a7fb9c61c7a4a75d79548437a5260..8ad0f8038b0d8de930d4a4d140dfdc52066dc9a0
@@@ -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;
index 072e0b18013901685381ecba3083e0b764fb0d80,2ce4df30495b5d1ed3fb3e648b36310092487593..5ffc0b65202cc497b01800a6c9b476a3adc047f6
@@@ -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;