diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/opcache/Optimizer/compact_literals.c | 9 | ||||
-rw-r--r-- | ext/opcache/Optimizer/zend_optimizer.c | 5 |
2 files changed, 12 insertions, 2 deletions
diff --git a/ext/opcache/Optimizer/compact_literals.c b/ext/opcache/Optimizer/compact_literals.c index f541561ae0..b70f5c2e28 100644 --- a/ext/opcache/Optimizer/compact_literals.c +++ b/ext/opcache/Optimizer/compact_literals.c @@ -261,9 +261,16 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx break; case ZEND_DECLARE_FUNCTION: case ZEND_DECLARE_CLASS: + LITERAL_INFO(opline->op1.constant, LITERAL_VALUE, 2); + break; case ZEND_DECLARE_INHERITED_CLASS: case ZEND_DECLARE_INHERITED_CLASS_DELAYED: LITERAL_INFO(opline->op1.constant, LITERAL_VALUE, 2); + LITERAL_INFO(opline->op2.constant, LITERAL_VALUE, 2); + break; + case ZEND_DECLARE_ANON_INHERITED_CLASS: + LITERAL_INFO(opline->op1.constant, LITERAL_VALUE, 1); + LITERAL_INFO(opline->op2.constant, LITERAL_VALUE, 2); break; case ZEND_ISSET_ISEMPTY_DIM_OBJ: case ZEND_ASSIGN_DIM: @@ -738,8 +745,6 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx } break; case ZEND_FETCH_CLASS: - case ZEND_ADD_INTERFACE: - case ZEND_ADD_TRAIT: case ZEND_INSTANCEOF: if (opline->op2_type == IS_CONST) { // op2 class diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c index 5c5dee01ab..3904a6d35a 100644 --- a/ext/opcache/Optimizer/zend_optimizer.c +++ b/ext/opcache/Optimizer/zend_optimizer.c @@ -392,6 +392,11 @@ int zend_optimizer_update_op2_const(zend_op_array *op_array, } case ZEND_ADD_INTERFACE: case ZEND_ADD_TRAIT: + REQUIRES_STRING(val); + drop_leading_backslash(val); + opline->op2.constant = zend_optimizer_add_literal(op_array, val); + zend_optimizer_add_literal_string(op_array, zend_string_tolower(Z_STR_P(val))); + break; case ZEND_INSTANCEOF: REQUIRES_STRING(val); drop_leading_backslash(val); |