com php-src: Merge branch 'PHP-5.6': ext/opcache/Optimizer/pass 1_5.c

From: Date: Mon, 13 Oct 2014 10:10:44 +0000
Subject: com php-src: Merge branch 'PHP-5.6': ext/opcache/Optimizer/pass 1_5.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-82260@lists.php.net to get a copy of this message
Commit: 702a2dfb3ef3c603d89bf7e4e9a63b6f8ff8968d Author: Dmitry Stogov <dmitry@zend.com> Mon, 13 Oct 2014 14:10:44 +0400 Parents: 0b09ba84b912be90c06d8d5ffab55bf850c3070b 7acba332fe96e5da6ad3165d0699b9e4e65d94fa Branches: master Link: http://git.php.net/?p=php-src..git;a=commitdiff;h=702a2dfb3ef3c603d89bf7e4e9a63b6f8ff8968d Log: Merge branch 'PHP-5.6' * PHP-5.6: We can't eliminate FETCH_CONSTANT opcodes for constants represented by AST. Conflicts: ext/opcache/Optimizer/pass1_5.c Changed paths: MM ext/opcache/Optimizer/pass1_5.c Diff: diff --cc ext/opcache/Optimizer/pass1_5.c index f06f5cc,41dde05..b91ac5b --- a/ext/opcache/Optimizer/pass1_5.c +++ b/ext/opcache/Optimizer/pass1_5.c @@@ -266,11 -252,15 +266,14 @@@ void zend_optimizer_pass1(zend_op_arra break; } } + if (Z_TYPE(c) == IS_CONSTANT_AST) { + break; + } literal_dtor(&ZEND_OP2_LITERAL(opline)); MAKE_NOP(opline); - replace_tmp_by_const(op_array, opline, tv, &c TSRMLS_CC); + zend_optimizer_replace_by_const(op_array, opline, IS_TMP_VAR, tv, &c TSRMLS_CC); } -#if ZEND_EXTENSION_API_NO > PHP_5_3_X_API_NO /* class constant */ if (ZEND_OP1_TYPE(opline) != IS_UNUSED && ZEND_OP2_TYPE(opline) == IS_CONST && @@@ -302,18 -295,22 +305,21 @@@ ((opline - 1)->extended_value & ~ZEND_FETCH_CLASS_NO_AUTOLOAD) == ZEND_FETCH_CLASS_SELF) && ZEND_RESULT((opline - 1)).var == ZEND_OP1(opline).var) { /* for self::B */ - pce = &op_array->scope; + ce = op_array->scope; } - if (pce) { - zend_uint tv = ZEND_RESULT(opline).var; - zval **c, t; + if (ce) { + uint32_t tv = ZEND_RESULT(opline).var; + zval *c, t; - if (zend_hash_find(&(*pce)->constants_table, - Z_STRVAL(ZEND_OP2_LITERAL(opline)), - Z_STRLEN(ZEND_OP2_LITERAL(opline)) + 1, - (void **) &c) == SUCCESS) { - if (Z_TYPE_PP(c) == IS_CONSTANT_AST) { + if ((c = zend_hash_find(&ce->constants_table, + Z_STR(ZEND_OP2_LITERAL(opline)))) != NULL) { + ZVAL_DEREF(c); ++ if (Z_TYPE_P(c) == IS_CONSTANT_AST) { + break; + } - if (ZEND_IS_CONSTANT_TYPE(Z_TYPE_PP(c))) { - if (!zend_get_persistent_constant(Z_STRVAL_PP(c), Z_STRLEN_PP(c), &t, 1 TSRMLS_CC) || + if (ZEND_IS_CONSTANT_TYPE(Z_TYPE_P(c))) { + if (!zend_optimizer_get_persistent_constant(Z_STR_P(c), &t, 1 TSRMLS_CC) || ZEND_IS_CONSTANT_TYPE(Z_TYPE(t))) { break; }

« previous php.cvs (#82260) next »