|
|
|
|
@@ -6624,6 +6624,11 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
|
|
|
|
|
@@ -6649,6 +6654,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -6657,6 +6663,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -6717,6 +6724,10 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
GC_ADD_FLAGS(str, IS_STR_VALID_UTF8);
|
|
|
|
|
}
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CONST != IS_CONST) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -8691,6 +8702,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDL
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
|
|
|
|
|
@@ -8719,6 +8735,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDL
|
|
|
|
|
}
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -8727,6 +8744,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDL
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -9116,6 +9134,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
|
|
|
|
|
@@ -9141,6 +9164,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -9149,6 +9173,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -9209,6 +9234,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
GC_ADD_FLAGS(str, IS_STR_VALID_UTF8);
|
|
|
|
|
}
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CONST != IS_CONST) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -11057,6 +11086,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(Z
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if (IS_CV == IS_CONST || IS_CV == IS_CV) {
|
|
|
|
|
@@ -11085,6 +11119,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(Z
|
|
|
|
|
}
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -11093,6 +11128,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(Z
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -11482,6 +11518,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HAND
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if (IS_CV == IS_CONST || IS_CV == IS_CV) {
|
|
|
|
|
@@ -11507,6 +11548,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HAND
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -11515,6 +11557,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HAND
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -11575,6 +11618,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HAND
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
GC_ADD_FLAGS(str, IS_STR_VALID_UTF8);
|
|
|
|
|
}
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CONST != IS_CONST) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -15088,6 +15135,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDL
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
|
|
|
|
|
@@ -15116,6 +15168,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDL
|
|
|
|
|
}
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -15124,6 +15177,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDL
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -15827,6 +15881,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
|
|
|
|
|
@@ -15852,6 +15911,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -15860,6 +15920,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -15920,6 +15981,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
GC_ADD_FLAGS(str, IS_STR_VALID_UTF8);
|
|
|
|
|
}
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -16525,6 +16590,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HAND
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
|
|
|
|
|
@@ -16553,6 +16623,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HAND
|
|
|
|
|
}
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -16561,6 +16632,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HAND
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -17264,6 +17336,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
|
|
|
|
|
@@ -17289,6 +17366,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -17297,6 +17375,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -17357,6 +17436,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
GC_ADD_FLAGS(str, IS_STR_VALID_UTF8);
|
|
|
|
|
}
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -18213,6 +18296,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if (IS_CV == IS_CONST || IS_CV == IS_CV) {
|
|
|
|
|
@@ -18241,6 +18329,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(
|
|
|
|
|
}
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -18249,6 +18338,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -18590,6 +18680,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HAN
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if (IS_CV == IS_CONST || IS_CV == IS_CV) {
|
|
|
|
|
@@ -18615,6 +18710,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HAN
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -18623,6 +18719,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HAN
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -18683,6 +18780,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HAN
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
GC_ADD_FLAGS(str, IS_STR_VALID_UTF8);
|
|
|
|
|
}
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -40255,6 +40356,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(Z
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
|
|
|
|
|
@@ -40283,6 +40389,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(Z
|
|
|
|
|
}
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -40291,6 +40398,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(Z
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -42751,6 +42859,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HAND
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
|
|
|
|
|
@@ -42776,6 +42889,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HAND
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -42784,6 +42898,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HAND
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -42844,6 +42959,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HAND
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
GC_ADD_FLAGS(str, IS_STR_VALID_UTF8);
|
|
|
|
|
}
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CV != IS_CONST) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -44067,6 +44186,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
|
|
|
|
|
@@ -44095,6 +44219,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(
|
|
|
|
|
}
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -44103,6 +44228,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -46492,6 +46618,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HAN
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
|
|
|
|
|
@@ -46517,6 +46648,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HAN
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -46525,6 +46657,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HAN
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -46585,6 +46718,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HAN
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
GC_ADD_FLAGS(str, IS_STR_VALID_UTF8);
|
|
|
|
|
}
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CV != IS_CONST) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -49361,6 +49498,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if (IS_CV == IS_CONST || IS_CV == IS_CV) {
|
|
|
|
|
@@ -49389,6 +49531,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND
|
|
|
|
|
}
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -49397,6 +49540,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -51885,6 +52029,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER
|
|
|
|
|
zend_string *op1_str = Z_STR_P(op1);
|
|
|
|
|
zend_string *op2_str = Z_STR_P(op2);
|
|
|
|
|
zend_string *str;
|
|
|
|
|
uint32_t flags = 0;
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
flags = IS_STR_VALID_UTF8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
|
|
|
|
|
if (IS_CV == IS_CONST || IS_CV == IS_CV) {
|
|
|
|
|
@@ -51910,6 +52059,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op2_str, 0);
|
|
|
|
|
@@ -51918,6 +52068,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER
|
|
|
|
|
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);
|
|
|
|
|
GC_ADD_FLAGS(str, flags);
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
@@ -51978,6 +52129,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
if (ZSTR_IS_VALID_UTF8(op1_str) && ZSTR_IS_VALID_UTF8(op2_str)) {
|
|
|
|
|
GC_ADD_FLAGS(str, IS_STR_VALID_UTF8);
|
|
|
|
|
}
|
|
|
|
|
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
|
|
|
|
|
if (IS_CV != IS_CONST) {
|
|
|
|
|
zend_string_release_ex(op1_str, 0);
|
|
|
|
|
|