]> granicus.if.org Git - php/commitdiff
Add property read code and use that in default exception class
authorMarcus Boerger <helly@php.net>
Sun, 24 Aug 2003 00:36:53 +0000 (00:36 +0000)
committerMarcus Boerger <helly@php.net>
Sun, 24 Aug 2003 00:36:53 +0000 (00:36 +0000)
Zend/zend_API.c
Zend/zend_API.h
Zend/zend_default_classes.c
Zend/zend_exceptions.c

index e25a11167794ac47922b340dd1a22973e2e7bd2d..50a2ad1de9c3e91af5175a7821098ba937aa880a 100644 (file)
@@ -1738,6 +1738,23 @@ ZEND_API void zend_update_property_string(zend_class_entry *scope, zval *object,
        zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC);
 }
 
+ZEND_API zval *zend_read_property(zend_class_entry *scope, zval *object, char *name, int name_length, zend_bool silent TSRMLS_DC)
+{
+       zval property, *value;
+       zend_class_entry *old_scope = EG(scope);
+       
+       EG(scope) = scope;
+
+       if (!Z_OBJ_HT_P(object)->read_property) {
+               zend_error(E_CORE_ERROR, "Property %s of class %s cannot be read", Z_OBJCE_P(object)->name, name);
+       }
+       ZVAL_STRINGL(&property, name, name_length, 0);
+       value = Z_OBJ_HT_P(object)->read_property(object, &property, silent TSRMLS_CC);
+
+       EG(scope) = old_scope;
+       return value;
+}
+
 /*
  * Local variables:
  * tab-width: 4
index 7e4ef3ad5bd67c292ae3f0edcc59a5672598fecc..02e0714311fdd172aa286ee7724cea3691a85add 100644 (file)
@@ -172,6 +172,8 @@ ZEND_API void zend_update_property_null(zend_class_entry *scope, zval *object, c
 ZEND_API void zend_update_property_long(zend_class_entry *scope, zval *object, char *name, int name_length, long value TSRMLS_DC);
 ZEND_API void zend_update_property_string(zend_class_entry *scope, zval *object, char *name, int name_length, char *value TSRMLS_DC);
 
+ZEND_API zval *zend_read_property(zend_class_entry *scope, zval *object, char *name, int name_length, zend_bool silent TSRMLS_DC);
+
 ZEND_API zend_class_entry *zend_get_class_entry(zval *zobject TSRMLS_DC);
 
 #define getThis() (this_ptr)
index 14fce64b38f17e433a48fe573a0f0c9dac5e15fe..f91507fea81232a22ea70ca5c34716fcf737b4f4 100644 (file)
@@ -72,13 +72,11 @@ ZEND_FUNCTION(exception)
 
 static void _default_exception_get_entry(zval *object, char *name, int name_len, zval *return_value TSRMLS_DC)
 {
-       zval **value;
+       zval *value;
 
-       if (zend_hash_find(Z_OBJPROP_P(object), name, name_len, (void **) &value) == FAILURE) {
-               RETURN_FALSE;
-       }
+       value = zend_read_property(Z_OBJCE_P(object), object, name, name_len, 0 TSRMLS_CC);
 
-       *return_value = **value;
+       *return_value = *value;
        zval_copy_ctor(return_value);
 }
 
@@ -86,28 +84,28 @@ ZEND_FUNCTION(getfile)
 {
        DEFAULT_0_PARAMS;
 
-       _default_exception_get_entry(getThis(), "file", sizeof("file"), return_value TSRMLS_CC);
+       _default_exception_get_entry(getThis(), "file", sizeof("file")-1, return_value TSRMLS_CC);
 }
 
 ZEND_FUNCTION(getline)
 {
        DEFAULT_0_PARAMS;
 
-       _default_exception_get_entry(getThis(), "line", sizeof("line"), return_value TSRMLS_CC);
+       _default_exception_get_entry(getThis(), "line", sizeof("line")-1, return_value TSRMLS_CC);
 }
 
 ZEND_FUNCTION(getmessage)
 {
        DEFAULT_0_PARAMS;
 
-       _default_exception_get_entry(getThis(), "message", sizeof("message"), return_value TSRMLS_CC);
+       _default_exception_get_entry(getThis(), "message", sizeof("message")-1, return_value TSRMLS_CC);
 }
 
 ZEND_FUNCTION(getcode)
 {
        DEFAULT_0_PARAMS;
 
-       _default_exception_get_entry(getThis(), "code", sizeof("code"), return_value TSRMLS_CC);
+       _default_exception_get_entry(getThis(), "code", sizeof("code")-1, return_value TSRMLS_CC);
 }
 
 static zend_function_entry default_exception_functions[] = {
index 14fce64b38f17e433a48fe573a0f0c9dac5e15fe..f91507fea81232a22ea70ca5c34716fcf737b4f4 100644 (file)
@@ -72,13 +72,11 @@ ZEND_FUNCTION(exception)
 
 static void _default_exception_get_entry(zval *object, char *name, int name_len, zval *return_value TSRMLS_DC)
 {
-       zval **value;
+       zval *value;
 
-       if (zend_hash_find(Z_OBJPROP_P(object), name, name_len, (void **) &value) == FAILURE) {
-               RETURN_FALSE;
-       }
+       value = zend_read_property(Z_OBJCE_P(object), object, name, name_len, 0 TSRMLS_CC);
 
-       *return_value = **value;
+       *return_value = *value;
        zval_copy_ctor(return_value);
 }
 
@@ -86,28 +84,28 @@ ZEND_FUNCTION(getfile)
 {
        DEFAULT_0_PARAMS;
 
-       _default_exception_get_entry(getThis(), "file", sizeof("file"), return_value TSRMLS_CC);
+       _default_exception_get_entry(getThis(), "file", sizeof("file")-1, return_value TSRMLS_CC);
 }
 
 ZEND_FUNCTION(getline)
 {
        DEFAULT_0_PARAMS;
 
-       _default_exception_get_entry(getThis(), "line", sizeof("line"), return_value TSRMLS_CC);
+       _default_exception_get_entry(getThis(), "line", sizeof("line")-1, return_value TSRMLS_CC);
 }
 
 ZEND_FUNCTION(getmessage)
 {
        DEFAULT_0_PARAMS;
 
-       _default_exception_get_entry(getThis(), "message", sizeof("message"), return_value TSRMLS_CC);
+       _default_exception_get_entry(getThis(), "message", sizeof("message")-1, return_value TSRMLS_CC);
 }
 
 ZEND_FUNCTION(getcode)
 {
        DEFAULT_0_PARAMS;
 
-       _default_exception_get_entry(getThis(), "code", sizeof("code"), return_value TSRMLS_CC);
+       _default_exception_get_entry(getThis(), "code", sizeof("code")-1, return_value TSRMLS_CC);
 }
 
 static zend_function_entry default_exception_functions[] = {