Browse Source

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.
pull/2140/head
Paul Sokolovsky 8 years ago
parent
commit
e2e663291d
  1. 7
      py/objstr.c

7
py/objstr.c

@ -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) {
case MP_BINARY_OP_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_init_len(&vstr, lhs_len + rhs_len);
memcpy(vstr.buf, lhs_data, lhs_len);

Loading…
Cancel
Save