cvs: ZendEngine2 / zend_closures.c /tests closure_022.phpt
"Dmitry Stogov" <[email protected]>
| Newsgroups | gmane.comp.php.cvs.zend |
|---|---|
| Message-ID | <cvsdmitry1216711754@cvsserver> |
dmitry Tue Jul 22 07:29:14 2008 UTC
Added files:
/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.4&r2=1.5&diff_format=u
Index: ZendEngine2/zend_closures.c
diff -u ZendEngine2/zend_closures.c:1.4 ZendEngine2/zend_closures.c:1.5
--- ZendEngine2/zend_closures.c:1.4 Mon Jul 14 12:17:16 2008
+++ ZendEngine2/zend_closures.c Tue Jul 22 07:29:14 2008
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_closures.c,v 1.4 2008/07/14 12:17:16 dmitry Exp $ */
+/* $Id: zend_closures.c,v 1.5 2008/07/22 07:29:14 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;
@@ -146,6 +149,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;
@@ -207,6 +243,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
--
Zend Engine CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php