Skip to content
Snippets Groups Projects
Commit e2e66329 authored by Paul Sokolovsky's avatar Paul Sokolovsky
Browse files

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.
parent 221f88d1
No related branches found
No related tags found
No related merge requests found
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment