py/objstr: Optimize string concatenation with empty string.
In this, don't allocate copy, just return non-empty string. This helps with a standard pattern of buffering data in case of short reads: buf = b"" while ...: s = f.read(...) buf += s ... For a typical case when single read returns all data needed, there won't be extra allocation. This optimization helps uasyncio.
This commit is contained in:
parent
221f88d1f3
commit
e2e663291d
|
@ -358,6 +358,13 @@ mp_obj_t mp_obj_str_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case MP_BINARY_OP_ADD:
|
case MP_BINARY_OP_ADD:
|
||||||
case MP_BINARY_OP_INPLACE_ADD: {
|
case MP_BINARY_OP_INPLACE_ADD: {
|
||||||
|
if (lhs_len == 0) {
|
||||||
|
return rhs_in;
|
||||||
|
}
|
||||||
|
if (rhs_len == 0) {
|
||||||
|
return lhs_in;
|
||||||
|
}
|
||||||
|
|
||||||
vstr_t vstr;
|
vstr_t vstr;
|
||||||
vstr_init_len(&vstr, lhs_len + rhs_len);
|
vstr_init_len(&vstr, lhs_len + rhs_len);
|
||||||
memcpy(vstr.buf, lhs_data, lhs_len);
|
memcpy(vstr.buf, lhs_data, lhs_len);
|
||||||
|
|
Loading…
Reference in New Issue