The attached patch modifies zend_language_parser, having it generate a
compiler error when final is used on a class property (since we are only
allowing it for methods.)
-Sterling
--
"First they ignore you, then they laugh at you,
then they fight you, then you win."
- Gandhi
The attached patch modifies zend_language_parser, having it generate a
compiler error when final is used on a class property (since we are only
allowing it for methods.)
You could then also drop:
if (parent_info->flags & ZEND_ACC_FINAL) {
zend_error(E_COMPILE_ERROR, "Cannot override final property %s::$%s",
parent_ce->name, hash_key->arKey);
}
and
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");
}
and
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");
}
from zend_compile.c
- Timm
At 19:46 19.04.2003, Timm Friebe wrote:
The attached patch modifies zend_language_parser, having it generate a
compiler error when final is used on a class property (since we are only
allowing it for methods.)You could then also drop:
if (parent_info->flags & ZEND_ACC_FINAL) {
zend_error(E_COMPILE_ERROR, "Cannot override final property %s::$%s",
parent_ce->name, hash_key->arKey);
}
Only the above. The other two are needed for method checks.
marcus