} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
-
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op1);
+ }
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op2);
+ }
if (result) {
goto is_equal_true;
} else {
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
-
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op1);
+ }
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op2);
+ }
if (!result) {
goto is_not_equal_true;
} else {
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
}
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
- zval_ptr_dtor_nogc(free_op2);
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
} else {
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
- zval_ptr_dtor_nogc(free_op2);
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
}
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
} else {
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
}
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
- zval_ptr_dtor_nogc(free_op1);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
- zval_ptr_dtor_nogc(free_op1);
-
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
} else {
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
- zval_ptr_dtor_nogc(free_op1);
-
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op1);
+ }
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op2);
+ }
if (result) {
goto is_equal_true;
} else {
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
- zval_ptr_dtor_nogc(free_op1);
-
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op1);
+ }
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op2);
+ }
if (!result) {
goto is_not_equal_true;
} else {
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
- zval_ptr_dtor_nogc(free_op1);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
- zval_ptr_dtor_nogc(free_op1);
-
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
}
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
- zval_ptr_dtor_nogc(free_op1);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
- zval_ptr_dtor_nogc(free_op1);
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
} else {
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
- zval_ptr_dtor_nogc(free_op1);
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op1);
+ }
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op2);
+ }
if (result) {
goto is_equal_true;
} else {
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
- zval_ptr_dtor_nogc(free_op1);
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op1);
+ }
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op2);
+ }
if (!result) {
goto is_not_equal_true;
} else {
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
- zval_ptr_dtor_nogc(free_op1);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
- zval_ptr_dtor_nogc(free_op1);
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
}
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
- zval_ptr_dtor_nogc(free_op1);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
- zval_ptr_dtor_nogc(free_op1);
-
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
} else {
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
- zval_ptr_dtor_nogc(free_op1);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
- zval_ptr_dtor_nogc(free_op1);
-
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
}
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if (IS_CV == IS_CONST || IS_CV == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
} else {
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
-
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op1);
+ }
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op2);
+ }
if (result) {
goto is_equal_true;
} else {
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
-
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op1);
+ }
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op2);
+ }
if (!result) {
goto is_not_equal_true;
} else {
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if (IS_CV == IS_CONST || IS_CV == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
}
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if (IS_CV == IS_CONST || IS_CV == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
- zval_ptr_dtor_nogc(free_op2);
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
} else {
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
-
- zval_ptr_dtor_nogc(free_op2);
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op1);
+ }
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op2);
+ }
if (result) {
goto is_equal_true;
} else {
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
-
- zval_ptr_dtor_nogc(free_op2);
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op1);
+ }
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op2);
+ }
if (!result) {
goto is_not_equal_true;
} else {
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if (IS_CV == IS_CONST || IS_CV == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
- zval_ptr_dtor_nogc(free_op2);
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
- zval_ptr_dtor_nogc(free_op2);
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
}
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if (IS_CV == IS_CONST || IS_CV == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
} else {
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
-
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op1);
+ }
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op2);
+ }
if (result) {
goto is_equal_true;
} else {
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
-
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op1);
+ }
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zval_ptr_dtor_str(op2);
+ }
if (!result) {
goto is_not_equal_true;
} else {
} else {
ZVAL_STR(EX_VAR(opline->result.var), op2_str);
}
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
if (IS_CV == IS_CONST || IS_CV == IS_CV) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
} else {
ZVAL_STR(EX_VAR(opline->result.var), op1_str);
}
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
!ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
size_t len = ZSTR_LEN(op1_str);
str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
} else {
str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
-
-
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op1_str, 0);
+ }
+ if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
+ zend_string_release_ex(op2_str, 0);
+ }
}
ZEND_VM_NEXT_OPCODE();
}