Re: [PHP-DEV] ZE2 constructors
[email protected] (Andi Gutmans)
| Newsgroups | php.dev |
|---|---|
| Message-ID | <[email protected]> |
The patch look OK. Go ahead and commit it.
Andi
At 08:20 PM 2/28/2003 +0100, Marcus Börger wrote:
>Hi Zeev,
>
>according to the plans the following test file should PASS:
>
>################
>--TEST--
>The new constructor/destructor is called
>--SKIPIF--
><?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip
>ZendEngine 2 needed'); ?>
>--FILE--
><?php
>
>class early {
> function early() {
> echo "early::early\n";
> }
> function __construct() {
> echo "early::__construct\n";
> }
> function __destruct() {
> echo "early::__destruct\n";
> }
>}
>
>class late {
> function __construct() {
> echo "late::__construct\n";
> }
> function late() {
> echo "late::late\n";
> }
> function __destruct() {
> echo "late::__destruct\n";
> }
>}
>
>$t = new early();
>$t->early();
>unset($t);
>$t = new late();
>$t->late();
>//unset($t); delay to end of script
>
>echo "Done\n";
>?>
>--EXPECTF--
>early::__construct
>early::early
>early::__destruct
>late::__construct
>late::late
>Done
>late::__destruct
>#########################
>
>However it fails and this patch is needed which also fixees the last final
>problem
>mentioned already:
>
>#########################
>Index: Zend/zend_compile.c
>===================================================================
>RCS file: /repository/ZendEngine2/zend_compile.c,v
>retrieving revision 1.375
>diff -u -r1.375 zend_compile.c
>--- Zend/zend_compile.c 25 Feb 2003 10:03:26 -0000 1.375
>+++ Zend/zend_compile.c 28 Feb 2003 19:14:52 -0000
>@@ -916,6 +916,9 @@
> && ((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 @@
> 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);
>#########################
>
>regards
>marcus
>
>
>
>--
>----------------------------------------------------------------------
>Marcus Börger - Looking for all sorts of freelance work - just ask...
>
>Did i help you? Consider a gift:
>http://www.amazon.de/exec/obidos/wishlist/ho722v0rg1u0
>----------------------------------------------------------------------