diff options
| author | Andi Gutmans <andi@php.net> | 2003-03-01 14:57:49 +0000 | 
|---|---|---|
| committer | Andi Gutmans <andi@php.net> | 2003-03-01 14:57:49 +0000 | 
| commit | 1a7c0d52dc31623bd88a87e03849ab915275c49d (patch) | |
| tree | 572b3d18fe26d73dc945ee1c43d5fb831932e0c7 | |
| parent | 57f114969a97a6681cc3b2fc24a95318c4286b39 (diff) | |
| download | php-git-1a7c0d52dc31623bd88a87e03849ab915275c49d.tar.gz | |
- Make __construct() have higher priority than class name functions
- for constructors.
- Fix problem with the engine allowing final/abstract for the same method.
- Both patches are by Marcus Börger.
| -rw-r--r-- | Zend/zend_compile.c | 5 | 
1 files changed, 4 insertions, 1 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 180f3aaec4..70bdf25dc3 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -916,6 +916,9 @@ int zend_do_verify_access_types(znode *current_access_type, znode *new_modifier)  		&& ((current_access_type->u.constant.value.lval & ZEND_ACC_PPP_MASK) != (new_modifier->u.constant.value.lval & ZEND_ACC_PPP_MASK))) {  		zend_error(E_COMPILE_ERROR, "Multiple access type modifiers are not allowed");  	} +	if (((current_access_type->u.constant.value.lval | new_modifier->u.constant.value.lval) & (ZEND_ACC_ABSTRACT | ZEND_ACC_FINAL)) == (ZEND_ACC_ABSTRACT | ZEND_ACC_FINAL)) { +		zend_error(E_COMPILE_ERROR, "Cannot use the final modifier on an abstract class member"); +	}  	if (((current_access_type->u.constant.value.lval | new_modifier->u.constant.value.lval) & (ZEND_ACC_PRIVATE | ZEND_ACC_FINAL)) == (ZEND_ACC_PRIVATE | ZEND_ACC_FINAL)) {  		zend_error(E_COMPILE_ERROR, "Cannot use the final modifier on a private class member");  	} @@ -974,7 +977,7 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n  			fn_flags |= ZEND_ACC_PUBLIC;  		} -		if ((short_class_name_length == name_len) && (!memcmp(short_class_name, name, name_len))) { +		if ((short_class_name_length == name_len) && (!memcmp(short_class_name, name, name_len)) && !CG(active_class_entry)->constructor) {  			CG(active_class_entry)->constructor = (zend_function *) CG(active_op_array);  		} else if ((function_name->u.constant.value.str.len == sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) && (!memcmp(function_name->u.constant.value.str.val, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)))) {  			CG(active_class_entry)->constructor = (zend_function *) CG(active_op_array);  | 
