diff options
author | Dmitry Stogov <dmitry@zend.com> | 2014-02-21 22:59:51 +0400 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2014-02-21 22:59:51 +0400 |
commit | 6454684212b4687167cc058ad77972f2d456cf20 (patch) | |
tree | 7c6a6f39988d765593b8dd7e15187cb1b0add4de /Zend/zend_operators.c | |
parent | 008a42e7c8799fa7885f805b714c16d8e703b35f (diff) | |
download | php-git-6454684212b4687167cc058ad77972f2d456cf20.tar.gz |
Use better data structures (incomplete)
Diffstat (limited to 'Zend/zend_operators.c')
-rw-r--r-- | Zend/zend_operators.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 8ead9201ed..1803d5075d 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -610,7 +610,7 @@ ZEND_API void _convert_to_string(zval *op ZEND_FILE_LINE_DC) /* {{{ */ } break; case IS_RESOURCE: { - long tmp = Z_LVAL_P(op); + long tmp = Z_RES_HANDLE_P(op); char *str; int len; TSRMLS_FETCH(); @@ -747,7 +747,14 @@ ZEND_API void convert_to_object(zval *op) /* {{{ */ switch (Z_TYPE_P(op)) { case IS_ARRAY: { - object_and_properties_init(op, zend_standard_class_def, Z_ARRVAL_P(op)); + HashTable *properties = emalloc(sizeof(HashTable)); + zend_array *arr = Z_ARR_P(op); + + memcpy(properties, Z_ARRVAL_P(op), sizeof(HashTable)); + object_and_properties_init(op, zend_standard_class_def, properties); + if (--arr->gc.refcount == 0) { + efree(arr); + } break; } case IS_OBJECT: |