cvs: ZendEngine2 / zend_compile.c

[email protected] ("Dmitry Stogov") Wed, 08 Apr 2009 13:17:27 -0000
Newsgroups php.zend-engine.cvs
Message-ID <cvsdmitry1239196647@cvsserver>
dmitry		Wed Apr  8 13:17:27 2009 UTC

  Modified files:              
    /ZendEngine2	zend_compile.c 
  Log:
  Removed deprecated code and fixed function name in error message
  
  
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_compile.c?r1=1.853&r2=1.854&diff_format=u
Index: ZendEngine2/zend_compile.c
diff -u ZendEngine2/zend_compile.c:1.853 ZendEngine2/zend_compile.c:1.854
--- ZendEngine2/zend_compile.c:1.853	Sat Apr  4 17:19:28 2009
+++ ZendEngine2/zend_compile.c	Wed Apr  8 13:17:27 2009
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_compile.c,v 1.853 2009/04/04 17:19:28 felipe Exp $ */
+/* $Id: zend_compile.c,v 1.854 2009/04/08 13:17:27 dmitry Exp $ */
 
 #include <zend_language_parser.h>
 #include "zend.h"
@@ -1245,16 +1245,7 @@
 
 	if (is_method) {
 		if (zend_u_hash_add(&CG(active_class_entry)->function_table, Z_TYPE(function_name->u.constant), lcname, lcname_len+1, &op_array, sizeof(zend_op_array), (void **) &CG(active_op_array)) == FAILURE) {
-			zend_op_array *child_op_array, *parent_op_array;
-			if (CG(active_class_entry)->parent
-			    && (zend_u_hash_find(&CG(active_class_entry)->function_table, Z_TYPE(function_name->u.constant), name, name_len+1, (void **) &child_op_array) == SUCCESS)
-			    && (zend_u_hash_find(&CG(active_class_entry)->parent->function_table, Z_TYPE(function_name->u.constant), name, name_len+1, (void **) &parent_op_array) == SUCCESS)
-					&& (child_op_array == parent_op_array)) {
-				zend_u_hash_update(&CG(active_class_entry)->function_table, Z_TYPE(function_name->u.constant), name, name_len+1, &op_array, sizeof(zend_op_array), (void **) &CG(active_op_array));
-			} else {
-				efree(lcname.v);
-				zend_error(E_COMPILE_ERROR, "Cannot redeclare %v::%R()", CG(active_class_entry)->name, Z_TYPE(function_name->u.constant), name);
-			}
+			zend_error(E_COMPILE_ERROR, "Cannot redeclare %v::%R()", CG(active_class_entry)->name, Z_TYPE(function_name->u.constant), name);
 		}
 
 		if (fn_flags & ZEND_ACC_ABSTRACT) {
@@ -2982,29 +2973,26 @@
 {
 	zend_function *function;
 
-	if (opline->opcode != ZEND_DECLARE_FUNCTION) {
-		zend_error(E_COMPILE_ERROR, "Internal compiler error.  Please report!");
-	}
-
 	zend_u_hash_find(function_table, Z_TYPE(opline->op1.u.constant), Z_UNIVAL(opline->op1.u.constant), Z_UNILEN(opline->op1.u.constant), (void *) &function);
 	if (zend_u_hash_add(function_table, Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant), Z_UNILEN(opline->op2.u.constant)+1, function, sizeof(zend_function), NULL)==FAILURE) {
 		int error_level = compile_time ? E_COMPILE_ERROR : E_ERROR;
-		zend_function *function;
+		zend_function *old_function;
 
-		if (zend_u_hash_find(function_table, Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant), Z_UNILEN(opline->op2.u.constant)+1, (void *) &function)==SUCCESS
-			&& function->type==ZEND_USER_FUNCTION
-			&& ((zend_op_array *) function)->last>0) {
-			zend_error(error_level, "Cannot redeclare %R() (previously declared in %s:%d)",
-				Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant),
-						((zend_op_array *) function)->filename,
-						((zend_op_array *) function)->opcodes[0].lineno);
-		} else if (((zend_internal_function *)function)->module) {
-			zend_error(error_level, "Cannot redeclare %R() (internal function exists in module %s)",
-				Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant),
-						((zend_internal_function *)function)->module->name);
-		} else {
-			zend_error(error_level, "Cannot redeclare %R()", Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant));
+		if (zend_u_hash_find(function_table, Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant), Z_UNILEN(opline->op2.u.constant)+1, (void *) &old_function)==SUCCESS) {
+			if (old_function->type == ZEND_USER_FUNCTION &&
+			    old_function->op_array.last > 0) {
+				zend_error(error_level, "Cannot redeclare %v() (previously declared in %s:%d)",
+					function->common.function_name,
+					old_function->op_array.filename,
+					old_function->op_array.opcodes[0].lineno);
+			} else if (old_function->type == ZEND_INTERNAL_FUNCTION &&
+			           old_function->internal_function.module) {
+				zend_error(error_level, "Cannot redeclare %v() (internal function exists in module %s)",
+					function->common.function_name,
+					old_function->internal_function.module->name);
+			}
 		}
+		zend_error(error_level, "Cannot redeclare %v()", function->common.function_name);
 		return FAILURE;
 	} else {
 		(*function->op_array.refcount)++;
@@ -3077,13 +3065,6 @@
 	/* Register the derived class */
 	if (zend_u_hash_add(class_table, Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant), Z_UNILEN(opline->op2.u.constant)+1, pce, sizeof(zend_class_entry *), NULL)==FAILURE) {
 		zend_error(E_COMPILE_ERROR, "Cannot redeclare class %v", ce->name);
-		ce->refcount--;
-		zend_hash_destroy(&ce->function_table);
-		zend_hash_destroy(&ce->default_properties);
-		zend_hash_destroy(&ce->properties_info);
-		zend_hash_destroy(&ce->default_static_members);
-		zend_hash_destroy(&ce->constants_table);
-		return NULL;
 	}
 	return ce;
 }
@@ -3560,8 +3541,6 @@
 {
 	zend_class_entry *ce = CG(active_class_entry);
 
-	do_inherit_parent_constructor(ce TSRMLS_CC);
-
 	if (ce->constructor) {
 		ce->constructor->common.fn_flags |= ZEND_ACC_CTOR;
 		if (ce->constructor->common.fn_flags & ZEND_ACC_STATIC) {
@@ -3586,7 +3565,7 @@
 	if (!(ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS))
 		&& ((parent_token->op_type != IS_UNUSED) || (ce->num_interfaces > 0))) {
 		zend_verify_abstract_class(ce TSRMLS_CC);
-		if (ce->parent || ce->num_interfaces) {
+		if (ce->num_interfaces) {
 			do_verify_abstract_class(TSRMLS_C);
 		}
 	}