1999-04-08 02:10:10 +08:00
/*
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Zend Engine |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
2002-12-31 23:59:15 +08:00
| Copyright ( c ) 1998 - 2003 Zend Technologies Ltd . ( http : //www.zend.com) |
1999-04-08 02:10:10 +08:00
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
2001-12-11 23:16:21 +08:00
| This source file is subject to version 2.00 of the Zend license , |
1999-07-16 22:58:16 +08:00
| that is bundled with this package in the file LICENSE , and is |
| available at through the world - wide - web at |
2001-12-11 23:16:21 +08:00
| http : //www.zend.com/license/2_00.txt. |
1999-07-16 22:58:16 +08:00
| 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 |
| license @ zend . com so we can mail you a copy immediately . |
1999-04-08 02:10:10 +08:00
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Authors : Andi Gutmans < andi @ zend . com > |
| Zeev Suraski < zeev @ zend . com > |
2001-07-10 02:51:29 +08:00
| Andrei Zmievski < andrei @ php . net > |
1999-04-08 02:10:10 +08:00
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
*/
1999-07-16 22:58:16 +08:00
2000-07-03 07:54:19 +08:00
# ifndef ZEND_API_H
# define ZEND_API_H
1999-04-08 02:10:10 +08:00
2001-02-27 02:18:34 +08:00
# include "zend_modules.h"
1999-04-08 02:10:10 +08:00
# include "zend_list.h"
1999-12-28 03:07:33 +08:00
# include "zend_fast_cache.h"
2000-03-26 03:10:07 +08:00
# include "zend_operators.h"
# include "zend_variables.h"
2000-06-14 01:58:33 +08:00
# include "zend_execute.h"
1999-04-08 02:10:10 +08:00
2002-05-20 15:17:30 +08:00
BEGIN_EXTERN_C ( )
2001-08-11 00:19:49 +08:00
# define ZEND_FN(name) zif_##name
1999-04-18 23:11:52 +08:00
# define ZEND_NAMED_FUNCTION(name) void name(INTERNAL_FUNCTION_PARAMETERS)
2000-03-30 01:13:16 +08:00
# define ZEND_FUNCTION(name) ZEND_NAMED_FUNCTION(ZEND_FN(name))
# define ZEND_NAMED_FE(zend_name, name, arg_types) { #zend_name, name, arg_types },
# define ZEND_FE(name, arg_types) ZEND_NAMED_FE(name, ZEND_FN(name), arg_types)
# define ZEND_FALIAS(name, alias, arg_types) ZEND_NAMED_FE(name, ZEND_FN(alias), arg_types)
2001-08-10 21:39:35 +08:00
# define ZEND_STATIC_FE(name, impl_name, arg_types) { name, impl_name, arg_types },
1999-04-18 23:11:52 +08:00
2001-08-11 00:19:49 +08:00
/* Name macros */
# define ZEND_MODULE_STARTUP_N(module) zm_startup_##module
# define ZEND_MODULE_SHUTDOWN_N(module) zm_shutdown_##module
# define ZEND_MODULE_ACTIVATE_N(module) zm_activate_##module
# define ZEND_MODULE_DEACTIVATE_N(module) zm_deactivate_##module
# define ZEND_MODULE_INFO_N(module) zm_info_##module
1999-04-18 23:11:52 +08:00
2001-08-11 00:19:49 +08:00
/* Declaration macros */
# define ZEND_MODULE_STARTUP_D(module) int ZEND_MODULE_STARTUP_N(module)(INIT_FUNC_ARGS)
# define ZEND_MODULE_SHUTDOWN_D(module) int ZEND_MODULE_SHUTDOWN_N(module)(SHUTDOWN_FUNC_ARGS)
# define ZEND_MODULE_ACTIVATE_D(module) int ZEND_MODULE_ACTIVATE_N(module)(INIT_FUNC_ARGS)
# define ZEND_MODULE_DEACTIVATE_D(module) int ZEND_MODULE_DEACTIVATE_N(module)(SHUTDOWN_FUNC_ARGS)
# define ZEND_MODULE_INFO_D(module) void ZEND_MODULE_INFO_N(module)(ZEND_MODULE_INFO_FUNC_ARGS)
1999-04-18 23:11:52 +08:00
2000-05-02 09:33:18 +08:00
# define ZEND_GET_MODULE(name) \
ZEND_DLEXPORT zend_module_entry * get_module ( void ) { return & name # # _module_entry ; }
2000-04-01 22:15:20 +08:00
# define ZEND_BEGIN_MODULE_GLOBALS(module_name) \
typedef struct _zend_ # # module_name # # _globals {
# define ZEND_END_MODULE_GLOBALS(module_name) \
} zend_ # # module_name # # _globals ;
# ifdef ZTS
# define ZEND_DECLARE_MODULE_GLOBALS(module_name) \
2001-04-20 01:51:23 +08:00
ts_rsrc_id module_name # # _globals_id ;
# define ZEND_EXTERN_MODULE_GLOBALS(module_name) \
extern ts_rsrc_id module_name # # _globals_id ;
2000-04-01 22:15:20 +08:00
# define ZEND_INIT_MODULE_GLOBALS(module_name, globals_ctor, globals_dtor) \
2001-07-27 18:10:39 +08:00
ts_allocate_id ( & module_name # # _globals_id , sizeof ( zend_ # # module_name # # _globals ) , ( ts_allocate_ctor ) globals_ctor , ( ts_allocate_dtor ) globals_dtor ) ;
2000-04-01 22:15:20 +08:00
# else
# define ZEND_DECLARE_MODULE_GLOBALS(module_name) \
2001-04-20 01:51:23 +08:00
zend_ # # module_name # # _globals module_name # # _globals ;
# define ZEND_EXTERN_MODULE_GLOBALS(module_name) \
extern zend_ # # module_name # # _globals module_name # # _globals ;
2000-04-01 22:15:20 +08:00
# define ZEND_INIT_MODULE_GLOBALS(module_name, globals_ctor, globals_dtor) \
globals_ctor ( & module_name # # _globals ) ;
# endif
2002-06-09 22:20:37 +08:00
# define INIT_CLASS_ENTRY(class_container, class_name, functions) INIT_OVERLOADED_CLASS_ENTRY(class_container, class_name, functions, NULL, NULL, NULL)
1999-05-28 20:06:59 +08:00
# define INIT_OVERLOADED_CLASS_ENTRY(class_container, class_name, functions, handle_fcall, handle_propget, handle_propset) \
{ \
class_container . name = strdup ( class_name ) ; \
class_container . name_length = sizeof ( class_name ) - 1 ; \
class_container . builtin_functions = functions ; \
2001-11-03 20:19:52 +08:00
class_container . constructor = NULL ; \
2001-12-27 22:35:09 +08:00
class_container . destructor = NULL ; \
2001-12-27 03:54:20 +08:00
class_container . clone = NULL ; \
2002-02-07 22:08:43 +08:00
class_container . create_object = NULL ; \
1999-05-28 20:06:59 +08:00
class_container . handle_function_call = handle_fcall ; \
class_container . handle_property_get = handle_propget ; \
class_container . handle_property_set = handle_propset ; \
}
1999-04-08 02:10:10 +08:00
int zend_next_free_module ( void ) ;
2000-02-19 21:11:39 +08:00
ZEND_API int zend_get_parameters ( int ht , int param_count , . . . ) ;
2001-07-30 10:07:52 +08:00
ZEND_API int _zend_get_parameters_array ( int ht , int param_count , zval * * argument_array TSRMLS_DC ) ;
2000-02-19 21:11:39 +08:00
ZEND_API int zend_get_parameters_ex ( int param_count , . . . ) ;
2001-07-30 10:07:52 +08:00
ZEND_API int _zend_get_parameters_array_ex ( int param_count , zval * * * argument_array TSRMLS_DC ) ;
# define zend_get_parameters_array(ht, param_count, argument_array) \
_zend_get_parameters_array ( ht , param_count , argument_array TSRMLS_CC )
# define zend_get_parameters_array_ex(param_count, argument_array) \
_zend_get_parameters_array_ex ( param_count , argument_array TSRMLS_CC )
1999-04-15 03:53:33 +08:00
2001-07-10 02:51:29 +08:00
/* Parameter parsing API -- andrei */
# define ZEND_PARSE_PARAMS_QUIET 1<<1
2001-07-30 12:54:16 +08:00
ZEND_API int zend_parse_parameters ( int num_args TSRMLS_DC , char * type_spec , . . . ) ;
2001-07-30 13:05:26 +08:00
ZEND_API int zend_parse_parameters_ex ( int flags , int num_args TSRMLS_DC , char * type_spec , . . . ) ;
2002-01-03 22:19:13 +08:00
ZEND_API char * zend_zval_type_name ( zval * arg ) ;
2001-07-10 02:51:29 +08:00
2001-07-30 13:34:21 +08:00
/* End of parameter parsing API -- andrei */
1999-04-15 03:53:33 +08:00
2002-11-24 04:44:12 +08:00
int zend_register_functions ( zend_class_entry * scope , zend_function_entry * functions , HashTable * function_table , int type TSRMLS_DC ) ;
2001-07-30 09:48:22 +08:00
void zend_unregister_functions ( zend_function_entry * functions , int count , HashTable * function_table TSRMLS_DC ) ;
1999-04-21 11:49:09 +08:00
ZEND_API int zend_register_module ( zend_module_entry * module_entry ) ;
2000-06-09 22:40:14 +08:00
2001-07-30 09:48:22 +08:00
ZEND_API zend_class_entry * zend_register_internal_class ( zend_class_entry * class_entry TSRMLS_DC ) ;
ZEND_API zend_class_entry * zend_register_internal_class_ex ( zend_class_entry * class_entry , zend_class_entry * parent_ce , char * parent_name TSRMLS_DC ) ;
2000-06-09 22:40:14 +08:00
1999-05-09 20:24:21 +08:00
ZEND_API zend_module_entry * zend_get_module ( int module_number ) ;
2001-07-31 12:53:54 +08:00
ZEND_API int zend_disable_function ( char * function_name , uint function_name_length TSRMLS_DC ) ;
1999-04-08 02:10:10 +08:00
2001-07-30 15:43:02 +08:00
ZEND_API void zend_wrong_param_count ( TSRMLS_D ) ;
2001-03-12 11:08:28 +08:00
ZEND_API zend_bool zend_is_callable ( zval * callable , zend_bool syntax_only , char * * callable_name ) ;
2001-10-13 02:40:30 +08:00
ZEND_API char * zend_get_module_version ( char * module_name ) ;
1999-04-08 02:10:10 +08:00
2002-04-30 17:56:48 +08:00
ZEND_API zend_class_entry * zend_get_class_entry ( zval * zobject ) ;
2002-04-22 22:22:27 +08:00
1999-05-28 20:06:59 +08:00
# define getThis() (this_ptr)
2000-04-02 00:23:13 +08:00
# define WRONG_PARAM_COUNT ZEND_WRONG_PARAM_COUNT()
# define WRONG_PARAM_COUNT_WITH_RETVAL(ret) ZEND_WRONG_PARAM_COUNT_WITH_RETVAL(ret)
1999-12-19 06:40:35 +08:00
# define ARG_COUNT(dummy) (ht)
# define ZEND_NUM_ARGS() (ht)
2001-07-30 15:43:02 +08:00
# define ZEND_WRONG_PARAM_COUNT() { zend_wrong_param_count(TSRMLS_C); return; }
# define ZEND_WRONG_PARAM_COUNT_WITH_RETVAL(ret) { zend_wrong_param_count(TSRMLS_C); return ret; }
1999-04-08 02:10:10 +08:00
2000-02-11 23:59:30 +08:00
# ifndef ZEND_WIN32
1999-04-08 02:10:10 +08:00
# define DLEXPORT
# endif
2000-02-04 02:51:33 +08:00
ZEND_API int zend_startup_module ( zend_module_entry * module ) ;
1999-04-08 02:10:10 +08:00
2000-02-20 03:21:45 +08:00
# define array_init(arg) _array_init((arg) ZEND_FILE_LINE_CC)
2001-08-05 09:37:10 +08:00
# define object_init(arg) _object_init((arg) ZEND_FILE_LINE_CC TSRMLS_CC)
# define object_init_ex(arg, ce) _object_init_ex((arg), (ce) ZEND_FILE_LINE_CC TSRMLS_CC)
2001-08-12 02:26:47 +08:00
# define object_and_properties_init(arg, ce, properties) _object_and_properties_init((arg), (ce), (properties) ZEND_FILE_LINE_CC TSRMLS_CC)
2000-02-20 03:21:45 +08:00
ZEND_API int _array_init ( zval * arg ZEND_FILE_LINE_DC ) ;
2001-08-05 09:37:10 +08:00
ZEND_API int _object_init ( zval * arg ZEND_FILE_LINE_DC TSRMLS_DC ) ;
ZEND_API int _object_init_ex ( zval * arg , zend_class_entry * ce ZEND_FILE_LINE_DC TSRMLS_DC ) ;
2001-08-12 02:26:47 +08:00
ZEND_API int _object_and_properties_init ( zval * arg , zend_class_entry * ce , HashTable * properties ZEND_FILE_LINE_DC TSRMLS_DC ) ;
1999-10-04 19:42:46 +08:00
/* no longer supported */
2001-08-11 23:56:40 +08:00
ZEND_API int add_assoc_function ( zval * arg , char * key , void ( * function_ptr ) ( INTERNAL_FUNCTION_PARAMETERS ) ) ;
1999-10-04 19:42:46 +08:00
2001-01-21 03:16:38 +08:00
ZEND_API int add_assoc_long_ex ( zval * arg , char * key , uint key_len , long n ) ;
2001-02-01 05:53:30 +08:00
ZEND_API int add_assoc_null_ex ( zval * arg , char * key , uint key_len ) ;
2001-01-21 03:16:38 +08:00
ZEND_API int add_assoc_bool_ex ( zval * arg , char * key , uint key_len , int b ) ;
ZEND_API int add_assoc_resource_ex ( zval * arg , char * key , uint key_len , int r ) ;
ZEND_API int add_assoc_double_ex ( zval * arg , char * key , uint key_len , double d ) ;
ZEND_API int add_assoc_string_ex ( zval * arg , char * key , uint key_len , char * str , int duplicate ) ;
ZEND_API int add_assoc_stringl_ex ( zval * arg , char * key , uint key_len , char * str , uint length , int duplicate ) ;
ZEND_API int add_assoc_zval_ex ( zval * arg , char * key , uint key_len , zval * value ) ;
# define add_assoc_long(__arg, __key, __n) add_assoc_long_ex(__arg, __key, strlen(__key)+1, __n)
2001-02-01 05:53:30 +08:00
# define add_assoc_null(__arg, __key) add_assoc_null_ex(__arg, __key, strlen(__key) + 1)
2001-01-21 03:16:38 +08:00
# define add_assoc_bool(__arg, __key, __b) add_assoc_bool_ex(__arg, __key, strlen(__key)+1, __b)
# define add_assoc_resource(__arg, __key, __r) add_assoc_resource_ex(__arg, __key, strlen(__key)+1, __r)
# define add_assoc_double(__arg, __key, __d) add_assoc_double_ex(__arg, __key, strlen(__key)+1, __d)
# define add_assoc_string(__arg, __key, __str, __duplicate) add_assoc_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate)
# define add_assoc_stringl(__arg, __key, __str, __length, __duplicate) add_assoc_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __duplicate)
# define add_assoc_zval(__arg, __key, __value) add_assoc_zval_ex(__arg, __key, strlen(__key)+1, __value)
1999-10-04 19:42:46 +08:00
2001-02-01 05:53:30 +08:00
/* unset() functions are only suported for legacy modules and null() functions should be used */
# define add_assoc_unset(__arg, __key) add_assoc_null_ex(__arg, __key, strlen(__key) + 1)
# define add_index_unset(__arg, __key) add_index_null(__arg, __key)
# define add_next_index_unset(__arg) add_next_index_null(__arg)
# define add_property_unset(__arg, __key) add_property_null(__arg, __key)
1999-04-08 02:10:10 +08:00
ZEND_API int add_index_long ( zval * arg , uint idx , long n ) ;
2001-02-01 05:53:30 +08:00
ZEND_API int add_index_null ( zval * arg , uint idx ) ;
1999-10-04 19:42:46 +08:00
ZEND_API int add_index_bool ( zval * arg , uint idx , int b ) ;
ZEND_API int add_index_resource ( zval * arg , uint idx , int r ) ;
1999-04-08 02:10:10 +08:00
ZEND_API int add_index_double ( zval * arg , uint idx , double d ) ;
ZEND_API int add_index_string ( zval * arg , uint idx , char * str , int duplicate ) ;
ZEND_API int add_index_stringl ( zval * arg , uint idx , char * str , uint length , int duplicate ) ;
2001-01-23 04:40:41 +08:00
ZEND_API int add_index_zval ( zval * arg , uint index , zval * value ) ;
1999-10-04 19:42:46 +08:00
1999-04-08 02:10:10 +08:00
ZEND_API int add_next_index_long ( zval * arg , long n ) ;
2001-02-01 05:53:30 +08:00
ZEND_API int add_next_index_null ( zval * arg ) ;
1999-10-04 19:42:46 +08:00
ZEND_API int add_next_index_bool ( zval * arg , int b ) ;
ZEND_API int add_next_index_resource ( zval * arg , int r ) ;
1999-04-08 02:10:10 +08:00
ZEND_API int add_next_index_double ( zval * arg , double d ) ;
ZEND_API int add_next_index_string ( zval * arg , char * str , int duplicate ) ;
ZEND_API int add_next_index_stringl ( zval * arg , char * str , uint length , int duplicate ) ;
2001-01-21 03:16:38 +08:00
ZEND_API int add_next_index_zval ( zval * arg , zval * value ) ;
ZEND_API int add_get_assoc_string_ex ( zval * arg , char * key , uint key_len , char * str , void * * dest , int duplicate ) ;
ZEND_API int add_get_assoc_stringl_ex ( zval * arg , char * key , uint key_len , char * str , uint length , void * * dest , int duplicate ) ;
# define add_get_assoc_string(__arg, __key, __str, __dest, __duplicate) add_get_assoc_string_ex(__arg, __key, strlen(__key)+1, __str, __dest, __duplicate)
# define add_get_assoc_stringl(__arg, __key, __str, __length, __dest, __duplicate) add_get_assoc_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __dest, __duplicate)
1999-04-08 02:10:10 +08:00
ZEND_API int add_get_index_long ( zval * arg , uint idx , long l , void * * dest ) ;
ZEND_API int add_get_index_double ( zval * arg , uint idx , double d , void * * dest ) ;
ZEND_API int add_get_index_string ( zval * arg , uint idx , char * str , void * * dest , int duplicate ) ;
ZEND_API int add_get_index_stringl ( zval * arg , uint idx , char * str , uint length , void * * dest , int duplicate ) ;
2001-01-21 03:16:38 +08:00
ZEND_API int add_property_long_ex ( zval * arg , char * key , uint key_len , long l ) ;
2001-02-01 05:53:30 +08:00
ZEND_API int add_property_null_ex ( zval * arg , char * key , uint key_len ) ;
2001-01-21 03:16:38 +08:00
ZEND_API int add_property_bool_ex ( zval * arg , char * key , uint key_len , int b ) ;
ZEND_API int add_property_resource_ex ( zval * arg , char * key , uint key_len , long r ) ;
ZEND_API int add_property_double_ex ( zval * arg , char * key , uint key_len , double d ) ;
ZEND_API int add_property_string_ex ( zval * arg , char * key , uint key_len , char * str , int duplicate ) ;
ZEND_API int add_property_stringl_ex ( zval * arg , char * key , uint key_len , char * str , uint length , int duplicate ) ;
ZEND_API int add_property_zval_ex ( zval * arg , char * key , uint key_len , zval * value ) ;
# define add_property_long(__arg, __key, __n) add_property_long_ex(__arg, __key, strlen(__key)+1, __n)
2001-02-01 05:53:30 +08:00
# define add_property_null(__arg, __key) add_property_null_ex(__arg, __key, strlen(__key) + 1)
2001-01-21 03:16:38 +08:00
# define add_property_bool(__arg, __key, __b) add_property_bool_ex(__arg, __key, strlen(__key)+1, __b)
# define add_property_resource(__arg, __key, __r) add_property_resource_ex(__arg, __key, strlen(__key)+1, __r)
# define add_property_double(__arg, __key, __d) add_property_double_ex(__arg, __key, strlen(__key)+1, __d)
# define add_property_string(__arg, __key, __str, __duplicate) add_property_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate)
# define add_property_stringl(__arg, __key, __str, __length, __duplicate) add_property_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __duplicate)
# define add_property_zval(__arg, __key, __value) add_property_zval_ex(__arg, __key, strlen(__key)+1, __value)
2001-07-30 15:43:02 +08:00
ZEND_API int call_user_function ( HashTable * function_table , zval * * object_pp , zval * function_name , zval * retval_ptr , int param_count , zval * params [ ] TSRMLS_DC ) ;
ZEND_API int call_user_function_ex ( HashTable * function_table , zval * * object_pp , zval * function_name , zval * * retval_ptr_ptr , int param_count , zval * * params [ ] , int no_separation , HashTable * symbol_table TSRMLS_DC ) ;
1999-04-08 02:10:10 +08:00
1999-12-05 00:50:18 +08:00
ZEND_API int zend_set_hash_symbol ( zval * symbol , char * name , int name_length ,
2002-04-24 02:06:54 +08:00
zend_bool is_ref , int num_symbol_tables , . . . ) ;
1999-12-05 00:50:18 +08:00
2001-08-11 23:56:40 +08:00
# define add_method(arg, key, method) add_assoc_function((arg), (key), (method))
1999-04-08 02:10:10 +08:00
2002-09-16 09:36:48 +08:00
ZEND_API ZEND_FUNCTION ( display_disabled_function ) ;
2001-07-10 16:20:20 +08:00
# if ZEND_DEBUG
# define CHECK_ZVAL_STRING(z) \
2003-01-09 23:32:22 +08:00
if ( ( z ) - > value . str . val [ ( z ) - > value . str . len ] ! = ' \0 ' ) { zend_error ( E_WARNING , " String is not zero-terminated (%s) " , ( z ) - > value . str . val ) ; }
2001-07-16 23:48:31 +08:00
# define CHECK_ZVAL_STRING_REL(z) \
2003-01-09 23:32:22 +08:00
if ( ( z ) - > value . str . val [ ( z ) - > value . str . len ] ! = ' \0 ' ) { zend_error ( E_WARNING , " String is not zero-terminated (%s) (source: %s:%d) " , ( z ) - > value . str . val ZEND_FILE_LINE_RELAY_CC ) ; }
2001-07-10 16:20:20 +08:00
# else
# define CHECK_ZVAL_STRING(z)
2001-07-16 23:48:31 +08:00
# define CHECK_ZVAL_STRING_REL(z)
2001-07-10 16:20:20 +08:00
# endif
2001-08-11 23:56:40 +08:00
# define ZVAL_RESOURCE(z, l) { \
2000-01-04 21:56:17 +08:00
( z ) - > type = IS_RESOURCE ; \
( z ) - > value . lval = l ; \
}
2001-07-10 16:20:20 +08:00
2001-08-11 23:56:40 +08:00
# define ZVAL_BOOL(z, b) { \
2000-01-04 21:56:17 +08:00
( z ) - > type = IS_BOOL ; \
( z ) - > value . lval = b ; \
}
2001-07-10 16:20:20 +08:00
2000-01-04 21:56:17 +08:00
# define ZVAL_NULL(z) { \
( z ) - > type = IS_NULL ; \
}
2001-07-10 16:20:20 +08:00
2001-08-11 23:56:40 +08:00
# define ZVAL_LONG(z, l) { \
2000-01-04 21:56:17 +08:00
( z ) - > type = IS_LONG ; \
( z ) - > value . lval = l ; \
}
2001-07-10 16:20:20 +08:00
2001-08-11 23:56:40 +08:00
# define ZVAL_DOUBLE(z, d) { \
2000-01-04 21:56:17 +08:00
( z ) - > type = IS_DOUBLE ; \
( z ) - > value . dval = d ; \
}
2001-07-10 16:20:20 +08:00
2001-08-11 23:56:40 +08:00
# define ZVAL_STRING(z, s, duplicate) { \
2000-01-04 21:56:17 +08:00
char * __s = ( s ) ; \
( z ) - > value . str . len = strlen ( __s ) ; \
2001-08-11 23:56:40 +08:00
( z ) - > value . str . val = ( duplicate ? estrndup ( __s , ( z ) - > value . str . len ) : __s ) ; \
2000-01-04 21:56:17 +08:00
( z ) - > type = IS_STRING ; \
}
2001-07-10 16:20:20 +08:00
2001-08-11 23:56:40 +08:00
# define ZVAL_STRINGL(z, s, l, duplicate) { \
2000-01-04 21:56:17 +08:00
char * __s = ( s ) ; int __l = l ; \
( z ) - > value . str . len = __l ; \
2001-08-11 23:56:40 +08:00
( z ) - > value . str . val = ( duplicate ? estrndup ( __s , __l ) : __s ) ; \
2000-01-04 21:56:17 +08:00
( z ) - > type = IS_STRING ; \
}
# define ZVAL_EMPTY_STRING(z) { \
( z ) - > value . str . len = 0 ; \
2000-08-17 16:48:16 +08:00
( z ) - > value . str . val = empty_string ; \
2000-01-04 21:56:17 +08:00
( z ) - > type = IS_STRING ; \
}
2001-08-11 23:56:40 +08:00
# define ZVAL_FALSE(z) ZVAL_BOOL(z, 0)
# define ZVAL_TRUE(z) ZVAL_BOOL(z, 1)
2000-01-04 21:56:17 +08:00
2001-08-11 23:56:40 +08:00
# define RETVAL_RESOURCE(l) ZVAL_RESOURCE(return_value, l)
# define RETVAL_BOOL(b) ZVAL_BOOL(return_value, b)
2001-07-10 16:20:20 +08:00
# define RETVAL_NULL() ZVAL_NULL(return_value)
2001-08-11 23:56:40 +08:00
# define RETVAL_LONG(l) ZVAL_LONG(return_value, l)
# define RETVAL_DOUBLE(d) ZVAL_DOUBLE(return_value, d)
# define RETVAL_STRING(s, duplicate) ZVAL_STRING(return_value, s, duplicate)
# define RETVAL_STRINGL(s, l, duplicate) ZVAL_STRINGL(return_value, s, l, duplicate)
2001-07-10 16:20:20 +08:00
# define RETVAL_EMPTY_STRING() ZVAL_EMPTY_STRING(return_value)
2001-08-11 23:56:40 +08:00
# define RETVAL_FALSE ZVAL_BOOL(return_value, 0)
# define RETVAL_TRUE ZVAL_BOOL(return_value, 1)
2001-07-10 16:20:20 +08:00
# define RETURN_RESOURCE(l) { RETVAL_RESOURCE(l); return; }
# define RETURN_BOOL(b) { RETVAL_BOOL(b); return; }
# define RETURN_NULL() { RETVAL_NULL(); return;}
# define RETURN_LONG(l) { RETVAL_LONG(l); return; }
# define RETURN_DOUBLE(d) { RETVAL_DOUBLE(d); return; }
2001-08-11 23:56:40 +08:00
# define RETURN_STRING(s, duplicate) { RETVAL_STRING(s, duplicate); return; }
# define RETURN_STRINGL(s, l, duplicate) { RETVAL_STRINGL(s, l, duplicate); return; }
2001-07-10 16:20:20 +08:00
# define RETURN_EMPTY_STRING() { RETVAL_EMPTY_STRING(); return; }
# define RETURN_FALSE { RETVAL_FALSE; return; }
# define RETURN_TRUE { RETVAL_TRUE; return; }
1999-05-27 09:44:17 +08:00
2001-08-11 23:56:40 +08:00
# define SET_VAR_STRING(n, v) { \
1999-07-30 10:49:12 +08:00
{ \
1999-12-27 05:21:33 +08:00
zval * var ; \
ALLOC_ZVAL ( var ) ; \
2001-08-11 23:56:40 +08:00
ZVAL_STRING ( var , v , 0 ) ; \
1999-08-07 00:54:32 +08:00
ZEND_SET_GLOBAL_VAR ( n , var ) ; \
1999-07-30 10:49:12 +08:00
} \
1999-05-27 09:44:17 +08:00
}
1999-07-30 10:49:12 +08:00
2001-08-11 23:56:40 +08:00
# define SET_VAR_STRINGL(n, v, l) { \
1999-07-30 10:49:12 +08:00
{ \
1999-12-27 05:21:33 +08:00
zval * var ; \
ALLOC_ZVAL ( var ) ; \
2001-08-11 23:56:40 +08:00
ZVAL_STRINGL ( var , v , l , 0 ) ; \
1999-07-30 10:49:12 +08:00
ZEND_SET_GLOBAL_VAR ( n , var ) ; \
} \
1999-05-27 09:44:17 +08:00
}
1999-07-30 10:49:12 +08:00
2001-08-11 23:56:40 +08:00
# define SET_VAR_LONG(n, v) { \
1999-07-30 10:49:12 +08:00
{ \
1999-12-27 05:21:33 +08:00
zval * var ; \
ALLOC_ZVAL ( var ) ; \
2001-08-11 23:56:40 +08:00
ZVAL_LONG ( var , v ) ; \
1999-07-30 10:49:12 +08:00
ZEND_SET_GLOBAL_VAR ( n , var ) ; \
} \
1999-05-27 09:44:17 +08:00
}
1999-07-30 10:49:12 +08:00
2001-08-11 23:56:40 +08:00
# define SET_VAR_DOUBLE(n, v) { \
1999-07-30 10:49:12 +08:00
{ \
1999-12-27 05:21:33 +08:00
zval * var ; \
ALLOC_ZVAL ( var ) ; \
2001-08-11 23:56:40 +08:00
ZVAL_DOUBLE ( var , v ) ; \
1999-07-30 10:49:12 +08:00
ZEND_SET_GLOBAL_VAR ( n , var ) ; \
} \
1999-05-27 09:44:17 +08:00
}
1999-12-03 15:54:17 +08:00
# define ZEND_SET_SYMBOL(symtable, name, var) \
{ \
char * _name = ( name ) ; \
\
1999-12-04 22:56:44 +08:00
ZEND_SET_SYMBOL_WITH_LENGTH ( symtable , _name , strlen ( _name ) + 1 , var , 1 , 0 ) ; \
1999-07-30 10:49:12 +08:00
}
1999-12-03 15:54:17 +08:00
# define ZEND_SET_SYMBOL_WITH_LENGTH(symtable, name, name_length, var, _refcount, _is_ref) \
1999-07-30 10:49:12 +08:00
{ \
zval * * orig_var ; \
\
1999-07-30 22:17:08 +08:00
if ( zend_hash_find ( symtable , ( name ) , ( name_length ) , ( void * * ) & orig_var ) = = SUCCESS \
1999-07-30 10:49:12 +08:00
& & PZVAL_IS_REF ( * orig_var ) ) { \
1999-12-02 05:47:47 +08:00
( var ) - > refcount = ( * orig_var ) - > refcount ; \
1999-10-18 22:17:36 +08:00
( var ) - > is_ref = 1 ; \
1999-07-30 10:49:12 +08:00
\
1999-12-02 06:00:58 +08:00
if ( _refcount ) { \
( var ) - > refcount + = _refcount - 1 ; \
} \
1999-07-30 10:49:12 +08:00
zval_dtor ( * orig_var ) ; \
1999-12-02 05:47:47 +08:00
* * orig_var = * ( var ) ; \
1999-12-24 23:22:11 +08:00
FREE_ZVAL ( var ) ; \
1999-07-30 10:49:12 +08:00
} else { \
1999-12-03 04:38:41 +08:00
( var ) - > is_ref = _is_ref ; \
1999-12-02 05:47:47 +08:00
if ( _refcount ) { \
( var ) - > refcount = _refcount ; \
} \
zend_hash_update ( symtable , ( name ) , ( name_length ) , & ( var ) , sizeof ( zval * ) , NULL ) ; \
1999-07-30 10:49:12 +08:00
} \
}
1999-07-30 22:17:08 +08:00
# define ZEND_SET_GLOBAL_VAR(name, var) \
ZEND_SET_SYMBOL ( & EG ( symbol_table ) , name , var )
1999-12-04 01:03:35 +08:00
# define ZEND_SET_GLOBAL_VAR_WITH_LENGTH(name, name_length, var, _refcount, _is_ref) \
ZEND_SET_SYMBOL_WITH_LENGTH ( & EG ( symbol_table ) , name , name_length , var , _refcount , _is_ref )
1999-12-04 00:59:04 +08:00
2002-02-07 22:08:43 +08:00
# define HASH_OF(p) ((p)->type==IS_ARRAY ? (p)->value.ht : (((p)->type==IS_OBJECT ? Z_OBJ_HT_P(p)->get_properties((p) TSRMLS_CC) : NULL)))
2000-01-04 21:56:17 +08:00
# define ZVAL_IS_NULL(z) ((z)->type==IS_NULL)
1999-09-21 00:56:09 +08:00
2001-08-11 00:19:49 +08:00
/* For compatibility */
# define ZEND_MINIT ZEND_MODULE_STARTUP_N
# define ZEND_MSHUTDOWN ZEND_MODULE_SHUTDOWN_N
# define ZEND_RINIT ZEND_MODULE_ACTIVATE_N
# define ZEND_RSHUTDOWN ZEND_MODULE_DEACTIVATE_N
# define ZEND_MINFO ZEND_MODULE_INFO_N
# define ZEND_MINIT_FUNCTION ZEND_MODULE_STARTUP_D
2001-08-12 22:58:57 +08:00
# define ZEND_MSHUTDOWN_FUNCTION ZEND_MODULE_SHUTDOWN_D
# define ZEND_RINIT_FUNCTION ZEND_MODULE_ACTIVATE_D
# define ZEND_RSHUTDOWN_FUNCTION ZEND_MODULE_DEACTIVATE_D
# define ZEND_MINFO_FUNCTION ZEND_MODULE_INFO_D
2001-08-11 00:19:49 +08:00
2002-05-20 15:17:30 +08:00
END_EXTERN_C ( )
2000-07-03 07:54:19 +08:00
# endif /* ZEND_API_H */
1999-04-08 02:10:10 +08:00
2001-08-11 00:19:49 +08:00
1999-04-08 02:10:10 +08:00
/*
* Local variables :
* tab - width : 4
* c - basic - offset : 4
* End :
*/