py: Add mp_obj_new_str_from_vstr, and use it where relevant.

This patch allows to reuse vstr memory when creating str/bytes object.
This improves memory usage.

Also saves code ROM: 128 bytes on stmhal, 92 bytes on bare-arm, and 88
bytes on unix x64.
This commit is contained in:
Damien George
2015-01-21 19:14:25 +00:00
parent 2e526ff1a1
commit 0b9ee86133
8 changed files with 82 additions and 109 deletions

View File

@@ -351,13 +351,13 @@ mp_obj_t mp_obj_new_exception_msg_varg(const mp_obj_type_t *exc_type, const char
} else {
// render exception message and store as .args[0]
// TODO: optimize bufferbloat
vstr_t *vstr = vstr_new();
vstr_t vstr;
vstr_init(&vstr, 16);
va_list ap;
va_start(ap, fmt);
vstr_vprintf(vstr, fmt, ap);
vstr_vprintf(&vstr, fmt, ap);
va_end(ap);
o->args->items[0] = mp_obj_new_str(vstr->buf, vstr->len, false);
vstr_free(vstr);
o->args->items[0] = mp_obj_new_str_from_vstr(&mp_type_str, &vstr);
}
}