com php-src: Merge branch 'PHP-5.6': ext/opcache/Optimizer/pass 1_5.c
| From: | Dmitry Stogov | 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;
}