1
0
mirror of https://github.com/php/php-src.git synced 2026-04-20 14:31:06 +02:00

Merge branch 'refactoring2' of github.com:zendtech/php into refactoring2

This commit is contained in:
Xinchen Hui
2014-02-11 19:33:48 +08:00
5 changed files with 940 additions and 1010 deletions

View File

@@ -685,6 +685,11 @@ END_EXTERN_C()
SEPARATE_ZVAL(zv); \
}
#define SEPARATE_ZVAL_IF_REF(zv) \
if (Z_ISREF_P(zv)) { \
SEPARATE_ZVAL(zv); \
}
#define SEPARATE_ZVAL_TO_MAKE_IS_REF(zv) \
if (!Z_ISREF_P(zv)) { \
zval ref; \

View File

@@ -673,30 +673,30 @@ END_EXTERN_C()
{ \
char *_name = (name); \
\
ZEND_SET_SYMBOL_WITH_LENGTH(symtable, _name, strlen(_name)+1, var, 1, 0); \
ZEND_SET_SYMBOL_WITH_LENGTH(symtable, _name, strlen(_name), var, 1, 0); \
}
#define ZEND_SET_SYMBOL_WITH_LENGTH(symtable, name, name_length, var, _refcount, _is_ref) \
{ \
zval **orig_var; \
zval *orig_var; \
\
if (zend_hash_find(symtable, (name), (name_length), (void **) &orig_var)==SUCCESS \
&& Z_ISREF_PP(orig_var)) { \
Z_SET_REFCOUNT_P(var, Z_REFCOUNT_PP(orig_var)); \
Z_SET_ISREF_P(var); \
if ((orig_var = zend_hash_str_find(symtable, (name), (name_length))) != NULL \
&& Z_ISREF_P(orig_var)) { \
Z_SET_REFCOUNT_P(var, Z_REFCOUNT_P(orig_var)); \
/*???Z_SET_ISREF_P(var);*/ \
\
if (_refcount) { \
Z_SET_REFCOUNT_P(var, Z_REFCOUNT_P(var) + _refcount - 1); \
} \
zval_dtor(*orig_var); \
**orig_var = *(var); \
FREE_ZVAL(var); \
zval_dtor(orig_var); \
ZVAL_COPY_VALUE(orig_var, var); \
/*???FREE_ZVAL(var);*/ \
} else { \
Z_SET_ISREF_TO_P(var, _is_ref); \
/*???Z_SET_ISREF_TO_P(var, _is_ref);*/ \
if (_refcount) { \
Z_SET_REFCOUNT_P(var, _refcount); \
} \
zend_hash_update(symtable, (name), (name_length), &(var), sizeof(zval *), NULL); \
zend_hash_str_update(symtable, (name), (name_length), var); \
} \
}

File diff suppressed because it is too large Load Diff

View File

@@ -103,7 +103,7 @@ PHP_FUNCTION(array_key_exists);
PHP_FUNCTION(array_chunk);
PHP_FUNCTION(array_combine);
PHPAPI HashTable* php_splice(HashTable *, int, int, zval ***, int, HashTable **);
PHPAPI HashTable* php_splice(HashTable *, int, int, zval *, int, HashTable *);
PHPAPI int php_array_merge(HashTable *dest, HashTable *src, int recursive TSRMLS_DC);
PHPAPI int php_array_replace_recursive(HashTable *dest, HashTable *src TSRMLS_DC);
PHPAPI int php_multisort_compare(const void *a, const void *b TSRMLS_DC);

File diff suppressed because it is too large Load Diff