Minor fix to previous patch.
I remeber Markus was suggesting "class_name::method_name()" in
error message. This one does that.
--
Yasuo Ohgaki
/usr/bin/diff: conflicting specifications of output style
--- zend_compile.c.~1.226.~ Tue Mar 26 17:48:18 2002
+++ zend_compile.c Thu Mar 28 11:24:00 2002
@@ -732,8 +732,23 @@
op_array.return_reference = return_reference;
if (is_method) {
- if (zend_hash_add(&CG(active_class_entry)->function_table, name,
name_len+1, &op_array, sizeof(zend_op_array), (void **) &CG(active_op_array)) ==
FAILURE) {
- zend_error(E_ERROR, "Cannot redeclare method %s()", name);
+ zend_class_entry *tmp;
+ void *dummy;
+ int overload = 0;
+ tmp = CG(active_class_entry)->parent;
+ while (tmp) {
+ if (zend_hash_find(&(tmp->function_table), name, name_len+1,
+(void **) &dummy) == SUCCESS) {
+ overload = 1;
+ }
+ tmp = tmp->parent;
+ }
+ if (overload) {
+ zend_hash_update(&CG(active_class_entry)->function_table,
+name, name_len+1, &op_array, sizeof(zend_op_array), (void **) &CG(active_op_array));
+ }
+ else {
+ if (zend_hash_add(&CG(active_class_entry)->function_table,
+name, name_len+1, &op_array, sizeof(zend_op_array), (void **) &CG(active_op_array))
+== FAILURE) {
+ zend_error(E_ERROR, "Cannot redeclare method
+%s::%s()", CG(active_class_entry)->name, name);
+ }
}
} else {
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php