Hi Dmitry, I gave up on IM now, it's too slow :)
Coming from the PHP-GTK project, we've noticed two areas where ZEND_INTERNAL_CLASS is wrongly expected to adhere to zend_object structure.
The more important of the two stems from a change you made in mid-November in CVS_HEAD and PHP_5_1, forcing a call to zend_objects_destroy_object() when there is no obj->dtor defined. (zend_objects_API.c, revision 1.47.2.3). Reaching that function causes a crash in PHP-GTK 2 under some circumstances. Bug report open on this behaviour at http://bugs.php.net/35871.
The second is that we can't guarantee third party objects will pass zend_do_perform_implementation_check()... so if display_startup_errors is on, we get to know about it every time GTK+ objects break PHP's inheritance rules. Trivial patch attached appears to fix this minor issue without breaking anything currently in the test suite, but you might know better.
- Steph
Index: ZendEngine2/zend_compile.c =================================================================== RCS file: /repository/ZendEngine2/zend_compile.c,v retrieving revision 1.676 diff -u -r1.676 zend_compile.c --- ZendEngine2/zend_compile.c 17 Dec 2005 15:50:24 -0000 1.676 +++ ZendEngine2/zend_compile.c 3 Jan 2006 22:02:10 -0000 @@ -2009,6 +2009,10 @@ { zend_uint i; + if (fe->common.type == ZEND_INTERNAL_CLASS) { + return 1; + } + /* If it's a user function then arg_info == NULL means we don't have any parameters but we still need to do the arg number checks. We are only willing to ignore this for internal functions because extensions don't always define arg_info. */ if (!proto || (!proto->common.arg_info && proto->common.type != ZEND_USER_FUNCTION)) { return 1;
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php