diff options
| author | Andi Gutmans <andi@php.net> | 1999-04-07 18:10:10 +0000 | 
|---|---|---|
| committer | Andi Gutmans <andi@php.net> | 1999-04-07 18:10:10 +0000 | 
| commit | 573b46022c46ab41a879c23f4ea432dd4d0c102e (patch) | |
| tree | 12cabc0497f414c8c7678e18f2a034eefb1604a9 /Zend/zend.h | |
| parent | f70a4db647886f65a3e24249351d2c8abc0cdfb3 (diff) | |
| download | php-git-573b46022c46ab41a879c23f4ea432dd4d0c102e.tar.gz | |
Zend Library
Diffstat (limited to 'Zend/zend.h')
| -rw-r--r-- | Zend/zend.h | 205 | 
1 files changed, 205 insertions, 0 deletions
diff --git a/Zend/zend.h b/Zend/zend.h new file mode 100644 index 0000000000..a2395a9ec0 --- /dev/null +++ b/Zend/zend.h @@ -0,0 +1,205 @@ +/* +   +----------------------------------------------------------------------+ +   | Zend Engine                                                          | +   +----------------------------------------------------------------------+ +   | Copyright (c) 1998, 1999 Andi Gutmans, Zeev Suraski                  | +   +----------------------------------------------------------------------+ +   | This source file is subject to the Zend license, that is bundled     | +   | with this package in the file LICENSE.  If you did not receive a     | +   | copy of the Zend license, please mail us at zend@zend.com so we can  | +   | send you a copy immediately.                                         | +   +----------------------------------------------------------------------+ +   | Authors: Andi Gutmans <andi@zend.com>                                | +   |          Zeev Suraski <zeev@zend.com>                                | +   +----------------------------------------------------------------------+ +*/ + +#ifndef _ZEND_H +#define _ZEND_H + +#define ZEND_VERSION "0.80A" + +#include <stdio.h> + +/* + * general definitions + */ + +#if WINNT||WIN32 +#include "config.w32.h" +#else +#include "config.h" +#include "config.unix.h" +#endif + +#include "zend_errors.h" +#include "zend_alloc.h" + + +#undef SUCCESS +#undef FAILURE +#define SUCCESS 0 +#define FAILURE -1				/* this MUST stay a negative number, or it may effect functions! */ + + +#include "zend_hash.h" +#include "zend_llist.h" + + +#define INTERNAL_FUNCTION_PARAMETERS HashTable *ht, zval *return_value, HashTable *list, HashTable *plist +#define INTERNAL_FUNCTION_PARAM_PASSTHRU ht, return_value, list, plist + +/* + * zval + */ +typedef struct _zval_struct zval; +typedef struct _zend_class_entry zend_class_entry; + +typedef union { +	long lval;					/* long value */ +	double dval;				/* double value */ +	struct { +		char *val; +		int len; +	} str; +	char chval;					/* char value */ +	HashTable *ht;				/* hash table value */ +	struct { +		zend_class_entry *ce; +		HashTable *properties; +	} obj; +} zvalue_value; + + +struct _zval_struct { +	/* Variable information */ +	zvalue_value value;		/* value */ +	unsigned char type;	/* active type */ +	unsigned char is_ref; +	short refcount; +}; + + + +typedef struct { +	char *fname; +	void (*handler)(INTERNAL_FUNCTION_PARAMETERS); +	unsigned char *func_arg_types; +} function_entry; + + +typedef struct { +	int type;  /* read, write or r/w */ +	zval **object; +	zend_llist elements_list; +} zend_property_reference; + + + +typedef struct { +	int type;		/* array offset or object proprety */ +	zval element; +} zend_overloaded_element; + + +struct _zend_class_entry { +	char type; +	char *name; +	uint name_length; +	struct _zend_class_entry *parent;  + +	HashTable function_table; +	HashTable default_properties; + +	/* handlers */ +	void (*handle_function_call)(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference); +	zval (*handle_property_get)(zend_property_reference *property_reference); +	int (*handle_property_set)(zend_property_reference *property_reference, zval *value); +}; + + + +typedef struct { +	void (*error_function)(int type, const char *format, ...); +	int (*printf_function)(const char *format, ...); +	int (*write_function)(const char *str, uint str_length); +	FILE *(*fopen_function)(const char *filename); +	void (*message_handler)(long message, void *data); +	void (*block_interruptions)(); +	void (*unblock_interruptions)(); +} zend_utility_functions; + +		 +typedef struct { +	unsigned char short_tags; +	unsigned char asp_tags; +} zend_utility_values; + + +#undef MIN +#undef MAX +#define MAX(a,b)  (((a)>(b))?(a):(b)) +#define MIN(a,b)  (((a)<(b))?(a):(b)) + +/* data types */ +#define IS_LONG		1 +#define IS_DOUBLE	2 +#define IS_STRING	3 +#define IS_ARRAY	4 +#define IS_OBJECT	5 +#define IS_BC 		6 /* for parser internal use only */ +#define IS_BOOL		7 +#define IS_RESOURCE 8 +#define IS_CONSTANT	9 +#define IS_METHOD	10 /* for overloaded function calls */ + +int zend_startup(zend_utility_functions *utility_functions, zend_utility_values *utility_values, char **extensions); +void zend_shutdown(); +ZEND_API void zend_bailout(); +ZEND_API char *get_zend_version(); + +ZEND_API int zend_print_zval(zval *expr, int indent); +ZEND_API void zend_print_zval_r(zval *expr, int indent); + +ZEND_API extern char *empty_string; +ZEND_API extern char *undefined_variable_string; + +#define STR_FREE(ptr) if (ptr && ptr!=empty_string && ptr!=undefined_variable_string) { efree(ptr); } + + +/* output support */ +#define ZEND_WRITE(str, str_len)		zend_write((str), (str_len)) +#define ZEND_PUTS(str)					zend_write((str), strlen((str))) +#define ZEND_PUTC(c)					zend_write(&(c), 1), (c) + +extern ZEND_API int (*zend_printf)(const char *format, ...); +extern ZEND_API int (*zend_write)(const char *str, uint str_length); +extern ZEND_API void (*zend_error)(int type, const char *format, ...); +extern FILE *(*zend_fopen)(const char *filename); +extern void (*zend_message_dispatcher)(long message, void *data); +extern void (*zend_block_interruptions)(); +extern void (*zend_unblock_interruptions)(); + + +void zenderror(char *error); + +extern zend_class_entry standard_class; +extern zend_utility_values zend_uv; + +#define ZEND_UV(name) (zend_uv.name) + + +#define HANDLE_BLOCK_INTERRUPTIONS()		if (zend_block_interruptions) { zend_block_interruptions(); } +#define HANDLE_UNBLOCK_INTERRUPTIONS()		if (zend_unblock_interruptions) { zend_unblock_interruptions(); } + + + + +/* Messages for applications of Zend */ +#define ZMSG_ENABLE_TRACK_VARS			1L +#define ZMSG_FAILED_INCLUDE_FOPEN		2L +#define ZMSG_FAILED_REQUIRE_FOPEN		3L +#define ZMSG_FAILED_HIGHLIGHT_FOPEN		4L +#define ZMSG_MEMORY_LEAK_DETECTED		5L + +#endif /* _ZEND_H */  | 
