class_type->constants_updated = 1;
}
- arg->value.obj = zend_objects_new(&object);
+ arg->type = IS_OBJECT;
+ arg->value.obj = zend_objects_new(&object, class_type);
- ALLOC_HASHTABLE_REL(object->properties);
- zend_hash_init(object->properties, 0, NULL, ZVAL_PTR_DTOR, 0);
zend_hash_copy(object->properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
- object->ce = class_type;
-
- arg->type = IS_OBJECT;
+
return SUCCESS;
}
#include "zend.h"
#include "zend_globals.h"
+#include "zend_variables.h"
#define ZEND_DEBUG_OBJECTS 0
efree(objects->object_buckets);
}
-zend_object_value zend_objects_new(zend_object **object)
+zend_object_value zend_objects_new(zend_object **object, zend_class_entry *class_type)
{
zend_object_handle handle;
zend_object_value retval;
}
EG(objects).object_buckets[handle].valid = 1;
EG(objects).object_buckets[handle].bucket.obj.refcount = 1;
+
*object = &EG(objects).object_buckets[handle].bucket.obj.object;
+
+ (*object)->ce = class_type;
+ /* Try and change ALLOC_HASHTABLE to ALLOC_HASHTABLE_REL by also fixing this function's prototype */
+ ALLOC_HASHTABLE((*object)->properties);
+ zend_hash_init((*object)->properties, 0, NULL, ZVAL_PTR_DTOR, 0);
+
retval.handle = handle;
retval.handlers = zoh;
#if ZEND_DEBUG_OBJECTS
void zend_objects_init(zend_objects *objects, zend_uint init_size);
void zend_objects_destroy(zend_objects *objects);
-zend_object_value zend_objects_new(zend_object **object);
+zend_object_value zend_objects_new(zend_object **object, zend_class_entry *class_type);
zend_object *zend_objects_get_address(zend_object_handle handle);
void zend_objects_add_ref(zend_object_handle handle);
void zend_objects_del_ref(zend_object_handle handle);
zend_hash_index_update(op->value.ht, 0, (void *) &entry, sizeof(zval *), NULL);
op->type = IS_ARRAY;
break;
-/* OBJECTS_FIXME */
case IS_OBJECT:
- ALLOC_HASHTABLE(Z_OBJPROP_P(op));
- zend_hash_init(Z_OBJPROP_P(op), 0, NULL, ZVAL_PTR_DTOR, 0);
- zend_hash_update(Z_OBJPROP_P(op), "scalar", sizeof("scalar"), (void *) &entry, sizeof(zval *), NULL);
- Z_OBJCE_P(op) = &zend_standard_class_def;
- Z_TYPE_P(op) = IS_OBJECT;
+ {
+ /* OBJECTS_OPTIMIZE */
+ TSRMLS_FETCH();
+
+ object_init(op);
+ zend_hash_update(Z_OBJPROP_P(op), "scalar", sizeof("scalar"), (void *) &entry, sizeof(zval *), NULL);
+ }
break;
}
}
ZEND_API void convert_to_object(zval *op)
{
switch(op->type) {
-/* OBJECTS_FIXME */
case IS_ARRAY:
- Z_TYPE_P(op) = IS_OBJECT;
- Z_OBJPROP_P(op) = op->value.ht;
- Z_OBJCE_P(op) = &zend_standard_class_def;
- return;
- break;
+ {
+ /* OBJECTS_OPTIMIZE */
+ TSRMLS_FETCH();
+
+ object_init(op);
+ zend_hash_destroy(Z_OBJPROP_P(op));
+ FREE_HASHTABLE(Z_OBJPROP_P(op));
+ Z_OBJPROP_P(op) = op->value.ht;
+ return;
+ break;
+ }
case IS_OBJECT:
return;
-/* OBJECTS_FIXME */
case IS_NULL:
- ALLOC_HASHTABLE(Z_OBJPROP_P(op));
- zend_hash_init(Z_OBJPROP_P(op), 0, NULL, ZVAL_PTR_DTOR, 0);
- Z_OBJCE_P(op) = &zend_standard_class_def;
- Z_TYPE_P(op) = IS_OBJECT;
- break;
+ {
+ /* OBJECTS_OPTIMIZE */
+ TSRMLS_FETCH();
+
+ object_init(op);
+ break;
+ }
default:
convert_scalar_to_array(op, IS_OBJECT);
break;