summaryrefslogtreecommitdiff
path: root/Zend/zend_vm_execute.h
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2008-03-12 10:32:12 +0000
committerDmitry Stogov <dmitry@php.net>2008-03-12 10:32:12 +0000
commitbe8daf1f47faeb4d142535d393095904648216e7 (patch)
tree824141b016d8ddbebf8f8d1e75f4078c38254e01 /Zend/zend_vm_execute.h
parent0f2247ae9423d9ba38428b2dea9c46614d29265c (diff)
downloadphp-git-be8daf1f47faeb4d142535d393095904648216e7.tar.gz
Optimized ZEND_FETCH_CLASS + ZEND_ADD_INTERFACE into single ZEND_ADD_INTERFACE opcode
Diffstat (limited to 'Zend/zend_vm_execute.h')
-rw-r--r--Zend/zend_vm_execute.h80
1 files changed, 40 insertions, 40 deletions
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index bc864c8583..824c003a7a 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -498,21 +498,6 @@ static int ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
ZEND_VM_NEXT_OPCODE();
}
-static int ZEND_ADD_INTERFACE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- zend_op *opline = EX(opline);
- zend_class_entry *ce = EX_T(opline->op1.u.var).class_entry;
- zend_class_entry *iface = EX_T(opline->op2.u.var).class_entry;
-
- if (!(iface->ce_flags & ZEND_ACC_INTERFACE)) {
- zend_error_noreturn(E_ERROR, "%s cannot implement %s - it is not an interface", ce->name, iface->name);
- }
-
- zend_do_implement_interface(ce, iface TSRMLS_CC);
-
- ZEND_VM_NEXT_OPCODE();
-}
-
static int ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zend_uint op_num = EG(opline_before_exception)-EG(active_op_array)->opcodes;
@@ -775,6 +760,21 @@ static int ZEND_CONT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
ZEND_VM_JMP(EX(op_array)->opcodes + el->cont);
}
+static int ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ zend_op *opline = EX(opline);
+ zend_class_entry *ce = EX_T(opline->op1.u.var).class_entry;
+ zend_class_entry *iface = zend_fetch_class(Z_STRVAL(opline->op2.u.constant), Z_STRLEN(opline->op2.u.constant), opline->extended_value TSRMLS_CC);
+
+ if (!(iface->ce_flags & ZEND_ACC_INTERFACE)) {
+ zend_error_noreturn(E_ERROR, "%s cannot implement %s - it is not an interface", ce->name, iface->name);
+ }
+
+ zend_do_implement_interface(ce, iface TSRMLS_CC);
+
+ ZEND_VM_NEXT_OPCODE();
+}
+
static int ZEND_FETCH_CLASS_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zend_op *opline = EX(opline);
@@ -32965,31 +32965,31 @@ void zend_init_opcodes_handlers(void)
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
- ZEND_ADD_INTERFACE_SPEC_HANDLER,
+ ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,