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.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 */
|
||||
/* maybe it would be better to create one for this purpose */
|
||||
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)
|
||||
{
|
||||
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)) {
|
||||
ZEND_ASSERT(zval_ptr != &EG(uninitialized_zval));
|
||||
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 {
|
||||
if (is_ref) {
|
||||
SEPARATE_ZVAL_TO_MAKE_IS_REF(p);
|
||||
/*
|
||||
if (!Z_ISREF_P(p)) {
|
||||
if (IS_REFCOUNTED(Z_TYPE_P(p)) && Z_REFCOUNT_P(p) > 1) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
*/
|
||||
} else if (Z_ISREF_P(p)) {
|
||||
ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(p));
|
||||
if (Z_REFCOUNTED(tmp) && Z_REFCOUNT(tmp) > 1) {
|
||||
|
|
|
@ -2257,6 +2257,10 @@ ZEND_VM_HANDLER(56, ZEND_ADD_VAR, TMP|UNUSED, TMP|VAR|CV)
|
|||
ZVAL_STR(str, STR_EMPTY_ALLOC());
|
||||
}
|
||||
|
||||
if (Z_TYPE_P(var) != IS_STRING) {
|
||||
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);
|
||||
|
||||
|
@ -2264,6 +2268,7 @@ ZEND_VM_HANDLER(56, ZEND_ADD_VAR, TMP|UNUSED, TMP|VAR|CV)
|
|||
var = &var_copy;
|
||||
}
|
||||
}
|
||||
}
|
||||
add_string_to_string(str, str, var);
|
||||
|
||||
if (use_copy) {
|
||||
|
|
|
@ -9518,6 +9518,10 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_
|
|||
ZVAL_STR(str, STR_EMPTY_ALLOC());
|
||||
}
|
||||
|
||||
if (Z_TYPE_P(var) != IS_STRING) {
|
||||
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);
|
||||
|
||||
|
@ -9525,6 +9529,7 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_
|
|||
var = &var_copy;
|
||||
}
|
||||
}
|
||||
}
|
||||
add_string_to_string(str, str, var);
|
||||
|
||||
if (use_copy) {
|
||||
|
@ -10318,6 +10323,10 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_
|
|||
ZVAL_STR(str, STR_EMPTY_ALLOC());
|
||||
}
|
||||
|
||||
if (Z_TYPE_P(var) != IS_STRING) {
|
||||
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);
|
||||
|
||||
|
@ -10325,6 +10334,7 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_
|
|||
var = &var_copy;
|
||||
}
|
||||
}
|
||||
}
|
||||
add_string_to_string(str, str, var);
|
||||
|
||||
if (use_copy) {
|
||||
|
@ -11663,6 +11673,10 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_A
|
|||
ZVAL_STR(str, STR_EMPTY_ALLOC());
|
||||
}
|
||||
|
||||
if (Z_TYPE_P(var) != IS_STRING) {
|
||||
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);
|
||||
|
||||
|
@ -11670,6 +11684,7 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_A
|
|||
var = &var_copy;
|
||||
}
|
||||
}
|
||||
}
|
||||
add_string_to_string(str, str, var);
|
||||
|
||||
if (use_copy) {
|
||||
|
@ -25225,6 +25240,10 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDL
|
|||
ZVAL_STR(str, STR_EMPTY_ALLOC());
|
||||
}
|
||||
|
||||
if (Z_TYPE_P(var) != IS_STRING) {
|
||||
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);
|
||||
|
||||
|
@ -25232,6 +25251,7 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDL
|
|||
var = &var_copy;
|
||||
}
|
||||
}
|
||||
}
|
||||
add_string_to_string(str, str, var);
|
||||
|
||||
if (use_copy) {
|
||||
|
@ -26473,6 +26493,10 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDL
|
|||
ZVAL_STR(str, STR_EMPTY_ALLOC());
|
||||
}
|
||||
|
||||
if (Z_TYPE_P(var) != IS_STRING) {
|
||||
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);
|
||||
|
||||
|
@ -26480,6 +26504,7 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDL
|
|||
var = &var_copy;
|
||||
}
|
||||
}
|
||||
}
|
||||
add_string_to_string(str, str, var);
|
||||
|
||||
if (use_copy) {
|
||||
|
@ -28120,6 +28145,10 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLE
|
|||
ZVAL_STR(str, STR_EMPTY_ALLOC());
|
||||
}
|
||||
|
||||
if (Z_TYPE_P(var) != IS_STRING) {
|
||||
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);
|
||||
|
||||
|
@ -28127,6 +28156,7 @@ static int ZEND_FASTCALL ZEND_ADD_VAR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLE
|
|||
var = &var_copy;
|
||||
}
|
||||
}
|
||||
}
|
||||
add_string_to_string(str, str, var);
|
||||
|
||||
if (use_copy) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue