summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/opcache/Optimizer/compact_literals.c9
-rw-r--r--ext/opcache/Optimizer/zend_optimizer.c5
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);