31#elif defined(HAVE_TIDYP_H)
35#ifdef HAVE_TIDYBUFFIO_H
36#include "tidybuffio.h"
51#define FIX_BUFFER(bptr) do { if ((bptr)->size) { (bptr)->bp[(bptr)->size-1] = '\0'; } } while(0)
53#define TIDY_SET_CONTEXT \
54 zval *object = getThis();
56#define TIDY_FETCH_OBJECT \
59 if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &object, tidy_ce_doc) != SUCCESS) { \
62 obj = Z_TIDY_P(object); \
64#define TIDY_FETCH_INITIALIZED_OBJECT \
66 if (!obj->ptdoc->initialized) { \
67 zend_throw_error(NULL, "tidy object is not initialized"); \
71#define TIDY_FETCH_ONLY_OBJECT \
74 if (zend_parse_parameters_none() != SUCCESS) { \
77 obj = Z_TIDY_P(object); \
79#define TIDY_SET_DEFAULT_CONFIG(_doc) \
80 if (TG(default_config) && TG(default_config)[0]) { \
81 php_tidy_load_config(_doc, TG(default_config)); \
86typedef struct _PHPTidyDoc PHPTidyDoc;
87typedef struct _PHPTidyObj PHPTidyObj;
104 unsigned int ref_count;
115static inline PHPTidyObj *php_tidy_fetch_object(
zend_object *obj) {
116 return (PHPTidyObj *)((
char*)(obj) -
XtOffsetOf(PHPTidyObj, std));
119#define Z_TIDY_P(zv) php_tidy_fetch_object(Z_OBJ_P((zv)))
123static zend_string *php_tidy_file_to_mem(
const char *,
bool);
124static void tidy_object_free_storage(
zend_object *);
130static void tidy_doc_update_properties(PHPTidyObj *);
131static void tidy_add_node_default_properties(PHPTidyObj *);
132static void *php_tidy_get_opt_val(PHPTidyDoc *, TidyOption, TidyOptionType *);
134static int _php_tidy_set_tidy_opt(TidyDoc,
const char *,
zval *);
135static int _php_tidy_apply_config_array(TidyDoc doc,
const HashTable *ht_options);
137static void php_tidy_clean_output_start(
const char *
name,
size_t name_len);
138static php_output_handler *php_tidy_output_handler_init(
const char *handler_name,
size_t handler_name_len,
size_t chunk_size,
int flags);
176#ifdef COMPILE_DL_TIDY
183static void* TIDY_CALL php_tidy_malloc(
size_t len)
188static void* TIDY_CALL php_tidy_realloc(
void *
buf,
size_t len)
193static void TIDY_CALL php_tidy_free(
void *
buf)
198static void TIDY_CALL php_tidy_panic(ctmbstr
msg)
203static void php_tidy_load_config(TidyDoc doc,
const char *path)
205 int ret = tidyLoadConfig(doc, path);
208 }
else if (
ret > 0) {
216 return _php_tidy_apply_config_array(doc, ht_options);
217 }
else if (str_string) {
221 php_tidy_load_config(doc,
ZSTR_VAL(str_string));
226static int _php_tidy_set_tidy_opt(TidyDoc doc,
const char *optname,
zval *
value)
228 TidyOption opt = tidyGetOptionByName(doc, optname);
237 if (tidyOptIsReadOnly(opt)) {
242 switch(tidyOptGetType(opt)) {
244 str = zval_get_tmp_string(
value, &tmp_str);
245 if (tidyOptSetValue(doc, tidyOptGetId(opt),
ZSTR_VAL(str))) {
246 zend_tmp_string_release(tmp_str);
249 zend_tmp_string_release(tmp_str);
253 lval = zval_get_long(
value);
254 if (tidyOptSetInt(doc, tidyOptGetId(opt), lval)) {
260 lval = zval_get_long(
value);
261 if (tidyOptSetBool(doc, tidyOptGetId(opt), lval)) {
274static void tidy_create_node_object(
zval *
zv, PHPTidyDoc *ptdoc, TidyNode node)
276 tidy_instantiate(tidy_ce_node,
zv);
277 PHPTidyObj *newobj = Z_TIDY_P(
zv);
279 newobj->type = is_node;
280 newobj->ptdoc = ptdoc;
281 newobj->ptdoc->ref_count++;
282 tidy_add_node_default_properties(newobj);
330 errbuf =
emalloc(
sizeof(TidyBuffer));
333 if (tidySetErrorBuffer(doc, errbuf) != 0) {
340 tidyOptSetBool(doc, TidyForceOutput, yes);
341 tidyOptSetBool(doc, TidyMark, no);
343 TIDY_SET_DEFAULT_CONFIG(doc);
345 if (php_tidy_apply_config(doc, config_str, config_ht) !=
SUCCESS) {
347 }
else if (enc_len) {
348 if (tidySetCharEncoding(doc, enc) < 0) {
360 if (tidyParseBuffer(doc, &
buf) < 0) {
364 if (tidyCleanAndRepair(doc) >= 0) {
366 tidyBufInit(&output);
368 tidySaveBuffer (doc, &output);
370 RETVAL_STRINGL((
const char *) output.bp, output.size ? output.size-1 : 0);
371 tidyBufFree(&output);
403static void tidy_object_free_storage(
zend_object *
object)
405 PHPTidyObj *intern = php_tidy_fetch_object(
object);
410 intern->ptdoc->ref_count--;
412 if (intern->ptdoc->ref_count <= 0) {
413 tidyBufFree(intern->ptdoc->errbuf);
414 efree(intern->ptdoc->errbuf);
415 tidyRelease(intern->ptdoc->doc);
416 efree(intern->ptdoc);
425 intern = zend_object_alloc(
sizeof(PHPTidyObj), class_type);
434 intern->ptdoc =
emalloc(
sizeof(PHPTidyDoc));
435 intern->ptdoc->doc = tidyCreate();
436 intern->ptdoc->ref_count = 1;
437 intern->ptdoc->initialized = 0;
438 intern->ptdoc->errbuf =
emalloc(
sizeof(TidyBuffer));
439 tidyBufInit(intern->ptdoc->errbuf);
441 if (tidySetErrorBuffer(intern->ptdoc->doc, intern->ptdoc->errbuf) != 0) {
442 tidyBufFree(intern->ptdoc->errbuf);
443 efree(intern->ptdoc->errbuf);
444 tidyRelease(intern->ptdoc->doc);
445 efree(intern->ptdoc);
450 tidyOptSetBool(intern->ptdoc->doc, TidyForceOutput, yes);
451 tidyOptSetBool(intern->ptdoc->doc, TidyMark, no);
453 TIDY_SET_DEFAULT_CONFIG(intern->ptdoc->doc);
464 return tidy_object_new(class_type, &tidy_object_handlers_node, is_node);
469 return tidy_object_new(class_type, &tidy_object_handlers_doc, is_doc);
498 obj = php_tidy_fetch_object(in);
499 tidyBufInit(&output);
500 tidySaveBuffer (obj->ptdoc->doc, &output);
506 tidyBufFree(&output);
536 obj = php_tidy_fetch_object(in);
539 tidyNodeGetText(obj->ptdoc->doc, obj->node, &
buf);
554static void tidy_doc_update_properties(PHPTidyObj *obj)
558 tidyBufInit(&output);
559 tidySaveBuffer (obj->ptdoc->doc, &output);
572 tidyBufFree(&output);
574 if (obj->ptdoc->errbuf->size) {
579 sizeof(
"errorBuffer") - 1,
580 (
char*) obj->ptdoc->errbuf->bp,
581 obj->ptdoc->errbuf->size-1
586static void tidy_add_node_default_properties(PHPTidyObj *obj)
591 zval attribute, children, temp;
595 tidyNodeGetText(obj->ptdoc->doc, obj->node, &
buf);
602 buf.size ? (
const char *)
buf.bp :
"",
603 buf.size ?
buf.size - 1 : 0
608 name = (
const char *) tidyNodeGetName(obj->node);
623 tidyNodeGetType(obj->node)
631 tidyNodeLine(obj->node)
638 sizeof(
"column") - 1,
639 tidyNodeColumn(obj->node)
646 sizeof(
"proprietary") - 1,
647 tidyNodeIsProp(obj->ptdoc->doc, obj->node)
650 switch(tidyNodeGetType(obj->node)) {
652 case TidyNode_DocType:
654 case TidyNode_Comment:
669 tidyNodeGetId(obj->node)
673 tempattr = tidyAttrFirst(obj->node);
680 name = (
const char *)tidyAttrName(tempattr);
681 val = (
const char *)tidyAttrValue(tempattr);
684 add_assoc_string(&attribute,
name,
val);
689 }
while((tempattr = tidyAttrNext(tempattr)));
698 sizeof(
"attribute") - 1,
704 tempnode = tidyGetChild(obj->node);
709 tidy_create_node_object(&temp, obj->ptdoc, tempnode);
710 add_next_index_zval(&children, &temp);
711 }
while((tempnode = tidyGetNext(tempnode)));
728static void *php_tidy_get_opt_val(PHPTidyDoc *ptdoc, TidyOption opt, TidyOptionType *
type)
730 *
type = tidyOptGetType(opt);
734 char *
val = (
char *) tidyOptGetValue(ptdoc->doc, tidyOptGetId(opt));
744 return (
void *) (uintptr_t) tidyOptGetInt(ptdoc->doc, tidyOptGetId(opt));
748 return (
void *) tidyOptGetBool(ptdoc->doc, tidyOptGetId(opt));
763 node = tidyGetRoot(obj->ptdoc->doc);
767 node = tidyGetHtml(obj->ptdoc->doc);
771 node = tidyGetHead(obj->ptdoc->doc);
775 node = tidyGetBody(obj->ptdoc->doc);
785 tidy_create_node_object(
return_value, obj->ptdoc, node);
788static int _php_tidy_apply_config_array(TidyDoc doc,
const HashTable *ht_options)
795 if (opt_name ==
NULL) {
798 _php_tidy_set_tidy_opt(doc,
ZSTR_VAL(opt_name), opt_val);
804static int php_tidy_parse_string(PHPTidyObj *obj,
const char *
string, uint32_t
len,
const char *enc)
809 if (tidySetCharEncoding(obj->ptdoc->doc, enc) < 0) {
815 obj->ptdoc->initialized = 1;
818 tidyBufAttach(&
buf, (
byte *)
string,
len);
819 if (tidyParseBuffer(obj->ptdoc->doc, &
buf) < 0) {
823 tidy_doc_update_properties(obj);
830 tidySetMallocCall(php_tidy_malloc);
831 tidySetReallocCall(php_tidy_realloc);
832 tidySetFreeCall(php_tidy_free);
833 tidySetPanicCall(php_tidy_panic);
837 tidy_ce_doc = register_class_tidy();
838 tidy_ce_doc->create_object = tidy_object_new_doc;
840 tidy_object_handlers_doc.clone_obj =
NULL;
842 tidy_ce_node = register_class_tidyNode();
843 tidy_ce_node->create_object = tidy_object_new_node;
845 tidy_object_handlers_node.clone_obj =
NULL;
847 tidy_object_handlers_doc.cast_object = tidy_doc_cast_handler;
848 tidy_object_handlers_node.cast_object = tidy_node_cast_handler;
850 tidy_object_handlers_node.offset = tidy_object_handlers_doc.offset =
XtOffsetOf(PHPTidyObj, std);
851 tidy_object_handlers_node.free_obj = tidy_object_handlers_doc.free_obj = tidy_object_free_storage;
853 register_tidy_symbols(module_number);
862#if defined(COMPILE_DL_TIDY) && defined(ZTS)
866 php_tidy_clean_output_start(
ZEND_STRL(
"ob_tidyhandler"));
888#ifdef HAVE_TIDYBUFFIO_H
890#elif defined(HAVE_TIDYP_H)
893#ifdef HAVE_TIDYRELEASEDATE
921 status = OnUpdateBool(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage);
925 php_tidy_clean_output_start(
ZEND_STRL(
"ob_tidyhandler"));
936static void php_tidy_clean_output_start(
const char *
name,
size_t name_len)
945static php_output_handler *php_tidy_output_handler_init(
const char *handler_name,
size_t handler_name_len,
size_t chunk_size,
int flags)
961 TidyBuffer inbuf, outbuf, errbuf;
965 tidyBufInit(&errbuf);
967 if (0 == tidySetErrorBuffer(doc, &errbuf)) {
968 tidyOptSetBool(doc, TidyForceOutput, yes);
969 tidyOptSetBool(doc, TidyMark, no);
976 TIDY_SET_DEFAULT_CONFIG(doc);
979 tidyBufAttach(&inbuf, (
byte *) output_context->
in.
data, (uint32_t)output_context->
in.
used);
981 if (0 <= tidyParseBuffer(doc, &inbuf) && 0 <= tidyCleanAndRepair(doc)) {
982 tidyBufInit(&outbuf);
983 tidySaveBuffer(doc, &outbuf);
985 output_context->
out.
data = (
char *) outbuf.bp;
986 output_context->
out.
used = outbuf.size ? outbuf.size-1 : 0;
993 tidyBufFree(&errbuf);
1023 if (php_tidy_apply_config(obj->ptdoc->doc, options_str, options_ht) !=
SUCCESS
1036 if (obj->ptdoc->errbuf && obj->ptdoc->errbuf->bp) {
1037 RETURN_STRINGL((
const char*)obj->ptdoc->errbuf->bp, obj->ptdoc->errbuf->size-1);
1050 tidyBufInit(&output);
1051 tidySaveBuffer(obj->ptdoc->doc, &output);
1052 FIX_BUFFER(&output);
1053 RETVAL_STRINGL((
const char *) output.bp, output.size ? output.size-1 : 0);
1054 tidyBufFree(&output);
1091 if (php_tidy_apply_config(obj->ptdoc->doc, options_str, options_ht) !=
SUCCESS
1106 if (tidyCleanAndRepair(obj->ptdoc->doc) >= 0) {
1107 tidy_doc_update_properties(obj);
1134 if (obj->ptdoc->initialized && tidyRunDiagnostics(obj->ptdoc->doc) >= 0) {
1135 tidy_doc_update_properties(obj);
1150#ifdef HAVE_TIDYRELEASEDATE
1159#ifdef HAVE_TIDYOPTGETDOC
1174 obj = Z_TIDY_P(
object);
1176 opt = tidyGetOptionByName(obj->ptdoc->doc, optname);
1183 if ( (optval = (
const char *) tidyOptGetDoc(obj->ptdoc->doc, opt)) ) {
1197 const char *opt_name;
1199 TidyOptionType optt;
1203 itOpt = tidyGetOptionList(obj->ptdoc->doc);
1208 TidyOption opt = tidyGetNextOption(obj->ptdoc->doc, &itOpt);
1210 opt_name = (
const char *)tidyOptGetName(opt);
1211 opt_value = php_tidy_get_opt_val(obj->ptdoc, opt, &optt);
1222 add_assoc_bool(
return_value, opt_name, opt_value ? 1 : 0);
1241 TIDY_FETCH_INITIALIZED_OBJECT;
1243 RETURN_LONG(tidyDetectedHtmlVersion(obj->ptdoc->doc));
1250 TIDY_FETCH_INITIALIZED_OBJECT;
1259 TIDY_FETCH_INITIALIZED_OBJECT;
1261 RETURN_BOOL(tidyDetectedGenericXml(obj->ptdoc->doc));
1288 RETURN_LONG(tidyAccessWarningCount(obj->ptdoc->doc));
1297 RETURN_LONG(tidyConfigErrorCount(obj->ptdoc->doc));
1309 TidyOptionType optt;
1316 obj = Z_TIDY_P(
object);
1318 opt = tidyGetOptionByName(obj->ptdoc->doc, optname);
1325 optval = php_tidy_get_opt_val(obj->ptdoc, opt, &optt);
1370 obj = Z_TIDY_P(
object);
1386 if (php_tidy_apply_config(obj->ptdoc->doc, options_str, options_ht) !=
SUCCESS) {
1417 obj = Z_TIDY_P(
object);
1430 RETVAL_BOOL(php_tidy_apply_config(obj->ptdoc->doc, options_str, options_ht) ==
SUCCESS
1457 obj = Z_TIDY_P(
object);
1459 RETURN_BOOL(php_tidy_apply_config(obj->ptdoc->doc, options_str, options_ht) ==
SUCCESS
1495 TIDY_FETCH_ONLY_OBJECT;
1497 if (tidyGetChild(obj->node)) {
1508 TIDY_FETCH_ONLY_OBJECT;
1510 if (obj->node && tidyGetNext(obj->node)) {
1521 TIDY_FETCH_ONLY_OBJECT;
1523 if (tidyNodeGetType(obj->node) == TidyNode_Comment) {
1534 TIDY_FETCH_ONLY_OBJECT;
1536 switch (tidyNodeGetType(obj->node)) {
1537 case TidyNode_Start:
1539 case TidyNode_StartEnd:
1550 TIDY_FETCH_ONLY_OBJECT;
1552 if (tidyNodeGetType(obj->node) == TidyNode_Text) {
1563 TIDY_FETCH_ONLY_OBJECT;
1565 if (tidyNodeGetType(obj->node) == TidyNode_Jste) {
1576 TIDY_FETCH_ONLY_OBJECT;
1578 if (tidyNodeGetType(obj->node) == TidyNode_Asp) {
1589 TIDY_FETCH_ONLY_OBJECT;
1591 if (tidyNodeGetType(obj->node) == TidyNode_Php) {
1602 TIDY_FETCH_ONLY_OBJECT;
1604 TidyNode parent_node = tidyGetParent(obj->node);
1606 tidy_create_node_object(
return_value, obj->ptdoc, parent_node);
1613 TIDY_FETCH_ONLY_OBJECT;
1615 TidyNode previous_node = tidyGetPrev(obj->node);
1616 if (previous_node) {
1617 tidy_create_node_object(
return_value, obj->ptdoc, previous_node);
1623 TIDY_FETCH_ONLY_OBJECT;
1625 TidyNode next_node = tidyGetNext(obj->node);
1627 tidy_create_node_object(
return_value, obj->ptdoc, next_node);
is_file(string $filename)
zend_ffi_ctype_name_buf buf
PHPAPI int php_check_open_basedir(const char *path)
foreach($dp as $el) foreach( $dp as $el) if( $pass2< 2) echo ""
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
PHPAPI bool php_output_handler_started(const char *name, size_t name_len)
PHPAPI php_output_handler * php_output_handler_create_internal(const char *name, size_t name_len, php_output_handler_context_func_t output_handler, size_t chunk_size, int flags)
PHPAPI zend_result php_output_handler_alias_register(const char *name, size_t name_len, php_output_handler_alias_ctor_t func)
PHPAPI zend_result php_output_handler_start(php_output_handler *handler)
PHPAPI int php_output_get_status(void)
php_info_print_table_start()
php_info_print_table_row(2, "PDO Driver for Firebird", "enabled")
php_info_print_table_end()
#define PHP_MSHUTDOWN_FUNCTION
#define PHP_MINIT_FUNCTION
#define PHP_MINFO_FUNCTION
#define PHP_RINIT_FUNCTION
#define PHP_RSHUTDOWN_FUNCTION
#define PHP_MODULE_GLOBALS
#define PHP_INI_STAGE_RUNTIME
#define STD_PHP_INI_ENTRY
#define STD_PHP_INI_BOOLEAN
struct _php_output_handler php_output_handler
#define PHP_OUTPUT_WRITTEN
#define PHP_OUTPUT_HANDLER_STDFLAGS
#define PHP_OUTPUT_HANDLER_FINAL
struct _php_output_context php_output_context
#define PHP_OUTPUT_HANDLER_START
struct _php_stream php_stream
#define PHP_STREAM_COPY_ALL
#define php_stream_close(stream)
#define php_stream_copy_to_mem(src, maxlen, persistent)
#define php_stream_open_wrapper(path, mode, options, opened)
zend_module_entry tidy_module_entry
tidy_repair_string(string $string, array|string|null $config=null, ?string $encoding=null)
tidy_get_head(tidy $tidy)
tidy_get_config(tidy $tidy)
tidy_parse_string(string $string, array|string|null $config=null, ?string $encoding=null)
tidy_repair_file(string $filename, array|string|null $config=null, ?string $encoding=null, bool $useIncludePath=false)
tidy_get_status(tidy $tidy)
tidy_config_count(tidy $tidy)
tidy_is_xhtml(tidy $tidy)
tidy_get_html(tidy $tidy)
tidy_warning_count(tidy $tidy)
tidy_get_output(tidy $tidy)
tidy_diagnose(tidy $tidy)
tidy_get_html_ver(tidy $tidy)
tidy_get_body(tidy $tidy)
tidy_get_error_buffer(tidy $tidy)
tidy_access_count(tidy $tidy)
tidy_get_opt_doc(tidy $tidy, string $option)
tidy_clean_repair(tidy $tidy)
tidy_getopt(tidy $tidy, string $option)
tidy_error_count(tidy $tidy)
tidy_parse_file(string $filename, array|string|null $config=null, ?string $encoding=null, bool $useIncludePath=false)
tidy_get_root(tidy $tidy)
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API ZEND_COLD void zend_value_error(const char *format,...)
#define ZEND_TSRMLS_CACHE_UPDATE()
#define INTERNAL_FUNCTION_PARAMETERS
#define ZEND_TSRMLS_CACHE_DEFINE()
ZEND_API void zend_replace_error_handling(zend_error_handling_t error_handling, zend_class_entry *exception_class, zend_error_handling *current)
ZEND_API void zend_restore_error_handling(zend_error_handling *saved)
#define INTERNAL_FUNCTION_PARAM_PASSTHRU
ZEND_API zend_result object_init_ex(zval *arg, zend_class_entry *class_type)
ZEND_API void zend_update_property_string(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value)
ZEND_API void zend_update_property_bool(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value)
ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_len)
ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value)
ZEND_API void object_properties_init(zend_object *object, zend_class_entry *class_type)
ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value)
ZEND_API zend_result zend_parse_method_parameters(uint32_t num_args, zval *this_ptr, const char *type_spec,...)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
ZEND_API void zend_update_property_null(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length)
#define Z_PARAM_PATH_STR(dest)
#define Z_PARAM_ARRAY_HT_OR_STR_OR_NULL(dest_ht, dest_str)
#define RETURN_STRINGL(s, l)
#define ZEND_PARSE_PARAMETERS_END()
#define ZEND_DECLARE_MODULE_GLOBALS(module_name)
#define ZEND_GET_MODULE(name)
#define zend_parse_parameters_none()
#define Z_PARAM_STRING(dest, dest_len)
#define Z_PARAM_STR(dest)
#define Z_PARAM_STRING_OR_NULL(dest, dest_len)
#define ZEND_PARSE_PARAMETERS_START(min_num_args, max_num_args)
#define Z_PARAM_BOOL(dest)
#define ZVAL_STRINGL(z, s, l)
#define RETVAL_STRINGL(s, l)
#define Z_PARAM_PATH_STR_OR_NULL(dest)
#define ZVAL_EMPTY_STRING(z)
#define erealloc(ptr, size)
zend_string_release_ex(func->internal_function.function_name, 0)
ZEND_API zend_class_entry * zend_ce_exception
#define ZEND_HASH_FOREACH_END()
#define ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(ht, _key, _val)
ZEND_API bool zend_ini_parse_bool(zend_string *str)
#define UNREGISTER_INI_ENTRIES()
#define REGISTER_INI_ENTRIES()
#define DISPLAY_INI_ENTRIES()
#define INI_ORIG_BOOL(name)
struct _zend_string zend_string
#define STANDARD_MODULE_HEADER
struct _zend_module_entry zend_module_entry
#define STANDARD_MODULE_PROPERTIES_EX
ZEND_API const zend_object_handlers std_object_handlers
ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class_entry *ce)
ZEND_API void zend_object_std_dtor(zend_object *object)
#define XtOffsetOf(s_type, field)
#define EMPTY_SWITCH_DEFAULT_CASE()
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
#define ZEND_SIZE_T_UINT_OVFL(size)
ZEND_API zend_string * zend_empty_string
#define ZSTR_EMPTY_ALLOC()
struct _zend_array HashTable
#define ZVAL_DOUBLE(z, d)
ZEND_RESULT_CODE zend_result
struct _zend_object_handlers zend_object_handlers
ZEND_API void zval_ptr_dtor(zval *zval_ptr)