Re: cvs: ZendEngine2(PHP_5_3) / zend_closures.c /tests closure_022.phpt
Marcus Boerger <[email protected]>
| Newsgroups | gmane.comp.php.cvs.zend |
|---|---|
| Message-ID | <[email protected]> |
Hello Dmitry,
you implemented all property handlers and have them all issue an error
message. How about allowing setting the property handlers all to NULL and
have the errors be generated in the enhine instead?
marcus
Thursday, July 24, 2008, 8:42:04 AM, you wrote:
> Hi Marcus,
> Sorry, but I don't understand what do you propose?
> Thanks. Dmitry.
> Marcus Boerger wrote:
>> Hello Dmitry,
>>
>> assuming they could, somehow, that would be kind of local static
>> variables, right? So that would be keeping state accross calls. Which
>> we can do already. But other than that you are of course right that
>> they cannot have properties. The last thing you made me wonder about
>> is whether setting the handlers to NULL shouldn't trigge the errors
>> already so that not all (strange) objects have to do this.
>>
>> marcus
>>
>> Tuesday, July 22, 2008, 9:29:31 AM, you wrote:
>>
>>> dmitry Tue Jul 22 07:29:31 2008 UTC
>>
>>> Added files: (Branch: PHP_5_3)
>>> /ZendEngine2/tests closure_022.phpt
>>
>>> Modified files:
>>> /ZendEngine2 zend_closures.c
>>> Log:
>>> Closure object cannot have properties
>>>
>>>
>>> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_closures.c?r1=1.3.2.3&r2=1.3.2.4&diff_format=u
>>> Index: ZendEngine2/zend_closures.c
>>> diff -u ZendEngine2/zend_closures.c:1.3.2.3 ZendEngine2/zend_closures.c:1.3.2.4
>>> --- ZendEngine2/zend_closures.c:1.3.2.3 Mon Jul 14 12:18:20 2008
>>> +++ ZendEngine2/zend_closures.c Tue Jul 22 07:29:31 2008
>>> @@ -17,7 +17,7 @@
>>>
>>> +----------------------------------------------------------------------+
>>> */
>>>
>>> -/* $Id: zend_closures.c,v 1.3.2.3 2008/07/14 12:18:20 dmitry Exp $ */
>>> +/* $Id: zend_closures.c,v 1.3.2.4 2008/07/22 07:29:31 dmitry Exp $ */
>>>
>>> #include "zend.h"
>>> #include "zend_API.h"
>>> @@ -29,6 +29,9 @@
>>> #define ZEND_INVOKE_FUNC_NAME "__invoke"
>>> #define ZEND_CLOSURE_PRINT_NAME "Closure object"
>>>
>>> +#define ZEND_CLOSURE_PROPERTY_ERROR() \
>>> + zend_error(E_ERROR, "Closure object cannot have properties")
>>> +
>>> typedef struct _zend_closure {
>>> zend_object std;
>>> zend_function func;
>>> @@ -137,6 +140,39 @@
>>> }
>>> /* }}} */
>>>
>>> +static zval *zend_closure_read_property(zval *object, zval *member, int type TSRMLS_DC) /* {{{ */
>>> +{
>>> + ZEND_CLOSURE_PROPERTY_ERROR();
>>> + return NULL;
>>> +}
>>> +/* }}} */
>>> +
>>> +static void zend_closure_write_property(zval *object, zval *member, zval *value TSRMLS_DC) /* {{{ */
>>> +{
>>> + ZEND_CLOSURE_PROPERTY_ERROR();
>>> +}
>>> +/* }}} */
>>> +
>>> +static zval **zend_closure_get_property_ptr_ptr(zval *object, zval *member TSRMLS_DC) /* {{{ */
>>> +{
>>> + ZEND_CLOSURE_PROPERTY_ERROR();
>>> + return NULL;
>>> +}
>>> +/* }}} */
>>> +
>>> +static int zend_closure_has_property(zval *object, zval *member, int has_set_exists TSRMLS_DC) /* {{{ */
>>> +{
>>> + ZEND_CLOSURE_PROPERTY_ERROR();
>>> + return 0;
>>> +}
>>> +/* }}} */
>>> +
>>> +static void zend_closure_unset_property(zval *object, zval *member TSRMLS_DC) /* {{{ */
>>> +{
>>> + ZEND_CLOSURE_PROPERTY_ERROR();
>>> +}
>>> +/* }}} */
>>> +
>>> static void zend_closure_free_storage(void *object TSRMLS_DC) /* {{{ */
>>> {
>>> zend_closure *closure = (zend_closure *)object;
>>> @@ -195,6 +231,11 @@
>>> memcpy(&closure_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
>>> closure_handlers.get_constructor = zend_closure_get_constructor;
>>> closure_handlers.get_method = zend_closure_get_method;
>>> + closure_handlers.write_property = zend_closure_write_property;
>>> + closure_handlers.read_property = zend_closure_read_property;
>>> + closure_handlers.get_property_ptr_ptr = zend_closure_get_property_ptr_ptr;
>>> + closure_handlers.has_property = zend_closure_has_property;
>>> + closure_handlers.unset_property = zend_closure_unset_property;
>>> closure_handlers.compare_objects = zend_closure_compare_objects;
>>> closure_handlers.cast_object = zend_closure_cast_object_tostring;
>>> closure_handlers.clone_obj = NULL;
>>
>>> http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/closure_022.phpt?view=markup&rev=1.1
>>> Index: ZendEngine2/tests/closure_022.phpt
>>> +++ ZendEngine2/tests/closure_022.phpt
>>> --TEST--
>>> Closure 022: Closure properties
>>> --FILE--
>>> <?php
>>> $a = 0;
>>> $foo = function() use ($a) {
>>> };
>>> $foo->a = 1;
>> ?>>
>>> --EXPECTF--
>>> Fatal error: Closure object cannot have properties in %sclosure_022.php on line 5
>>
>>
>>
>>
>>
>>
>>
>> Best regards,
>> Marcus
>>
Best regards,
Marcus
--
Zend Engine CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php