cvs: ZendEngine2 / zend_builtin_functions.c

From: Date: Sun, 07 Dec 2003 18:54:31 +0000
Subject: cvs: ZendEngine2 / zend_builtin_functions.c
Groups: php.zend-engine.cvs 
Request: Send a blank email to php-zend-engine-cvs+get-2085@lists.php.net to get a copy of this message
stas Sun Dec 7 13:54:31 2003 EDT Modified files: /ZendEngine2 zend_builtin_functions.c Log: Apply Andrey Hristov's patch adding get_declared_interfaces() Index: ZendEngine2/zend_builtin_functions.c diff -u ZendEngine2/zend_builtin_functions.c:1.218 ZendEngine2/zend_builtin_functions.c:1.219 --- ZendEngine2/zend_builtin_functions.c:1.218 Mon Dec 1 06:53:42 2003 +++ ZendEngine2/zend_builtin_functions.c Sun Dec 7 13:54:31 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_builtin_functions.c,v 1.218 2003/12/01 11:53:42 andi Exp $ */ +/* $Id: zend_builtin_functions.c,v 1.219 2003/12/07 18:54:31 stas Exp $ */ #include "zend.h" #include "zend_API.h" @@ -63,6 +63,7 @@ static ZEND_FUNCTION(set_exception_handler); static ZEND_FUNCTION(restore_exception_handler); static ZEND_FUNCTION(get_declared_classes); +static ZEND_FUNCTION(get_declared_interfaces); static ZEND_FUNCTION(get_defined_functions); static ZEND_FUNCTION(get_defined_vars); static ZEND_FUNCTION(create_function); @@ -122,6 +123,7 @@ ZEND_FE(set_exception_handler, NULL) ZEND_FE(restore_exception_handler, NULL) ZEND_FE(get_declared_classes, NULL) + ZEND_FE(get_declared_interfaces, NULL) ZEND_FE(get_defined_functions, NULL) ZEND_FE(get_defined_vars, NULL) ZEND_FE(create_function, NULL) @@ -1046,15 +1048,19 @@ /* }}} */ -static int copy_class_name(zend_class_entry **pce, int num_args, va_list args, zend_hash_key *hash_key) +static int copy_class_or_interface_name(zend_class_entry **pce, int num_args, va_list args, zend_hash_key *hash_key) { zval *array = va_arg(args, zval *); + int mask = va_arg(args, int); + int comply = va_arg(args, int); + int comply_mask = (comply)? mask:0; zend_class_entry *ce = *pce; - if (hash_key->nKeyLength==0 || hash_key->arKey[0]!=0) { + if ((hash_key->nKeyLength==0 || hash_key->arKey[0]!=0) + && (comply_mask == (ce->ce_flags & mask))) { add_next_index_stringl(array, ce->name, ce->name_length, 1); } - return 0; + return ZEND_HASH_APPLY_KEEP; } @@ -1062,11 +1068,31 @@ Returns an array of all declared classes. */ ZEND_FUNCTION(get_declared_classes) { + int mask = ZEND_ACC_INTERFACE; + int comply = 0; + if (ZEND_NUM_ARGS() != 0) { ZEND_WRONG_PARAM_COUNT(); } + + array_init(return_value); + zend_hash_apply_with_arguments(EG(class_table), (apply_func_args_t) copy_class_or_interface_name, 3, return_value, mask, comply); +} +/* }}} */ + +/* {{{ proto array get_declared_interfaces() + Returns an array of all declared interfaces. */ +ZEND_FUNCTION(get_declared_interfaces) +{ + int mask = ZEND_ACC_INTERFACE; + int comply = 1; + + if (ZEND_NUM_ARGS() != 0) { + ZEND_WRONG_PARAM_COUNT(); + } + array_init(return_value); - zend_hash_apply_with_arguments(EG(class_table), (apply_func_args_t) copy_class_name, 1, return_value); + zend_hash_apply_with_arguments(EG(class_table), (apply_func_args_t) zend_copy_class_or_interface_name, 3, return_value, mask, comply); } /* }}} */

« previous php.zend-engine.cvs (#2085) next »