Hi all :-) Please forgive my intrusion - I just wanted to submit this patch for a what others and I believe might be a bug . Basically, this patch fixes a problem where, if a class emits an error during declaration (ie: after active_class_entry is set in the function zend_do_begin_class_declaration but before it is nulled in function zend_do_end_class_declaration), and the user defined error handler function include()'s or require()'s a file containing another class definition, then the compiler will error out with an error stating "Class declarations may not be nested."
For example code, see bug #35634 (http://bugs.php.net/bug.php?id=35634). The code in the example provided by the bug shows that the class ErrorClass is technically declared globally within the scope of the class TestClass as TestClass is being parsed during the E_STRICT emit. But the new class really *is* being declared within the scope of the error handler function which is the one including the 'errorClass' file. However, due to the fact that the error triggered happens during the class declaration, active_class_entry is still set, and thus, when the class being included within the user defined error handler is parsed, it finds that active_class_entry is already set (to TestClass), so instead of emitting the E_STRICT, it now emits an E_COMPILE_ERROR when it shouldn't. This patch makes a change to zend.c:zend_error() such that, *just prior* to calling a user defined error handler, it will store the value of active_class_entry in a temporary variable, and then NULL it, make the call to the error handler, and then restore the value of active_class_entry. Thank you for your time. :-) Cheers!, -- Carl P. Corliss (aka Rabbitt) -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php