diff options
author | Marcus Boerger <helly@php.net> | 2003-08-23 19:48:52 +0000 |
---|---|---|
committer | Marcus Boerger <helly@php.net> | 2003-08-23 19:48:52 +0000 |
commit | c3d60fd7ff81d0604803868ccdaa74376dbee0bc (patch) | |
tree | 129d614cf2862aa74a85114d7330a9d6f8e25870 | |
parent | 96fa63d6bfec1b2352ae54a4635d8b4fc914fefc (diff) | |
download | php-git-c3d60fd7ff81d0604803868ccdaa74376dbee0bc.tar.gz |
Allow zend_throw_exception() to also set the exception code
-rw-r--r-- | Zend/zend_default_classes.c | 24 | ||||
-rw-r--r-- | Zend/zend_default_classes.h | 2 | ||||
-rw-r--r-- | Zend/zend_exceptions.c | 24 | ||||
-rw-r--r-- | Zend/zend_exceptions.h | 2 | ||||
-rw-r--r-- | Zend/zend_reflection_api.c | 2 | ||||
-rw-r--r-- | ext/reflection/php_reflection.c | 2 |
6 files changed, 20 insertions, 36 deletions
diff --git a/Zend/zend_default_classes.c b/Zend/zend_default_classes.c index 5c3680fa39..14fce64b38 100644 --- a/Zend/zend_default_classes.c +++ b/Zend/zend_default_classes.c @@ -13,6 +13,7 @@ | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Sterling Hughes <sterling@php.net> | + | Marcus Boerger <helly@php.net> | +----------------------------------------------------------------------+ */ @@ -46,7 +47,6 @@ ZEND_FUNCTION(exception) { char *message = NULL; long code = 0; - zval *tmp; zval *object; int argc = ZEND_NUM_ARGS(), message_len; @@ -138,27 +138,19 @@ ZEND_API zend_class_entry *zend_exception_get_default(void) return default_exception_ptr; } -ZEND_API void zend_throw_exception(char *message, int duplicate TSRMLS_DC) +ZEND_API void zend_throw_exception(char *message, long code TSRMLS_DC) { zval *ex; - zval *tmp; - HashTable *properties; MAKE_STD_ZVAL(ex); object_init_ex(ex, default_exception_ptr); - properties = Z_OBJPROP_P(ex); - MAKE_STD_ZVAL(tmp); - ZVAL_STRING(tmp, message, duplicate); - zend_hash_update(properties, "message", sizeof("message"), (void **) &tmp, sizeof(zval *), NULL); - - MAKE_STD_ZVAL(tmp); - ZVAL_STRING(tmp, zend_get_executed_filename(TSRMLS_C), 1); - zend_hash_update(properties, "file", sizeof("file"), (void **) &tmp, sizeof(zval *), NULL); - - MAKE_STD_ZVAL(tmp); - ZVAL_LONG(tmp, zend_get_executed_lineno(TSRMLS_C)); - zend_hash_update(properties, "line", sizeof("line"), (void **) &tmp, sizeof(zval *), NULL); + if (message) { + zend_update_property_string(default_exception_ptr, ex, "message", sizeof("message")-1, message TSRMLS_CC); + } + if (code) { + zend_update_property_long(default_exception_ptr, ex, "code", sizeof("code")-1, code TSRMLS_CC); + } EG(exception) = ex; } diff --git a/Zend/zend_default_classes.h b/Zend/zend_default_classes.h index 1c64d95921..36ebb7725f 100644 --- a/Zend/zend_default_classes.h +++ b/Zend/zend_default_classes.h @@ -24,7 +24,7 @@ BEGIN_EXTERN_C() ZEND_API zend_class_entry *zend_exception_get_default(void); -ZEND_API void zend_throw_exception(char *message, int duplicate TSRMLS_DC); +ZEND_API void zend_throw_exception(char *message, long code TSRMLS_DC); ZEND_API void zend_register_default_classes(TSRMLS_D); END_EXTERN_C() diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c index 5c3680fa39..14fce64b38 100644 --- a/Zend/zend_exceptions.c +++ b/Zend/zend_exceptions.c @@ -13,6 +13,7 @@ | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Sterling Hughes <sterling@php.net> | + | Marcus Boerger <helly@php.net> | +----------------------------------------------------------------------+ */ @@ -46,7 +47,6 @@ ZEND_FUNCTION(exception) { char *message = NULL; long code = 0; - zval *tmp; zval *object; int argc = ZEND_NUM_ARGS(), message_len; @@ -138,27 +138,19 @@ ZEND_API zend_class_entry *zend_exception_get_default(void) return default_exception_ptr; } -ZEND_API void zend_throw_exception(char *message, int duplicate TSRMLS_DC) +ZEND_API void zend_throw_exception(char *message, long code TSRMLS_DC) { zval *ex; - zval *tmp; - HashTable *properties; MAKE_STD_ZVAL(ex); object_init_ex(ex, default_exception_ptr); - properties = Z_OBJPROP_P(ex); - MAKE_STD_ZVAL(tmp); - ZVAL_STRING(tmp, message, duplicate); - zend_hash_update(properties, "message", sizeof("message"), (void **) &tmp, sizeof(zval *), NULL); - - MAKE_STD_ZVAL(tmp); - ZVAL_STRING(tmp, zend_get_executed_filename(TSRMLS_C), 1); - zend_hash_update(properties, "file", sizeof("file"), (void **) &tmp, sizeof(zval *), NULL); - - MAKE_STD_ZVAL(tmp); - ZVAL_LONG(tmp, zend_get_executed_lineno(TSRMLS_C)); - zend_hash_update(properties, "line", sizeof("line"), (void **) &tmp, sizeof(zval *), NULL); + if (message) { + zend_update_property_string(default_exception_ptr, ex, "message", sizeof("message")-1, message TSRMLS_CC); + } + if (code) { + zend_update_property_long(default_exception_ptr, ex, "code", sizeof("code")-1, code TSRMLS_CC); + } EG(exception) = ex; } diff --git a/Zend/zend_exceptions.h b/Zend/zend_exceptions.h index 1c64d95921..36ebb7725f 100644 --- a/Zend/zend_exceptions.h +++ b/Zend/zend_exceptions.h @@ -24,7 +24,7 @@ BEGIN_EXTERN_C() ZEND_API zend_class_entry *zend_exception_get_default(void); -ZEND_API void zend_throw_exception(char *message, int duplicate TSRMLS_DC); +ZEND_API void zend_throw_exception(char *message, long code TSRMLS_DC); ZEND_API void zend_register_default_classes(TSRMLS_D); END_EXTERN_C() diff --git a/Zend/zend_reflection_api.c b/Zend/zend_reflection_api.c index 2710e83518..278cd3fb76 100644 --- a/Zend/zend_reflection_api.c +++ b/Zend/zend_reflection_api.c @@ -47,7 +47,7 @@ /* Exception throwing macro */ #define _DO_THROW(msg) \ - zend_throw_exception(msg, 1 TSRMLS_CC); \ + zend_throw_exception(msg, 0 TSRMLS_CC); \ return; \ /* Smart string macros */ diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 2710e83518..278cd3fb76 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -47,7 +47,7 @@ /* Exception throwing macro */ #define _DO_THROW(msg) \ - zend_throw_exception(msg, 1 TSRMLS_CC); \ + zend_throw_exception(msg, 0 TSRMLS_CC); \ return; \ /* Smart string macros */ |