version 1.1.1.1, 2012/02/21 23:47:54
|
version 1.1.1.2, 2012/05/29 12:34:37
|
Line 303 static void dom_register_prop_handler(HashTable *prop_
|
Line 303 static void dom_register_prop_handler(HashTable *prop_
|
} |
} |
/* }}} */ |
/* }}} */ |
|
|
static zval **dom_get_property_ptr_ptr(zval *object, zval *member TSRMLS_DC) /* {{{ */ | static zval **dom_get_property_ptr_ptr(zval *object, zval *member, const zend_literal *key TSRMLS_DC) /* {{{ */ |
{ |
{ |
dom_object *obj; |
dom_object *obj; |
zval tmp_member; |
zval tmp_member; |
Line 326 static zval **dom_get_property_ptr_ptr(zval *object, z
|
Line 326 static zval **dom_get_property_ptr_ptr(zval *object, z
|
} |
} |
if (ret == FAILURE) { |
if (ret == FAILURE) { |
std_hnd = zend_get_std_object_handlers(); |
std_hnd = zend_get_std_object_handlers(); |
retval = std_hnd->get_property_ptr_ptr(object, member TSRMLS_CC); | retval = std_hnd->get_property_ptr_ptr(object, member, key TSRMLS_CC); |
} |
} |
|
|
if (member == &tmp_member) { |
if (member == &tmp_member) { |
Line 337 static zval **dom_get_property_ptr_ptr(zval *object, z
|
Line 337 static zval **dom_get_property_ptr_ptr(zval *object, z
|
/* }}} */ |
/* }}} */ |
|
|
/* {{{ dom_read_property */ |
/* {{{ dom_read_property */ |
zval *dom_read_property(zval *object, zval *member, int type TSRMLS_DC) | zval *dom_read_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC) |
{ |
{ |
dom_object *obj; |
dom_object *obj; |
zval tmp_member; |
zval tmp_member; |
Line 372 zval *dom_read_property(zval *object, zval *member, in
|
Line 372 zval *dom_read_property(zval *object, zval *member, in
|
} |
} |
} else { |
} else { |
std_hnd = zend_get_std_object_handlers(); |
std_hnd = zend_get_std_object_handlers(); |
retval = std_hnd->read_property(object, member, type TSRMLS_CC); | retval = std_hnd->read_property(object, member, type, key TSRMLS_CC); |
} |
} |
|
|
if (member == &tmp_member) { |
if (member == &tmp_member) { |
Line 383 zval *dom_read_property(zval *object, zval *member, in
|
Line 383 zval *dom_read_property(zval *object, zval *member, in
|
/* }}} */ |
/* }}} */ |
|
|
/* {{{ dom_write_property */ |
/* {{{ dom_write_property */ |
void dom_write_property(zval *object, zval *member, zval *value TSRMLS_DC) | void dom_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC) |
{ |
{ |
dom_object *obj; |
dom_object *obj; |
zval tmp_member; |
zval tmp_member; |
Line 408 void dom_write_property(zval *object, zval *member, zv
|
Line 408 void dom_write_property(zval *object, zval *member, zv
|
hnd->write_func(obj, value TSRMLS_CC); |
hnd->write_func(obj, value TSRMLS_CC); |
} else { |
} else { |
std_hnd = zend_get_std_object_handlers(); |
std_hnd = zend_get_std_object_handlers(); |
std_hnd->write_property(object, member, value TSRMLS_CC); | std_hnd->write_property(object, member, value, key TSRMLS_CC); |
} |
} |
|
|
if (member == &tmp_member) { |
if (member == &tmp_member) { |
Line 418 void dom_write_property(zval *object, zval *member, zv
|
Line 418 void dom_write_property(zval *object, zval *member, zv
|
/* }}} */ |
/* }}} */ |
|
|
/* {{{ dom_property_exists */ |
/* {{{ dom_property_exists */ |
static int dom_property_exists(zval *object, zval *member, int check_empty TSRMLS_DC) | static int dom_property_exists(zval *object, zval *member, int check_empty, const zend_literal *key TSRMLS_DC) |
{ |
{ |
dom_object *obj; |
dom_object *obj; |
zval tmp_member; |
zval tmp_member; |
Line 456 static int dom_property_exists(zval *object, zval *mem
|
Line 456 static int dom_property_exists(zval *object, zval *mem
|
} |
} |
} else { |
} else { |
std_hnd = zend_get_std_object_handlers(); |
std_hnd = zend_get_std_object_handlers(); |
retval = std_hnd->has_property(object, member, check_empty TSRMLS_CC); | retval = std_hnd->has_property(object, member, check_empty, key TSRMLS_CC); |
} |
} |
|
|
if (member == &tmp_member) { |
if (member == &tmp_member) { |
Line 466 static int dom_property_exists(zval *object, zval *mem
|
Line 466 static int dom_property_exists(zval *object, zval *mem
|
} |
} |
/* }}} */ |
/* }}} */ |
|
|
|
static HashTable* dom_get_debug_info_helper(zval *object, int *is_temp TSRMLS_DC) /* {{{ */ |
|
{ |
|
dom_object *obj = zend_object_store_get_object(object TSRMLS_CC); |
|
HashTable *debug_info, |
|
*prop_handlers = obj->prop_handler, |
|
*std_props; |
|
HashPosition pos; |
|
dom_prop_handler *entry; |
|
zval *object_value, |
|
*null_value; |
|
|
|
*is_temp = 1; |
|
|
|
ALLOC_HASHTABLE(debug_info); |
|
ZEND_INIT_SYMTABLE_EX(debug_info, 32, 0); |
|
|
|
std_props = zend_std_get_properties(object TSRMLS_CC); |
|
zend_hash_copy(debug_info, std_props, (copy_ctor_func_t)zval_add_ref, |
|
NULL, sizeof(zval*)); |
|
|
|
if (!prop_handlers) { |
|
return debug_info; |
|
} |
|
|
|
ALLOC_INIT_ZVAL(object_value); |
|
ZVAL_STRING(object_value, "(object value omitted)", 1); |
|
|
|
ALLOC_INIT_ZVAL(null_value); |
|
ZVAL_NULL(null_value); |
|
|
|
for (zend_hash_internal_pointer_reset_ex(prop_handlers, &pos); |
|
zend_hash_get_current_data_ex(prop_handlers, (void **)&entry, &pos) |
|
== SUCCESS; |
|
zend_hash_move_forward_ex(prop_handlers, &pos)) { |
|
zval *value; |
|
char *string_key = NULL; |
|
uint string_length = 0; |
|
ulong num_key; |
|
|
|
if (entry->read_func(obj, &value TSRMLS_CC) == FAILURE) { |
|
continue; |
|
} |
|
|
|
if (zend_hash_get_current_key_ex(prop_handlers, &string_key, |
|
&string_length, &num_key, 0, &pos) != HASH_KEY_IS_STRING) { |
|
continue; |
|
} |
|
|
|
if (value == EG(uninitialized_zval_ptr)) { |
|
value = null_value; |
|
} else if (Z_TYPE_P(value) == IS_OBJECT) { |
|
/* these are zvalues create on demand, with refcount and is_ref |
|
* status left in an uninitalized stated */ |
|
zval_dtor(value); |
|
efree(value); |
|
|
|
value = object_value; |
|
} else { |
|
/* see comment above */ |
|
Z_SET_REFCOUNT_P(value, 0); |
|
Z_UNSET_ISREF_P(value); |
|
} |
|
|
|
zval_add_ref(&value); |
|
zend_hash_add(debug_info, string_key, string_length, |
|
&value, sizeof(zval *), NULL); |
|
} |
|
|
|
zval_ptr_dtor(&null_value); |
|
zval_ptr_dtor(&object_value); |
|
|
|
return debug_info; |
|
} |
|
/* }}} */ |
|
|
|
static HashTable* dom_get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */ |
|
{ |
|
return dom_get_debug_info_helper(object, is_temp TSRMLS_CC); |
|
} |
|
/* }}} */ |
|
|
void *php_dom_export_node(zval *object TSRMLS_DC) /* {{{ */ |
void *php_dom_export_node(zval *object TSRMLS_DC) /* {{{ */ |
{ |
{ |
php_libxml_node_object *intern; |
php_libxml_node_object *intern; |
Line 484 void *php_dom_export_node(zval *object TSRMLS_DC) /* {
|
Line 565 void *php_dom_export_node(zval *object TSRMLS_DC) /* {
|
Get a simplexml_element object from dom to allow for processing */ |
Get a simplexml_element object from dom to allow for processing */ |
PHP_FUNCTION(dom_import_simplexml) |
PHP_FUNCTION(dom_import_simplexml) |
{ |
{ |
zval *rv = NULL; |
|
zval *node; |
zval *node; |
xmlNodePtr nodep = NULL; |
xmlNodePtr nodep = NULL; |
php_libxml_node_object *nodeobj; |
php_libxml_node_object *nodeobj; |
Line 498 PHP_FUNCTION(dom_import_simplexml)
|
Line 578 PHP_FUNCTION(dom_import_simplexml)
|
nodep = php_libxml_import_node(node TSRMLS_CC); |
nodep = php_libxml_import_node(node TSRMLS_CC); |
|
|
if (nodep && nodeobj && (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE)) { |
if (nodep && nodeobj && (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE)) { |
DOM_RET_OBJ(rv, (xmlNodePtr) nodep, &ret, (dom_object *)nodeobj); | DOM_RET_OBJ((xmlNodePtr) nodep, &ret, (dom_object *)nodeobj); |
} else { |
} else { |
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Nodetype to import"); |
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Nodetype to import"); |
RETURN_NULL(); |
RETURN_NULL(); |
Line 586 PHP_MINIT_FUNCTION(dom)
|
Line 666 PHP_MINIT_FUNCTION(dom)
|
dom_object_handlers.get_property_ptr_ptr = dom_get_property_ptr_ptr; |
dom_object_handlers.get_property_ptr_ptr = dom_get_property_ptr_ptr; |
dom_object_handlers.clone_obj = dom_objects_store_clone_obj; |
dom_object_handlers.clone_obj = dom_objects_store_clone_obj; |
dom_object_handlers.has_property = dom_property_exists; |
dom_object_handlers.has_property = dom_property_exists; |
|
dom_object_handlers.get_debug_info = dom_get_debug_info; |
|
|
zend_hash_init(&classes, 0, NULL, NULL, 1); |
zend_hash_init(&classes, 0, NULL, NULL, 1); |
|
|
Line 1053 void dom_namednode_iter(dom_object *basenode, int ntyp
|
Line 1134 void dom_namednode_iter(dom_object *basenode, int ntyp
|
static dom_object* dom_objects_set_class(zend_class_entry *class_type, zend_bool hash_copy TSRMLS_DC) /* {{{ */ |
static dom_object* dom_objects_set_class(zend_class_entry *class_type, zend_bool hash_copy TSRMLS_DC) /* {{{ */ |
{ |
{ |
zend_class_entry *base_class; |
zend_class_entry *base_class; |
zval *tmp; |
|
dom_object *intern; |
dom_object *intern; |
|
|
if (instanceof_function(class_type, dom_xpath_class_entry TSRMLS_CC)) { |
if (instanceof_function(class_type, dom_xpath_class_entry TSRMLS_CC)) { |
Line 1075 static dom_object* dom_objects_set_class(zend_class_en
|
Line 1155 static dom_object* dom_objects_set_class(zend_class_en
|
|
|
zend_object_std_init(&intern->std, class_type TSRMLS_CC); |
zend_object_std_init(&intern->std, class_type TSRMLS_CC); |
if (hash_copy) { |
if (hash_copy) { |
zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); | object_properties_init(&intern->std, class_type); |
} |
} |
|
|
return intern; |
return intern; |
Line 1234 void php_dom_create_interator(zval *return_value, int
|
Line 1314 void php_dom_create_interator(zval *return_value, int
|
/* }}} */ |
/* }}} */ |
|
|
/* {{{ php_dom_create_object */ |
/* {{{ php_dom_create_object */ |
PHP_DOM_EXPORT zval *php_dom_create_object(xmlNodePtr obj, int *found, zval *wrapper_in, zval *return_value, dom_object *domobj TSRMLS_DC) | PHP_DOM_EXPORT zval *php_dom_create_object(xmlNodePtr obj, int *found, zval *return_value, dom_object *domobj TSRMLS_DC) |
{ |
{ |
zval *wrapper; |
zval *wrapper; |
zend_class_entry *ce; |
zend_class_entry *ce; |