py/objstr: Split mp_obj_str_from_vstr into bytes/str versions.
Previously the desired output type was specified. Now make the type part of the function name. Because this function is used in a few places this saves code size due to smaller call-site. This makes `mp_obj_new_str_type_from_vstr` a private function of objstr.c (which is almost the only place where the output type isn't a compile-time constant). This saves ~140 bytes on PYBV11. Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
This commit is contained in:
parent
09879f99ca
commit
8a0ee5a5c0
|
@ -417,7 +417,7 @@ STATIC mp_obj_t machine_i2c_readfrom(size_t n_args, const mp_obj_t *args) {
|
|||
if (ret < 0) {
|
||||
mp_raise_OSError(-ret);
|
||||
}
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(machine_i2c_readfrom_obj, 3, 4, machine_i2c_readfrom);
|
||||
|
||||
|
@ -581,7 +581,7 @@ STATIC mp_obj_t machine_i2c_readfrom_mem(size_t n_args, const mp_obj_t *pos_args
|
|||
mp_raise_OSError(-ret);
|
||||
}
|
||||
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_KW(machine_i2c_readfrom_mem_obj, 1, machine_i2c_readfrom_mem);
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ STATIC mp_obj_t mp_machine_spi_read(size_t n_args, const mp_obj_t *args) {
|
|||
vstr_init_len(&vstr, mp_obj_get_int(args[1]));
|
||||
memset(vstr.buf, n_args == 3 ? mp_obj_get_int(args[2]) : 0, vstr.len);
|
||||
mp_machine_spi_transfer(args[0], vstr.len, vstr.buf, vstr.buf);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_machine_spi_read_obj, 2, 3, mp_machine_spi_read);
|
||||
|
||||
|
|
|
@ -1198,7 +1198,7 @@ STATIC mp_obj_t lwip_socket_recv(mp_obj_t self_in, mp_obj_t len_in) {
|
|||
return mp_const_empty_bytes;
|
||||
}
|
||||
vstr.len = ret;
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_recv_obj, lwip_socket_recv);
|
||||
|
||||
|
@ -1271,7 +1271,7 @@ STATIC mp_obj_t lwip_socket_recvfrom(mp_obj_t self_in, mp_obj_t len_in) {
|
|||
tuple[0] = mp_const_empty_bytes;
|
||||
} else {
|
||||
vstr.len = ret;
|
||||
tuple[0] = mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
tuple[0] = mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
tuple[1] = netutils_format_inet_addr(ip, port, NETUTILS_BIG);
|
||||
return mp_obj_new_tuple(2, tuple);
|
||||
|
|
|
@ -104,7 +104,7 @@ STATIC mp_obj_t mod_binascii_a2b_base64(mp_obj_t data) {
|
|||
mp_raise_ValueError(MP_ERROR_TEXT("incorrect padding"));
|
||||
}
|
||||
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_binascii_a2b_base64_obj, mod_binascii_a2b_base64);
|
||||
|
||||
|
@ -166,7 +166,7 @@ STATIC mp_obj_t mod_binascii_b2a_base64(size_t n_args, const mp_obj_t *pos_args,
|
|||
if (newline) {
|
||||
*out = '\n';
|
||||
}
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(mod_binascii_b2a_base64_obj, 1, mod_binascii_b2a_base64);
|
||||
|
||||
|
|
|
@ -329,7 +329,7 @@ STATIC mp_obj_t aes_process(size_t n_args, const mp_obj_t *args, bool encrypt) {
|
|||
if (out_buf != MP_OBJ_NULL) {
|
||||
return out_buf;
|
||||
}
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
|
||||
STATIC mp_obj_t ucryptolib_aes_encrypt(size_t n_args, const mp_obj_t *args) {
|
||||
|
|
|
@ -109,7 +109,7 @@ STATIC mp_obj_t uhashlib_sha256_digest(mp_obj_t self_in) {
|
|||
vstr_t vstr;
|
||||
vstr_init_len(&vstr, 32);
|
||||
mbedtls_sha256_finish_ret((mbedtls_sha256_context *)&self->state, (unsigned char *)vstr.buf);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
|
||||
#else
|
||||
|
@ -143,7 +143,7 @@ STATIC mp_obj_t uhashlib_sha256_digest(mp_obj_t self_in) {
|
|||
vstr_t vstr;
|
||||
vstr_init_len(&vstr, SHA256_BLOCK_SIZE);
|
||||
sha256_final((CRYAL_SHA256_CTX *)self->state, (byte *)vstr.buf);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -196,7 +196,7 @@ STATIC mp_obj_t uhashlib_sha1_digest(mp_obj_t self_in) {
|
|||
vstr_t vstr;
|
||||
vstr_init_len(&vstr, SHA1_SIZE);
|
||||
SHA1_Final((byte *)vstr.buf, (SHA1_CTX *)self->state);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -237,7 +237,7 @@ STATIC mp_obj_t uhashlib_sha1_digest(mp_obj_t self_in) {
|
|||
vstr_init_len(&vstr, 20);
|
||||
mbedtls_sha1_finish_ret((mbedtls_sha1_context *)self->state, (byte *)vstr.buf);
|
||||
mbedtls_sha1_free((mbedtls_sha1_context *)self->state);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -289,7 +289,7 @@ STATIC mp_obj_t uhashlib_md5_digest(mp_obj_t self_in) {
|
|||
vstr_t vstr;
|
||||
vstr_init_len(&vstr, MD5_SIZE);
|
||||
MD5_Final((byte *)vstr.buf, (MD5_CTX *)self->state);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
#endif // MICROPY_SSL_AXTLS
|
||||
|
||||
|
@ -330,7 +330,7 @@ STATIC mp_obj_t uhashlib_md5_digest(mp_obj_t self_in) {
|
|||
vstr_init_len(&vstr, 16);
|
||||
mbedtls_md5_finish_ret((mbedtls_md5_context *)self->state, (byte *)vstr.buf);
|
||||
mbedtls_md5_free((mbedtls_md5_context *)self->state);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
#endif // MICROPY_SSL_MBEDTLS
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ STATIC mp_obj_t mod_ujson_dump_helper(size_t n_args, const mp_obj_t *pos_args, m
|
|||
vstr_t vstr;
|
||||
vstr_init_print(&vstr, 8, &print_ext.base);
|
||||
mp_obj_print_helper(&print_ext.base, pos_args[0], PRINT_JSON);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_str, &vstr);
|
||||
return mp_obj_new_str_from_vstr(&vstr);
|
||||
} else {
|
||||
// dump(obj, stream)
|
||||
print_ext.base.data = MP_OBJ_TO_PTR(pos_args[1]);
|
||||
|
@ -103,7 +103,7 @@ STATIC mp_obj_t mod_ujson_dumps(mp_obj_t obj) {
|
|||
mp_print_t print;
|
||||
vstr_init_print(&vstr, 8, &print);
|
||||
mp_obj_print_helper(&print, obj, PRINT_JSON);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_str, &vstr);
|
||||
return mp_obj_new_str_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_ujson_dumps_obj, mod_ujson_dumps);
|
||||
|
||||
|
|
|
@ -372,7 +372,11 @@ STATIC mp_obj_t re_sub_helper(size_t n_args, const mp_obj_t *args) {
|
|||
// Add post-match string
|
||||
vstr_add_strn(&vstr_return, subj.begin, subj.end - subj.begin);
|
||||
|
||||
return mp_obj_new_str_from_vstr(mp_obj_get_type(where), &vstr_return);
|
||||
if (mp_obj_get_type(where) == &mp_type_str) {
|
||||
return mp_obj_new_str_from_vstr(&vstr_return);
|
||||
} else {
|
||||
return mp_obj_new_bytes_from_vstr(&vstr_return);
|
||||
}
|
||||
}
|
||||
|
||||
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(re_sub_obj, 3, 5, re_sub_helper);
|
||||
|
|
|
@ -296,7 +296,7 @@ STATIC mp_obj_t socket_recv(mp_obj_t self_in, mp_obj_t len_in) {
|
|||
return mp_const_empty_bytes;
|
||||
}
|
||||
vstr.len = ret;
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_recv_obj, socket_recv);
|
||||
|
||||
|
@ -347,7 +347,7 @@ STATIC mp_obj_t socket_recvfrom(mp_obj_t self_in, mp_obj_t len_in) {
|
|||
tuple[0] = mp_const_empty_bytes;
|
||||
} else {
|
||||
vstr.len = ret;
|
||||
tuple[0] = mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
tuple[0] = mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
tuple[1] = netutils_format_inet_addr(ip, port, NETUTILS_BIG);
|
||||
return mp_obj_new_tuple(2, tuple);
|
||||
|
|
|
@ -360,7 +360,7 @@ mp_obj_t mp_vfs_getcwd(void) {
|
|||
if (!(cwd[0] == '/' && cwd[1] == 0)) {
|
||||
vstr_add_str(&vstr, cwd);
|
||||
}
|
||||
return mp_obj_new_str_from_vstr(&mp_type_str, &vstr);
|
||||
return mp_obj_new_str_from_vstr(&vstr);
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_0(mp_vfs_getcwd_obj, mp_vfs_getcwd);
|
||||
|
||||
|
|
|
@ -116,7 +116,7 @@ STATIC mp_obj_t os_urandom(mp_obj_t num) {
|
|||
for (int i = 0; i < n; i++) {
|
||||
vstr.buf[i] = rng_get();
|
||||
}
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(os_urandom_obj, os_urandom);
|
||||
|
||||
|
|
|
@ -581,7 +581,7 @@ STATIC mp_obj_t socket_recv(mp_obj_t self_in, mp_obj_t len_in) {
|
|||
}
|
||||
vstr.len = ret;
|
||||
vstr.buf[vstr.len] = '\0';
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_recv_obj, socket_recv);
|
||||
|
||||
|
@ -625,7 +625,7 @@ STATIC mp_obj_t socket_recvfrom(mp_obj_t self_in, mp_obj_t len_in) {
|
|||
} else {
|
||||
vstr.len = ret;
|
||||
vstr.buf[vstr.len] = '\0';
|
||||
tuple[0] = mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
tuple[0] = mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
tuple[1] = netutils_format_inet_addr(ip, port, NETUTILS_LITTLE);
|
||||
return mp_obj_new_tuple(2, tuple);
|
||||
|
|
|
@ -392,7 +392,7 @@ STATIC mp_obj_t pyb_i2c_readfrom(size_t n_args, const mp_obj_t *pos_args, mp_map
|
|||
pyb_i2c_read_into(args, &vstr);
|
||||
|
||||
// return the received data
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_i2c_readfrom_obj, 3, pyb_i2c_readfrom);
|
||||
|
||||
|
@ -456,7 +456,7 @@ STATIC mp_obj_t pyb_i2c_readfrom_mem(size_t n_args, const mp_obj_t *pos_args, mp
|
|||
|
||||
vstr_t vstr;
|
||||
pyb_i2c_readmem_into (args, &vstr);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_i2c_readfrom_mem_obj, 1, pyb_i2c_readfrom_mem);
|
||||
|
||||
|
|
|
@ -305,7 +305,7 @@ STATIC mp_obj_t pyb_spi_read(size_t n_args, const mp_obj_t *pos_args, mp_map_t *
|
|||
pybspi_transfer(self, NULL, vstr.buf, vstr.len, &write);
|
||||
|
||||
// return the received data
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_spi_read_obj, 1, pyb_spi_read);
|
||||
|
||||
|
|
|
@ -552,7 +552,7 @@ mp_obj_t _socket_recvfrom(mp_obj_t self_in, mp_obj_t len_in,
|
|||
}
|
||||
|
||||
vstr.len = ret;
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
|
||||
STATIC mp_obj_t socket_recv(mp_obj_t self_in, mp_obj_t len_in) {
|
||||
|
|
|
@ -45,7 +45,7 @@ STATIC mp_obj_t mp_uos_urandom(mp_obj_t num) {
|
|||
vstr.buf[i] = r;
|
||||
r >>= 8;
|
||||
}
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_uos_urandom_obj, mp_uos_urandom);
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ STATIC mp_obj_t mp_uos_urandom(mp_obj_t num) {
|
|||
for (int i = 0; i < n; i++) {
|
||||
vstr.buf[i] = *WDEV_HWRNG;
|
||||
}
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_uos_urandom_obj, mp_uos_urandom);
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ STATIC mp_obj_t mp_uos_urandom(mp_obj_t num) {
|
|||
trng_start();
|
||||
TRNG_GetRandomData(TRNG, vstr.buf, n);
|
||||
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_uos_urandom_obj, mp_uos_urandom);
|
||||
#endif
|
||||
|
|
|
@ -388,7 +388,7 @@ STATIC mp_obj_t mp_machine_spi_read(size_t n_args, const mp_obj_t *args) {
|
|||
vstr_init_len(&vstr, mp_obj_get_int(args[1]));
|
||||
memset(vstr.buf, n_args == 3 ? mp_obj_get_int(args[2]) : 0, vstr.len);
|
||||
spi_transfer(args[0], vstr.len, vstr.buf, vstr.buf);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_machine_spi_read_obj, 2, 3, mp_machine_spi_read);
|
||||
|
||||
|
|
|
@ -108,7 +108,7 @@ STATIC mp_obj_t os_urandom(mp_obj_t num) {
|
|||
for (int i = 0; i < n; i++) {
|
||||
vstr.buf[i] = (uint8_t)(rng_generate_random_word() & 0xFF);
|
||||
}
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(os_urandom_obj, os_urandom);
|
||||
#endif
|
||||
|
|
|
@ -35,6 +35,6 @@ STATIC mp_obj_t mp_uos_urandom(mp_obj_t num) {
|
|||
for (int i = 0; i < n; i++) {
|
||||
vstr.buf[i] = rosc_random_u8(8);
|
||||
}
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_uos_urandom_obj, mp_uos_urandom);
|
||||
|
|
|
@ -58,7 +58,7 @@ STATIC mp_obj_t mp_uos_urandom(mp_obj_t num) {
|
|||
for (int i = 0; i < n; i++) {
|
||||
vstr.buf[i] = rng_get();
|
||||
}
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_uos_urandom_obj, mp_uos_urandom);
|
||||
#endif
|
||||
|
|
|
@ -926,7 +926,7 @@ STATIC mp_obj_t pyb_i2c_recv(size_t n_args, const mp_obj_t *pos_args, mp_map_t *
|
|||
if (o_ret != MP_OBJ_NULL) {
|
||||
return o_ret;
|
||||
} else {
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_i2c_recv_obj, 1, pyb_i2c_recv);
|
||||
|
@ -1002,7 +1002,7 @@ STATIC mp_obj_t pyb_i2c_mem_read(size_t n_args, const mp_obj_t *pos_args, mp_map
|
|||
if (o_ret != MP_OBJ_NULL) {
|
||||
return o_ret;
|
||||
} else {
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_i2c_mem_read_obj, 1, pyb_i2c_mem_read);
|
||||
|
|
|
@ -229,7 +229,7 @@ STATIC mp_obj_t pyb_spi_recv(size_t n_args, const mp_obj_t *pos_args, mp_map_t *
|
|||
if (o_ret != MP_OBJ_NULL) {
|
||||
return o_ret;
|
||||
} else {
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_spi_recv_obj, 1, pyb_spi_recv);
|
||||
|
@ -298,7 +298,7 @@ STATIC mp_obj_t pyb_spi_send_recv(size_t n_args, const mp_obj_t *pos_args, mp_ma
|
|||
if (o_ret != MP_OBJ_NULL) {
|
||||
return o_ret;
|
||||
} else {
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr_recv);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr_recv);
|
||||
}
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_spi_send_recv_obj, 1, pyb_spi_send_recv);
|
||||
|
|
|
@ -813,7 +813,7 @@ STATIC mp_obj_t pyb_usb_vcp_recv(size_t n_args, const mp_obj_t *args, mp_map_t *
|
|||
return mp_obj_new_int(ret); // number of bytes read into given buffer
|
||||
} else {
|
||||
vstr.len = ret; // set actual number of bytes read
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); // create a new buffer
|
||||
return mp_obj_new_bytes_from_vstr(&vstr); // create a new buffer
|
||||
}
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_usb_vcp_recv_obj, 1, pyb_usb_vcp_recv);
|
||||
|
@ -1007,7 +1007,7 @@ STATIC mp_obj_t pyb_usb_hid_recv(size_t n_args, const mp_obj_t *args, mp_map_t *
|
|||
return mp_obj_new_int(ret); // number of bytes read into given buffer
|
||||
} else {
|
||||
vstr.len = ret; // set actual number of bytes read
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr); // create a new buffer
|
||||
return mp_obj_new_bytes_from_vstr(&vstr); // create a new buffer
|
||||
}
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_usb_hid_recv_obj, 1, pyb_usb_hid_recv);
|
||||
|
|
|
@ -554,7 +554,7 @@ MP_NOINLINE int main_(int argc, char **argv) {
|
|||
vstr_init(&vstr, home_l + (p1 - p - 1) + 1);
|
||||
vstr_add_strn(&vstr, home, home_l);
|
||||
vstr_add_strn(&vstr, p + 1, p1 - p - 1);
|
||||
path_items[i] = mp_obj_new_str_from_vstr(&mp_type_str, &vstr);
|
||||
path_items[i] = mp_obj_new_str_from_vstr(&vstr);
|
||||
} else {
|
||||
path_items[i] = mp_obj_new_str_via_qstr(p, p1 - p);
|
||||
}
|
||||
|
@ -650,7 +650,7 @@ MP_NOINLINE int main_(int argc, char **argv) {
|
|||
vstr_init(&vstr, len + sizeof(".__main__"));
|
||||
vstr_add_strn(&vstr, argv[a + 1], len);
|
||||
vstr_add_strn(&vstr, ".__main__", sizeof(".__main__") - 1);
|
||||
import_args[0] = mp_obj_new_str_from_vstr(&mp_type_str, &vstr);
|
||||
import_args[0] = mp_obj_new_str_from_vstr(&vstr);
|
||||
goto reimport;
|
||||
}
|
||||
|
||||
|
|
|
@ -94,7 +94,7 @@ STATIC mp_obj_t mp_uos_urandom(mp_obj_t num) {
|
|||
vstr_t vstr;
|
||||
vstr_init_len(&vstr, n);
|
||||
mp_hal_get_random(n, vstr.buf);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_uos_urandom_obj, mp_uos_urandom);
|
||||
|
||||
|
|
|
@ -559,7 +559,7 @@ STATIC mp_obj_t mod_socket_inet_ntop(mp_obj_t family_in, mp_obj_t binaddr_in) {
|
|||
mp_raise_OSError(errno);
|
||||
}
|
||||
vstr.len = strlen(vstr.buf);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_str, &vstr);
|
||||
return mp_obj_new_str_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_socket_inet_ntop_obj, mod_socket_inet_ntop);
|
||||
|
||||
|
|
|
@ -289,7 +289,7 @@ STATIC mp_obj_t socket_recv(mp_obj_t self_in, mp_obj_t len_in) {
|
|||
}
|
||||
|
||||
vstr.len = len;
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_recv_obj, socket_recv);
|
||||
|
||||
|
|
|
@ -250,7 +250,7 @@ STATIC mp_obj_t mp_builtin_input(size_t n_args, const mp_obj_t *args) {
|
|||
if (line.len == 0 && ret == CHAR_CTRL_D) {
|
||||
mp_raise_type(&mp_type_EOFError);
|
||||
}
|
||||
return mp_obj_new_str_from_vstr(&mp_type_str, &line);
|
||||
return mp_obj_new_str_from_vstr(&line);
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_input_obj, 0, 1, mp_builtin_input);
|
||||
|
||||
|
@ -467,7 +467,7 @@ STATIC mp_obj_t mp_builtin_repr(mp_obj_t o_in) {
|
|||
mp_print_t print;
|
||||
vstr_init_print(&vstr, 16, &print);
|
||||
mp_obj_print_helper(&print, o_in, PRINT_REPR);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_str, &vstr);
|
||||
return mp_obj_new_str_from_vstr(&vstr);
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_repr_obj, mp_builtin_repr);
|
||||
|
||||
|
|
|
@ -220,7 +220,7 @@ STATIC mp_obj_t struct_pack(size_t n_args, const mp_obj_t *args) {
|
|||
byte *p = (byte *)vstr.buf;
|
||||
memset(p, 0, size);
|
||||
struct_pack_into_internal(args[0], p, n_args - 1, &args[1]);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(struct_pack_obj, 1, MP_OBJ_FUN_ARGS_MAX, struct_pack);
|
||||
|
||||
|
|
3
py/obj.h
3
py/obj.h
|
@ -791,7 +791,8 @@ mp_obj_t mp_obj_new_int_from_ll(long long val); // this must return a multi-prec
|
|||
mp_obj_t mp_obj_new_int_from_ull(unsigned long long val); // this must return a multi-precision integer object (or raise an overflow exception)
|
||||
mp_obj_t mp_obj_new_str(const char *data, size_t len);
|
||||
mp_obj_t mp_obj_new_str_via_qstr(const char *data, size_t len);
|
||||
mp_obj_t mp_obj_new_str_from_vstr(const mp_obj_type_t *type, vstr_t *vstr);
|
||||
mp_obj_t mp_obj_new_str_from_vstr(vstr_t *vstr);
|
||||
mp_obj_t mp_obj_new_bytes_from_vstr(vstr_t *vstr);
|
||||
mp_obj_t mp_obj_new_bytes(const byte *data, size_t len);
|
||||
mp_obj_t mp_obj_new_bytearray(size_t n, const void *items);
|
||||
mp_obj_t mp_obj_new_bytearray_by_ref(size_t n, void *items);
|
||||
|
|
|
@ -446,7 +446,7 @@ STATIC mp_obj_t int_to_bytes(size_t n_args, const mp_obj_t *args) {
|
|||
mp_binary_set_int(l, big_endian, data + (big_endian ? (len - l) : 0), val);
|
||||
}
|
||||
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(int_to_bytes_obj, 3, 4, int_to_bytes);
|
||||
|
||||
|
|
40
py/objstr.c
40
py/objstr.c
|
@ -41,6 +41,8 @@ STATIC mp_obj_t str_modulo_format(mp_obj_t pattern, size_t n_args, const mp_obj_
|
|||
STATIC mp_obj_t mp_obj_new_bytes_iterator(mp_obj_t str, mp_obj_iter_buf_t *iter_buf);
|
||||
STATIC NORETURN void bad_implicit_conversion(mp_obj_t self_in);
|
||||
|
||||
STATIC mp_obj_t mp_obj_new_str_type_from_vstr(const mp_obj_type_t *type, vstr_t *vstr);
|
||||
|
||||
STATIC void str_check_arg_type(const mp_obj_type_t *self_type, const mp_obj_t arg) {
|
||||
// String operations generally need the args type to match the object they're called on,
|
||||
// e.g. str.find(str), byte.startswith(byte)
|
||||
|
@ -170,7 +172,7 @@ mp_obj_t mp_obj_str_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_
|
|||
mp_print_t print;
|
||||
vstr_init_print(&vstr, 16, &print);
|
||||
mp_obj_print_helper(&print, args[0], PRINT_STR);
|
||||
return mp_obj_new_str_from_vstr(type, &vstr);
|
||||
return mp_obj_new_str_type_from_vstr(type, &vstr);
|
||||
}
|
||||
|
||||
default: // 2 or 3 args
|
||||
|
@ -256,7 +258,7 @@ STATIC mp_obj_t bytes_make_new(const mp_obj_type_t *type_in, size_t n_args, size
|
|||
vstr_t vstr;
|
||||
vstr_init_len(&vstr, len);
|
||||
memset(vstr.buf, 0, len);
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
|
||||
// check if argument has the buffer protocol
|
||||
|
@ -288,7 +290,7 @@ STATIC mp_obj_t bytes_make_new(const mp_obj_type_t *type_in, size_t n_args, size
|
|||
vstr_add_byte(&vstr, val);
|
||||
}
|
||||
|
||||
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
|
||||
wrong_args:
|
||||
mp_raise_TypeError(MP_ERROR_TEXT("wrong number of arguments"));
|
||||
|
@ -363,7 +365,7 @@ mp_obj_t mp_obj_str_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_i
|
|||
vstr_t vstr;
|
||||
vstr_init_len(&vstr, lhs_len * n);
|
||||
mp_seq_multiply(lhs_data, sizeof(*lhs_data), lhs_len, n, vstr.buf);
|
||||
return mp_obj_new_str_from_vstr(lhs_type, &vstr);
|
||||
return mp_obj_new_str_type_from_vstr(lhs_type, &vstr);
|
||||
}
|
||||
|
||||
// From now on all operations allow:
|
||||
|
@ -414,7 +416,7 @@ mp_obj_t mp_obj_str_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_i
|
|||
vstr_init_len(&vstr, lhs_len + rhs_len);
|
||||
memcpy(vstr.buf, lhs_data, lhs_len);
|
||||
memcpy(vstr.buf + lhs_len, rhs_data, rhs_len);
|
||||
return mp_obj_new_str_from_vstr(lhs_type, &vstr);
|
||||
return mp_obj_new_str_type_from_vstr(lhs_type, &vstr);
|
||||
}
|
||||
|
||||
case MP_BINARY_OP_CONTAINS:
|
||||
|
@ -528,7 +530,7 @@ STATIC mp_obj_t str_join(mp_obj_t self_in, mp_obj_t arg) {
|
|||
}
|
||||
|
||||
// return joined string
|
||||
return mp_obj_new_str_from_vstr(ret_type, &vstr);
|
||||
return mp_obj_new_str_type_from_vstr(ret_type, &vstr);
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_2(str_join_obj, str_join);
|
||||
|
||||
|
@ -918,7 +920,7 @@ STATIC mp_obj_t str_center(mp_obj_t str_in, mp_obj_t width_in) {
|
|||
memset(vstr.buf, ' ', width);
|
||||
int left = (width - str_len) / 2;
|
||||
memcpy(vstr.buf + left, str, str_len);
|
||||
return mp_obj_new_str_from_vstr(mp_obj_get_type(str_in), &vstr);
|
||||
return mp_obj_new_str_type_from_vstr(mp_obj_get_type(str_in), &vstr);
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_2(str_center_obj, str_center);
|
||||
#endif
|
||||
|
@ -1144,7 +1146,7 @@ STATIC vstr_t mp_obj_str_format_helper(const char *str, const char *top, int *ar
|
|||
mp_print_t arg_print;
|
||||
vstr_init_print(&arg_vstr, 16, &arg_print);
|
||||
mp_obj_print_helper(&arg_print, arg, print_kind);
|
||||
arg = mp_obj_new_str_from_vstr(&mp_type_str, &arg_vstr);
|
||||
arg = mp_obj_new_str_type_from_vstr(&mp_type_str, &arg_vstr);
|
||||
}
|
||||
|
||||
char fill = '\0';
|
||||
|
@ -1429,7 +1431,7 @@ mp_obj_t mp_obj_str_format(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs
|
|||
GET_STR_DATA_LEN(args[0], str, len);
|
||||
int arg_i = 0;
|
||||
vstr_t vstr = mp_obj_str_format_helper((const char *)str, (const char *)str + len, &arg_i, n_args, args, kwargs);
|
||||
return mp_obj_new_str_from_vstr(mp_obj_get_type(args[0]), &vstr);
|
||||
return mp_obj_new_str_type_from_vstr(mp_obj_get_type(args[0]), &vstr);
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_KW(str_format_obj, 1, mp_obj_str_format);
|
||||
|
||||
|
@ -1634,7 +1636,7 @@ STATIC mp_obj_t str_modulo_format(mp_obj_t pattern, size_t n_args, const mp_obj_
|
|||
mp_raise_TypeError(MP_ERROR_TEXT("format string didn't convert all arguments"));
|
||||
}
|
||||
|
||||
return mp_obj_new_str_from_vstr(is_bytes ? &mp_type_bytes : &mp_type_str, &vstr);
|
||||
return mp_obj_new_str_type_from_vstr(is_bytes ? &mp_type_bytes : &mp_type_str, &vstr);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1737,7 +1739,7 @@ STATIC mp_obj_t str_replace(size_t n_args, const mp_obj_t *args) {
|
|||
}
|
||||
}
|
||||
|
||||
return mp_obj_new_str_from_vstr(self_type, &vstr);
|
||||
return mp_obj_new_str_type_from_vstr(self_type, &vstr);
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(str_replace_obj, 3, 4, str_replace);
|
||||
|
||||
|
@ -1849,7 +1851,7 @@ STATIC mp_obj_t str_caseconv(unichar (*op)(unichar), mp_obj_t self_in) {
|
|||
for (size_t i = 0; i < self_len; i++) {
|
||||
*data++ = op(*self_data++);
|
||||
}
|
||||
return mp_obj_new_str_from_vstr(mp_obj_get_type(self_in), &vstr);
|
||||
return mp_obj_new_str_type_from_vstr(mp_obj_get_type(self_in), &vstr);
|
||||
}
|
||||
|
||||
STATIC mp_obj_t str_lower(mp_obj_t self_in) {
|
||||
|
@ -1988,7 +1990,7 @@ mp_obj_t mp_obj_bytes_hex(size_t n_args, const mp_obj_t *args, const mp_obj_type
|
|||
*out++ = *sep;
|
||||
}
|
||||
}
|
||||
return mp_obj_new_str_from_vstr(type, &vstr);
|
||||
return mp_obj_new_str_type_from_vstr(type, &vstr);
|
||||
}
|
||||
|
||||
mp_obj_t mp_obj_bytes_fromhex(mp_obj_t type_in, mp_obj_t data) {
|
||||
|
@ -2016,7 +2018,7 @@ mp_obj_t mp_obj_bytes_fromhex(mp_obj_t type_in, mp_obj_t data) {
|
|||
hex_byte = 0;
|
||||
}
|
||||
}
|
||||
return mp_obj_new_str_from_vstr(MP_OBJ_TO_PTR(type_in), &vstr);
|
||||
return mp_obj_new_str_type_from_vstr(MP_OBJ_TO_PTR(type_in), &vstr);
|
||||
}
|
||||
|
||||
STATIC mp_obj_t bytes_hex_as_str(size_t n_args, const mp_obj_t *args) {
|
||||
|
@ -2213,7 +2215,7 @@ mp_obj_t mp_obj_new_str_via_qstr(const char *data, size_t len) {
|
|||
// Create a str/bytes object from the given vstr. The vstr buffer is resized to
|
||||
// the exact length required and then reused for the str/bytes object. The vstr
|
||||
// is cleared and can safely be passed to vstr_free if it was heap allocated.
|
||||
mp_obj_t mp_obj_new_str_from_vstr(const mp_obj_type_t *type, vstr_t *vstr) {
|
||||
STATIC mp_obj_t mp_obj_new_str_type_from_vstr(const mp_obj_type_t *type, vstr_t *vstr) {
|
||||
// if not a bytes object, look if a qstr with this data already exists
|
||||
if (type == &mp_type_str) {
|
||||
qstr q = qstr_find_strn(vstr->buf, vstr->len);
|
||||
|
@ -2245,6 +2247,14 @@ mp_obj_t mp_obj_new_str_from_vstr(const mp_obj_type_t *type, vstr_t *vstr) {
|
|||
return MP_OBJ_FROM_PTR(o);
|
||||
}
|
||||
|
||||
mp_obj_t mp_obj_new_str_from_vstr(vstr_t *vstr) {
|
||||
return mp_obj_new_str_type_from_vstr(&mp_type_str, vstr);
|
||||
}
|
||||
|
||||
mp_obj_t mp_obj_new_bytes_from_vstr(vstr_t *vstr) {
|
||||
return mp_obj_new_str_type_from_vstr(&mp_type_bytes, vstr);
|
||||
}
|
||||
|
||||
mp_obj_t mp_obj_new_str(const char *data, size_t len) {
|
||||
qstr q = qstr_find_strn(data, len);
|
||||
if (q != MP_QSTRnull) {
|
||||
|
|
|
@ -160,7 +160,7 @@ value_error:
|
|||
mp_printf(&print, "invalid syntax for integer with base %d: ", base);
|
||||
mp_str_print_quoted(&print, str_val_start, top - str_val_start, true);
|
||||
mp_obj_t exc = mp_obj_new_exception_arg1(&mp_type_ValueError,
|
||||
mp_obj_new_str_from_vstr(&mp_type_str, &vstr));
|
||||
mp_obj_new_str_from_vstr(&vstr));
|
||||
raise_exc(exc, lex);
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -202,7 +202,11 @@ STATIC mp_obj_t load_obj(mp_reader_t *reader) {
|
|||
read_bytes(reader, (byte *)vstr.buf, len);
|
||||
if (obj_type == MP_PERSISTENT_OBJ_STR || obj_type == MP_PERSISTENT_OBJ_BYTES) {
|
||||
read_byte(reader); // skip null terminator
|
||||
return mp_obj_new_str_from_vstr(obj_type == MP_PERSISTENT_OBJ_STR ? &mp_type_str : &mp_type_bytes, &vstr);
|
||||
if (obj_type == MP_PERSISTENT_OBJ_STR) {
|
||||
return mp_obj_new_str_from_vstr(&vstr);
|
||||
} else {
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
} else if (obj_type == MP_PERSISTENT_OBJ_INT) {
|
||||
return mp_parse_num_integer(vstr.buf, vstr.len, 10, NULL);
|
||||
} else {
|
||||
|
|
22
py/stream.c
22
py/stream.c
|
@ -40,8 +40,6 @@
|
|||
|
||||
STATIC mp_obj_t stream_readall(mp_obj_t self_in);
|
||||
|
||||
#define STREAM_CONTENT_TYPE(stream) (((stream)->is_text) ? &mp_type_str : &mp_type_bytes)
|
||||
|
||||
// Returns error condition in *errcode, if non-zero, return value is number of bytes written
|
||||
// before error condition occurred. If *errcode == 0, returns total bytes written (which will
|
||||
// be equal to input size).
|
||||
|
@ -190,7 +188,7 @@ STATIC mp_obj_t stream_read_generic(size_t n_args, const mp_obj_t *args, byte fl
|
|||
}
|
||||
}
|
||||
|
||||
return mp_obj_new_str_from_vstr(&mp_type_str, &vstr);
|
||||
return mp_obj_new_str_from_vstr(&vstr);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -211,7 +209,11 @@ STATIC mp_obj_t stream_read_generic(size_t n_args, const mp_obj_t *args, byte fl
|
|||
mp_raise_OSError(error);
|
||||
} else {
|
||||
vstr.len = out_sz;
|
||||
return mp_obj_new_str_from_vstr(STREAM_CONTENT_TYPE(stream_p), &vstr);
|
||||
if (stream_p->is_text) {
|
||||
return mp_obj_new_str_from_vstr(&vstr);
|
||||
} else {
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -337,7 +339,11 @@ STATIC mp_obj_t stream_readall(mp_obj_t self_in) {
|
|||
}
|
||||
|
||||
vstr.len = total_size;
|
||||
return mp_obj_new_str_from_vstr(STREAM_CONTENT_TYPE(stream_p), &vstr);
|
||||
if (stream_p->is_text) {
|
||||
return mp_obj_new_str_from_vstr(&vstr);
|
||||
} else {
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
}
|
||||
|
||||
// Unbuffered, inefficient implementation of readline() for raw I/O files.
|
||||
|
@ -390,7 +396,11 @@ STATIC mp_obj_t stream_unbuffered_readline(size_t n_args, const mp_obj_t *args)
|
|||
}
|
||||
}
|
||||
|
||||
return mp_obj_new_str_from_vstr(STREAM_CONTENT_TYPE(stream_p), &vstr);
|
||||
if (stream_p->is_text) {
|
||||
return mp_obj_new_str_from_vstr(&vstr);
|
||||
} else {
|
||||
return mp_obj_new_bytes_from_vstr(&vstr);
|
||||
}
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_stream_unbuffered_readline_obj, 1, 2, stream_unbuffered_readline);
|
||||
|
||||
|
|
Loading…
Reference in New Issue