use_copy = zend_make_printable_zval(op_array->literals + i, &zv);
fprintf(stderr, "Literal %d, val (%d):%s\n", i, Z_STRLEN(zv), Z_STRVAL(zv));
if (use_copy) {
- zval_dtor(&zv);
+ zval_ptr_dtor_nogc(&zv);
}
}
fflush(stderr);
for (i = 0; i < op_array->last_literal; i++) {
if (!info[i].flags) {
/* unsed literal */
- zval_dtor(&op_array->literals[i]);
+ zval_ptr_dtor_nogc(&op_array->literals[i]);
continue;
}
switch (Z_TYPE(op_array->literals[i])) {
zend_string_release(key);
map[i] = Z_LVAL_P(pos);
- zval_dtor(&op_array->literals[i]);
+ zval_ptr_dtor_nogc(&op_array->literals[i]);
n = LITERAL_NUM_RELATED(info[i].flags);
while (n > 1) {
i++;
- zval_dtor(&op_array->literals[i]);
+ zval_ptr_dtor_nogc(&op_array->literals[i]);
n--;
}
} else {
}
j++;
} else {
- zval_dtor(&op_array->literals[i]);
+ zval_ptr_dtor_nogc(&op_array->literals[i]);
}
map[i] = l_empty_arr;
break;
use_copy = zend_make_printable_zval(op_array->literals + i, &zv);
fprintf(stderr, "Literal %d, val (%d):%s\n", i, Z_STRLEN(zv), Z_STRVAL(zv));
if (use_copy) {
- zval_dtor(&zv);
+ zval_ptr_dtor_nogc(&zv);
}
}
fflush(stderr);
static void zend_optimizer_zval_dtor_wrapper(zval *zvalue)
{
- zval_dtor(zvalue);
+ zval_ptr_dtor_nogc(zvalue);
}
void zend_optimizer_collect_constant(zend_optimizer_ctx *ctx, zval *name, zval* value)
static inline void drop_leading_backslash(zval *val) {
if (Z_STRVAL_P(val)[0] == '\\') {
zend_string *str = zend_string_init(Z_STRVAL_P(val) + 1, Z_STRLEN_P(val) - 1, 0);
- zval_dtor(val);
+ zval_ptr_dtor_nogc(val);
ZVAL_STR(val, str);
}
}
#define REQUIRES_STRING(val) do { \
if (Z_TYPE_P(val) != IS_STRING) { \
- zval_dtor(val); \
+ zval_ptr_dtor_nogc(val); \
return 0; \
} \
} while (0)
#define TO_STRING_NOWARN(val) do { \
if (Z_TYPE_P(val) >= IS_ARRAY) { \
- zval_dtor(val); \
+ zval_ptr_dtor_nogc(val); \
return 0; \
} \
convert_to_string(val); \
switch (opline->opcode) {
case ZEND_FREE:
MAKE_NOP(opline);
- zval_dtor(val);
+ zval_ptr_dtor_nogc(val);
return 1;
case ZEND_INIT_STATIC_METHOD_CALL:
case ZEND_CATCH:
case ZEND_SEPARATE:
case ZEND_SEND_VAR_NO_REF:
case ZEND_SEND_VAR_NO_REF_EX:
- zval_ptr_dtor(val);
+ zval_ptr_dtor_nogc(val);
return 0;
case ZEND_VERIFY_RETURN_TYPE:
/* This would require a non-local change.
* zend_optimizer_replace_by_const() supports this. */
- zval_ptr_dtor(val);
+ zval_ptr_dtor_nogc(val);
return 0;
case ZEND_CASE:
case ZEND_FETCH_LIST:
- zval_ptr_dtor(val);
+ zval_ptr_dtor_nogc(val);
return 0;
case ZEND_CONCAT:
case ZEND_FAST_CONCAT:
switch (opline->opcode) {
case ZEND_ASSIGN_REF:
case ZEND_FAST_CALL:
- zval_dtor(val);
+ zval_ptr_dtor_nogc(val);
return 0;
case ZEND_FETCH_CLASS:
case ZEND_INIT_FCALL_BY_NAME:
case ZEND_INIT_DYNAMIC_CALL:
if (Z_TYPE_P(val) == IS_STRING) {
if (zend_memrchr(Z_STRVAL_P(val), ':', Z_STRLEN_P(val))) {
- zval_dtor(val);
+ zval_ptr_dtor_nogc(val);
return 0;
}
if (zend_optimizer_classify_function(Z_STR_P(val), opline->extended_value)) {
/* Dynamic call to various special functions must stay dynamic,
* otherwise would drop a warning */
- zval_dtor(val);
+ zval_ptr_dtor_nogc(val);
return 0;
}
if (Z_TYPE_P(val) == IS_STRING) {
zend_ulong index;
if (ZEND_HANDLE_NUMERIC(Z_STR_P(val), index)) {
- zval_dtor(val);
+ zval_ptr_dtor_nogc(val);
ZVAL_LONG(val, index);
}
}
case ZEND_ASSIGN_DIM:
case ZEND_SEPARATE:
case ZEND_RETURN_BY_REF:
- zval_dtor(val);
+ zval_ptr_dtor_nogc(val);
return 0;
case ZEND_SEND_VAR:
opline->extended_value = 0;
opline->opcode = ZEND_SEND_VAL_EX;
break;
case ZEND_SEND_VAR_NO_REF:
- zval_dtor(val);
+ zval_ptr_dtor_nogc(val);
return 0;
case ZEND_SEND_VAR_NO_REF_EX:
opline->opcode = ZEND_SEND_VAL;
ZEND_ASSERT(m->opcode == ZEND_FREE && m->op1_type == type && m->op1.var == var);
MAKE_NOP(m);
- zval_dtor(val);
+ zval_ptr_dtor_nogc(val);
zend_optimizer_remove_live_range(op_array, var);
return 1;
}
if (!in_switch) {
ZEND_ASSERT(opline->opcode == ZEND_FREE);
MAKE_NOP(opline);
- zval_dtor(val);
+ zval_ptr_dtor_nogc(val);
return 1;
}
}
m++;
}
- zval_dtor(val);
+ zval_ptr_dtor_nogc(val);
zend_optimizer_remove_live_range(op_array, var);
return 1;
}
|| ZEND_TYPE_CODE(ret_info->type) == IS_CALLABLE
|| !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(val))
|| (op_array->fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
- zval_dtor(val);
+ zval_ptr_dtor_nogc(val);
return 0;
}
MAKE_NOP(opline);