Hi,
Attached is a patch (+ 2 files) that add a default "exception" class to
Zend 2. I find this very useful when you just want to throw a simple
exception inside of a try {}, but you don't want to create a new
exception for each and every error. I'll commit this tommorowish,
unless somebody objects.
-Sterling
--
"Whether you think you can or think you can't -- you are right."
- Henry Ford
Index: Makefile.am
===================================================================
RCS file: /repository/ZendEngine2/Makefile.am,v
retrieving revision 1.51
diff -u -r1.51 Makefile.am
--- Makefile.am 17 Mar 2003 11:23:42 -0000 1.51
+++ Makefile.am 22 Mar 2003 21:13:12 -0000
@@ -14,7 +14,7 @@
zend_variables.c zend.c zend_API.c zend_extensions.c zend_hash.c \
zend_list.c zend_indent.c zend_builtin_functions.c zend_sprintf.c \
zend_ini.c zend_qsort.c zend_objects.c zend_object_handlers.c \
- zend_objects_API.c zend_ts_hash.c zend_stream.c zend_mm.c
+ zend_objects_API.c zend_ts_hash.c zend_stream.c zend_mm.c zend_default_interfaces.c
libZend_la_LDFLAGS =
libZend_la_LIBADD = @ZEND_EXTRA_LIBS@
Index: zend.c
===================================================================
RCS file: /repository/ZendEngine2/zend.c,v
retrieving revision 1.214
diff -u -r1.214 zend.c
--- zend.c 2 Mar 2003 10:04:53 -0000 1.214
+++ zend.c 22 Mar 2003 21:13:14 -0000
@@ -25,6 +25,7 @@
#include "zend_constants.h"
#include "zend_list.h"
#include "zend_API.h"
+#include "zend_default_interfaces.h"
#include "zend_builtin_functions.h"
#include "zend_ini.h"
@@ -609,6 +610,7 @@
if (start_builtin_functions) {
zend_startup_builtin_functions(TSRMLS_C);
}
+ zend_register_default_interfaces(TSRMLS_C);
zend_ini_startup(TSRMLS_C);
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| [EMAIL PROTECTED] so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Sterling Hughes <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
/* $Id: $ */
#include "zend.h"
#include "zend_API.h"
zend_class_entry *default_exception_ptr;
ZEND_FUNCTION(exception)
{
zval **message;
zval **code;
zval *object;
int argc = ZEND_NUM_ARGS();
if (zend_get_parameters_ex(argc, &message, &code) == FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
object = getThis();
if (argc > 0) {
convert_to_string_ex(message);
zval_add_ref(message);
zend_hash_update(Z_OBJPROP_P(object), "message", sizeof("message"), (void **) message, sizeof(zval *), NULL);
}
if (argc > 1) {
convert_to_long_ex(code);
zval_add_ref(code);
zend_hash_update(Z_OBJPROP_P(object), "code", sizeof("code"), (void **) code, sizeof(zval *), NULL);
}
}
ZEND_FUNCTION(getmessage)
{
zval **message;
zval *object;
if (ZEND_NUM_ARGS() > 0) {
ZEND_WRONG_PARAM_COUNT();
}
object = getThis();
if (zend_hash_find(Z_OBJPROP_P(object), "message", sizeof("message"), (void **) &message) == FAILURE) {
RETURN_FALSE;
}
*return_value = **message;
zval_copy_ctor(return_value);
}
ZEND_FUNCTION(getcode)
{
zval **code;
zval *object;
if (ZEND_NUM_ARGS() > 0) {
ZEND_WRONG_PARAM_COUNT();
}
object = getThis();
if (zend_hash_find(Z_OBJPROP_P(object), "code", sizeof("code"), (void **) &code) == FAILURE) {
RETURN_FALSE;
}
*return_value = **code;
zval_copy_ctor(return_value);
}
static zend_function_entry default_exception_functions[] = {
ZEND_FE(exception, NULL)
ZEND_FE(getmessage, NULL)
ZEND_FE(getcode, NULL)
{NULL, NULL, NULL}
};
static void zend_register_default_exception(TSRMLS_C)
{
zend_class_entry default_exception;
INIT_CLASS_ENTRY(default_exception, "exception", default_exception_functions);
default_exception_ptr = zend_register_internal_class(&default_exception TSRMLS_CC);
}
ZEND_API void zend_register_default_interfaces(TSRMLS_D)
{
zend_register_default_exception(TSRMLS_CC);
}
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
*/
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| [EMAIL PROTECTED] so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Sterling Hughes <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
/* $Id: $ */
#ifndef ZEND_DEFAULT_INTERFACES_H
#define ZEND_DEFAULT_INTERFACES_H
BEGIN_EXTERN_C()
ZEND_API void zend_register_default_interfaces(TSRMLS_D);
END_EXTERN_C()
#endif
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
*/
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php