]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-5.6'
authorXinchen Hui <laruence@php.net>
Wed, 25 Mar 2015 15:35:56 +0000 (23:35 +0800)
committerXinchen Hui <laruence@php.net>
Wed, 25 Mar 2015 15:35:56 +0000 (23:35 +0800)
Conflicts:
ext/opcache/Optimizer/pass1_5.c

1  2 
ext/opcache/Optimizer/pass1_5.c

index 9a5ae14de81625bf15373e93a02d0ea4102e2f17,79416cc8c2e658e9573e377e8280c2d4b019f4d9..3cb11aa80987b8d10bcdcfc44978d55a4c17b9fe
@@@ -443,29 -380,33 +443,34 @@@ void zend_optimizer_pass1(zend_op_arra
                                                        func->type == ZEND_INTERNAL_FUNCTION &&
                                                        func->module->type == MODULE_PERSISTENT) {
                                                zval t;
-                                               ZVAL_TRUE(&t);
 -                                              if ((Z_STRLEN(ZEND_OP1_LITERAL(opline)) == sizeof("is_callable")-1 &&
 -                                                      !memcmp(Z_STRVAL(ZEND_OP1_LITERAL(opline)), "is_callable", sizeof("is_callable"))) ||
 -                                                         func->handler != ZEND_FN(display_disabled_function)) {
 -                                                      ZVAL_BOOL(&t, 1);
++                                              if (Z_STRLEN(ZEND_OP2_LITERAL(init_opline)) == sizeof("is_callable") - 1 ||
++                                                              func->handler != ZEND_FN(display_disabled_function)) {
++                                                      ZVAL_TRUE(&t);
+                                               } else {
 -                                                      ZVAL_BOOL(&t, 0);
++                                                      ZVAL_FALSE(&t);
+                                               }
 -                                              if (replace_var_by_const(op_array, opline + 1, ZEND_RESULT(opline).var, &t TSRMLS_CC)) {
 -                                                      literal_dtor(&ZEND_OP1_LITERAL(opline - 1));
 -                                                      MAKE_NOP((opline - 1));
 -                                                      literal_dtor(&ZEND_OP1_LITERAL(opline));
 +                                              if (zend_optimizer_replace_by_const(op_array, opline + 1, IS_VAR, ZEND_RESULT(opline).var, &t)) {
 +                                                      literal_dtor(&ZEND_OP2_LITERAL(init_opline));
 +                                                      MAKE_NOP(init_opline);
 +                                                      literal_dtor(&ZEND_OP1_LITERAL(send1_opline));
 +                                                      MAKE_NOP(send1_opline);
                                                        MAKE_NOP(opline);
 +                                                      zend_string_release(lc_name);
 +                                                      break;
                                                }
                                        }
 -                                      efree(lc_name);
 -                              } else if (Z_STRLEN(ZEND_OP1_LITERAL(opline)) == sizeof("extension_loaded")-1 &&
 -                                      !memcmp(Z_STRVAL(ZEND_OP1_LITERAL(opline)),
 +                                      zend_string_release(lc_name);
 +                              } else if (Z_STRLEN(ZEND_OP2_LITERAL(init_opline)) == sizeof("extension_loaded")-1 &&
 +                                      !memcmp(Z_STRVAL(ZEND_OP2_LITERAL(init_opline)),
                                                "extension_loaded", sizeof("extension_loaded")-1)) {
                                        zval t;
 -                                      zend_module_entry *m;
 -                                      char *lc_name = zend_str_tolower_dup(
 -                                                      Z_STRVAL(ZEND_OP1_LITERAL(opline - 1)), Z_STRLEN(ZEND_OP1_LITERAL(opline - 1)));
 -                                      int found = zend_hash_find(&module_registry,
 -                                                      lc_name, Z_STRLEN(ZEND_OP1_LITERAL(opline - 1)) + 1, (void *)&m) == SUCCESS;
 -
 -                                      efree(lc_name);
 -                                      if (!found) {
 +                                      zend_string *lc_name = zend_string_tolower(
 +                                                      Z_STR(ZEND_OP1_LITERAL(send1_opline)));
 +                                      zend_module_entry *m = zend_hash_find_ptr(&module_registry,
 +                                                      lc_name);
 +
 +                                      zend_string_release(lc_name);
 +                                      if (!m) {
                                                if (!PG(enable_dl)) {
                                                        break;
                                                } else {