cvs: ZendEngine2 / zend_compile.c zend_vm_def.h zend_vm_execute.h

[email protected] ("Dmitry Stogov")
Newsgroups php.zend-engine.cvs
Message-ID <cvsdmitry1205317960@cvsserver>
dmitry		Wed Mar 12 10:32:40 2008 UTC

  Modified files:              
    /ZendEngine2	zend_compile.c zend_vm_def.h zend_vm_execute.h 
  Log:
  Optimized ZEND_FETCH_CLASS + ZEND_ADD_INTERFACE into single ZEND_ADD_INTERFACE opcode
  
  
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_compile.c?r1=1.808&r2=1.809&diff_format=u
Index: ZendEngine2/zend_compile.c
diff -u ZendEngine2/zend_compile.c:1.808 ZendEngine2/zend_compile.c:1.809
--- ZendEngine2/zend_compile.c:1.808	Wed Mar 12 09:46:57 2008
+++ ZendEngine2/zend_compile.c	Wed Mar 12 10:32:39 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_compile.c,v 1.808 2008/03/12 09:46:57 dmitry Exp $ */
+/* $Id: zend_compile.c,v 1.809 2008/03/12 10:32:39 dmitry Exp $ */
 
 #include <zend_language_parser.h>
 #include "zend.h"
@@ -3493,35 +3493,25 @@
 
 void zend_do_implements_interface(znode *interface_name TSRMLS_DC) /* {{{ */
 {
-	znode interface_node;
 	zend_op *opline;
 
-	zend_do_fetch_class(&interface_node, interface_name TSRMLS_CC);
-	switch (interface_node.u.EA.type) {
+	switch (zend_get_class_fetch_type(Z_TYPE(interface_name->u.constant), Z_UNIVAL(interface_name->u.constant), Z_UNILEN(interface_name->u.constant))) {
 		case ZEND_FETCH_CLASS_SELF:
-			zend_error(E_COMPILE_ERROR, "Cannot use 'self' as interface name as it is reserved");
-			break;
 		case ZEND_FETCH_CLASS_PARENT:
-			zend_error(E_COMPILE_ERROR, "Cannot use 'parent' as interface name as it is reserved");
-			break;
 		case ZEND_FETCH_CLASS_STATIC:
-			zend_error(E_COMPILE_ERROR, "Cannot use 'static' as interface name as it is reserved");
+			zend_error(E_COMPILE_ERROR, "Cannot use '%R' as interface name as it is reserved", Z_TYPE(interface_name->u.constant), Z_UNIVAL(interface_name->u.constant));
 			break;
 		default:
-			if (CG(active_op_array)->last > 0) {
-				opline = &CG(active_op_array)->opcodes[CG(active_op_array)->last-1];
-				if (opline->opcode == ZEND_FETCH_CLASS) {
-					opline->extended_value = (opline->extended_value & ~ZEND_FETCH_CLASS_MASK) | ZEND_FETCH_CLASS_INTERFACE;
-				}
-			}
 			break;
 	}
 
 	opline = get_next_op(CG(active_op_array) TSRMLS_CC);
 	opline->opcode = ZEND_ADD_INTERFACE;
 	opline->op1 = CG(implementing_class);
-	opline->op2 = interface_node;
-	opline->extended_value = CG(active_class_entry)->num_interfaces++;
+	zend_resolve_class_name(interface_name, &opline->extended_value, 0 TSRMLS_CC);
+	opline->extended_value = (opline->extended_value & ~ZEND_FETCH_CLASS_MASK) | ZEND_FETCH_CLASS_INTERFACE;
+	opline->op2 = *interface_name;
+	CG(active_class_entry)->num_interfaces++;
 }
 /* }}} */
 
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.219&r2=1.220&diff_format=u
Index: ZendEngine2/zend_vm_def.h
diff -u ZendEngine2/zend_vm_def.h:1.219 ZendEngine2/zend_vm_def.h:1.220
--- ZendEngine2/zend_vm_def.h:1.219	Fri Mar  7 00:51:02 2008
+++ ZendEngine2/zend_vm_def.h	Wed Mar 12 10:32:39 2008
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_vm_def.h,v 1.219 2008/03/07 00:51:02 felipe Exp $ */
+/* $Id: zend_vm_def.h,v 1.220 2008/03/12 10:32:39 dmitry Exp $ */
 
 /* If you change this file, please regenerate the zend_vm_execute.h and
  * zend_vm_opcodes.h files by running:
@@ -4176,11 +4176,11 @@
 	ZEND_VM_NEXT_OPCODE();
 }
 
-ZEND_VM_HANDLER(144, ZEND_ADD_INTERFACE, ANY, ANY)
+ZEND_VM_HANDLER(144, ZEND_ADD_INTERFACE, ANY, CONST)
 {
 	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;
+	zend_class_entry *iface = zend_u_fetch_class(Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant), Z_UNILEN(opline->op2.u.constant), opline->extended_value TSRMLS_CC);
 
 	if (!(iface->ce_flags & ZEND_ACC_INTERFACE)) {
 		zend_error_noreturn(E_ERROR, "%v cannot implement %v - it is not an interface", ce->name, iface->name);
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.h?r1=1.223&r2=1.224&diff_format=u
Index: ZendEngine2/zend_vm_execute.h
diff -u ZendEngine2/zend_vm_execute.h:1.223 ZendEngine2/zend_vm_execute.h:1.224
--- ZendEngine2/zend_vm_execute.h:1.223	Fri Mar  7 00:51:02 2008
+++ ZendEngine2/zend_vm_execute.h	Wed Mar 12 10:32:39 2008
@@ -506,21 +506,6 @@
 	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, "%v cannot implement %v - 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;
@@ -806,6 +791,21 @@
 	ZEND_VM_JMP(opline->op1.u.jmp_addr);
 }
 
+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_u_fetch_class(Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant), Z_UNILEN(opline->op2.u.constant), opline->extended_value TSRMLS_CC);
+
+	if (!(iface->ce_flags & ZEND_ACC_INTERFACE)) {
+		zend_error_noreturn(E_ERROR, "%v cannot implement %v - 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);
@@ -34116,31 +34116,31 @@
   	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,
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.