mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +02:00
Use better data structures (incomplete)
This commit is contained in:
parent
b3aea904e0
commit
ff61b46941
5 changed files with 61 additions and 23 deletions
|
@ -428,7 +428,7 @@ ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_class_ent
|
||||||
closure->func = *func;
|
closure->func = *func;
|
||||||
closure->func.common.prototype = NULL;
|
closure->func.common.prototype = NULL;
|
||||||
|
|
||||||
if ((scope == NULL) && (this_ptr != NULL)) {
|
if ((scope == NULL) && (Z_TYPE_P(this_ptr) != IS_UNDEF)) {
|
||||||
/* use dummy scope if we're binding an object without specifying a scope */
|
/* use dummy scope if we're binding an object without specifying a scope */
|
||||||
/* maybe it would be better to create one for this purpose */
|
/* maybe it would be better to create one for this purpose */
|
||||||
scope = zend_ce_closure;
|
scope = zend_ce_closure;
|
||||||
|
|
|
@ -72,7 +72,8 @@ ZEND_API int zend_verify_arg_error(int error_type, const zend_function *zf, zend
|
||||||
|
|
||||||
static zend_always_inline void i_zval_ptr_dtor(zval *zval_ptr ZEND_FILE_LINE_DC TSRMLS_DC)
|
static zend_always_inline void i_zval_ptr_dtor(zval *zval_ptr ZEND_FILE_LINE_DC TSRMLS_DC)
|
||||||
{
|
{
|
||||||
if (IS_REFCOUNTED(Z_TYPE_P(zval_ptr))) {
|
//??? IS_CONSTANT_TYPE_MASK used only for some rare cases
|
||||||
|
if (IS_REFCOUNTED(Z_TYPE_P(zval_ptr) & IS_CONSTANT_TYPE_MASK)) {
|
||||||
if (!Z_DELREF_P(zval_ptr)) {
|
if (!Z_DELREF_P(zval_ptr)) {
|
||||||
ZEND_ASSERT(zval_ptr != &EG(uninitialized_zval));
|
ZEND_ASSERT(zval_ptr != &EG(uninitialized_zval));
|
||||||
GC_REMOVE_ZVAL_FROM_BUFFER(zval_ptr);
|
GC_REMOVE_ZVAL_FROM_BUFFER(zval_ptr);
|
||||||
|
|
|
@ -299,6 +299,7 @@ ZEND_API int zval_copy_static_var(zval *p TSRMLS_DC, int num_args, va_list args,
|
||||||
} else {
|
} else {
|
||||||
if (is_ref) {
|
if (is_ref) {
|
||||||
SEPARATE_ZVAL_TO_MAKE_IS_REF(p);
|
SEPARATE_ZVAL_TO_MAKE_IS_REF(p);
|
||||||
|
/*
|
||||||
if (!Z_ISREF_P(p)) {
|
if (!Z_ISREF_P(p)) {
|
||||||
if (IS_REFCOUNTED(Z_TYPE_P(p)) && Z_REFCOUNT_P(p) > 1) {
|
if (IS_REFCOUNTED(Z_TYPE_P(p)) && Z_REFCOUNT_P(p) > 1) {
|
||||||
Z_DELREF_P(p);
|
Z_DELREF_P(p);
|
||||||
|
@ -309,6 +310,7 @@ ZEND_API int zval_copy_static_var(zval *p TSRMLS_DC, int num_args, va_list args,
|
||||||
ZVAL_NEW_REF(p, p);
|
ZVAL_NEW_REF(p, p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
} else if (Z_ISREF_P(p)) {
|
} else if (Z_ISREF_P(p)) {
|
||||||
ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(p));
|
ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(p));
|
||||||
if (Z_REFCOUNTED(tmp) && Z_REFCOUNT(tmp) > 1) {
|
if (Z_REFCOUNTED(tmp) && Z_REFCOUNT(tmp) > 1) {
|
||||||
|
|
|
@ -2258,10 +2258,15 @@ ZEND_VM_HANDLER(56, ZEND_ADD_VAR, TMP|UNUSED, TMP|VAR|CV)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Z_TYPE_P(var) != IS_STRING) {
|
if (Z_TYPE_P(var) != IS_STRING) {
|
||||||
zend_make_printable_zval(var, &var_copy, &use_copy);
|
if (Z_TYPE_P(var) == IS_REFERENCE) {
|
||||||
|
var = Z_REFVAL_P(var);
|
||||||
|
}
|
||||||
|
if (Z_TYPE_P(var) != IS_STRING) {
|
||||||
|
zend_make_printable_zval(var, &var_copy, &use_copy);
|
||||||
|
|
||||||
if (use_copy) {
|
if (use_copy) {
|
||||||
var = &var_copy;
|
var = &var_copy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
add_string_to_string(str, str, var);
|
add_string_to_string(str, str, var);
|
||||||
|
|
|
@ -9519,10 +9519,15 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Z_TYPE_P(var) != IS_STRING) {
|
if (Z_TYPE_P(var) != IS_STRING) {
|
||||||
zend_make_printable_zval(var, &var_copy, &use_copy);
|
if (Z_TYPE_P(var) == IS_REFERENCE) {
|
||||||
|
var = Z_REFVAL_P(var);
|
||||||
|
}
|
||||||
|
if (Z_TYPE_P(var) != IS_STRING) {
|
||||||
|
zend_make_printable_zval(var, &var_copy, &use_copy);
|
||||||
|
|
||||||
if (use_copy) {
|
if (use_copy) {
|
||||||
var = &var_copy;
|
var = &var_copy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
add_string_to_string(str, str, var);
|
add_string_to_string(str, str, var);
|
||||||
|
@ -10319,10 +10324,15 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Z_TYPE_P(var) != IS_STRING) {
|
if (Z_TYPE_P(var) != IS_STRING) {
|
||||||
zend_make_printable_zval(var, &var_copy, &use_copy);
|
if (Z_TYPE_P(var) == IS_REFERENCE) {
|
||||||
|
var = Z_REFVAL_P(var);
|
||||||
|
}
|
||||||
|
if (Z_TYPE_P(var) != IS_STRING) {
|
||||||
|
zend_make_printable_zval(var, &var_copy, &use_copy);
|
||||||
|
|
||||||
if (use_copy) {
|
if (use_copy) {
|
||||||
var = &var_copy;
|
var = &var_copy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
add_string_to_string(str, str, var);
|
add_string_to_string(str, str, var);
|
||||||
|
@ -11664,10 +11674,15 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_A
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Z_TYPE_P(var) != IS_STRING) {
|
if (Z_TYPE_P(var) != IS_STRING) {
|
||||||
zend_make_printable_zval(var, &var_copy, &use_copy);
|
if (Z_TYPE_P(var) == IS_REFERENCE) {
|
||||||
|
var = Z_REFVAL_P(var);
|
||||||
|
}
|
||||||
|
if (Z_TYPE_P(var) != IS_STRING) {
|
||||||
|
zend_make_printable_zval(var, &var_copy, &use_copy);
|
||||||
|
|
||||||
if (use_copy) {
|
if (use_copy) {
|
||||||
var = &var_copy;
|
var = &var_copy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
add_string_to_string(str, str, var);
|
add_string_to_string(str, str, var);
|
||||||
|
@ -25226,10 +25241,15 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDL
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Z_TYPE_P(var) != IS_STRING) {
|
if (Z_TYPE_P(var) != IS_STRING) {
|
||||||
zend_make_printable_zval(var, &var_copy, &use_copy);
|
if (Z_TYPE_P(var) == IS_REFERENCE) {
|
||||||
|
var = Z_REFVAL_P(var);
|
||||||
|
}
|
||||||
|
if (Z_TYPE_P(var) != IS_STRING) {
|
||||||
|
zend_make_printable_zval(var, &var_copy, &use_copy);
|
||||||
|
|
||||||
if (use_copy) {
|
if (use_copy) {
|
||||||
var = &var_copy;
|
var = &var_copy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
add_string_to_string(str, str, var);
|
add_string_to_string(str, str, var);
|
||||||
|
@ -26474,10 +26494,15 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDL
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Z_TYPE_P(var) != IS_STRING) {
|
if (Z_TYPE_P(var) != IS_STRING) {
|
||||||
zend_make_printable_zval(var, &var_copy, &use_copy);
|
if (Z_TYPE_P(var) == IS_REFERENCE) {
|
||||||
|
var = Z_REFVAL_P(var);
|
||||||
|
}
|
||||||
|
if (Z_TYPE_P(var) != IS_STRING) {
|
||||||
|
zend_make_printable_zval(var, &var_copy, &use_copy);
|
||||||
|
|
||||||
if (use_copy) {
|
if (use_copy) {
|
||||||
var = &var_copy;
|
var = &var_copy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
add_string_to_string(str, str, var);
|
add_string_to_string(str, str, var);
|
||||||
|
@ -28121,10 +28146,15 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLE
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Z_TYPE_P(var) != IS_STRING) {
|
if (Z_TYPE_P(var) != IS_STRING) {
|
||||||
zend_make_printable_zval(var, &var_copy, &use_copy);
|
if (Z_TYPE_P(var) == IS_REFERENCE) {
|
||||||
|
var = Z_REFVAL_P(var);
|
||||||
|
}
|
||||||
|
if (Z_TYPE_P(var) != IS_STRING) {
|
||||||
|
zend_make_printable_zval(var, &var_copy, &use_copy);
|
||||||
|
|
||||||
if (use_copy) {
|
if (use_copy) {
|
||||||
var = &var_copy;
|
var = &var_copy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
add_string_to_string(str, str, var);
|
add_string_to_string(str, str, var);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue