summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2003-08-23 19:48:52 +0000
committerMarcus Boerger <helly@php.net>2003-08-23 19:48:52 +0000
commitc3d60fd7ff81d0604803868ccdaa74376dbee0bc (patch)
tree129d614cf2862aa74a85114d7330a9d6f8e25870
parent96fa63d6bfec1b2352ae54a4635d8b4fc914fefc (diff)
downloadphp-git-c3d60fd7ff81d0604803868ccdaa74376dbee0bc.tar.gz
Allow zend_throw_exception() to also set the exception code
-rw-r--r--Zend/zend_default_classes.c24
-rw-r--r--Zend/zend_default_classes.h2
-rw-r--r--Zend/zend_exceptions.c24
-rw-r--r--Zend/zend_exceptions.h2
-rw-r--r--Zend/zend_reflection_api.c2
-rw-r--r--ext/reflection/php_reflection.c2
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 */