py/objarray: bytearray: Allow 2nd/3rd arg to constructor.

If bytearray is constructed from str, a second argument of encoding is
required (in CPython), and third arg of Unicode error handling is allowed,
e.g.:

bytearray("str", "utf-8", "strict")

This is similar to bytes:

bytes("str", "utf-8", "strict")

This patch just allows to pass 2nd/3rd arguments to bytearray, but
doesn't try to validate them to not impact code size. (This is also
similar to how bytes constructor is handled, though it does a bit
more validation, e.g. check that in case of str arg, encoding argument
is passed.)
This commit is contained in:
Paul Sokolovsky 2018-09-03 21:52:35 +03:00 committed by Damien George
parent b6ebb4f04e
commit 674e069ba9
2 changed files with 4 additions and 2 deletions

View File

@ -175,7 +175,8 @@ STATIC mp_obj_t array_make_new(const mp_obj_type_t *type_in, size_t n_args, size
#if MICROPY_PY_BUILTINS_BYTEARRAY #if MICROPY_PY_BUILTINS_BYTEARRAY
STATIC mp_obj_t bytearray_make_new(const mp_obj_type_t *type_in, size_t n_args, size_t n_kw, const mp_obj_t *args) { STATIC mp_obj_t bytearray_make_new(const mp_obj_type_t *type_in, size_t n_args, size_t n_kw, const mp_obj_t *args) {
(void)type_in; (void)type_in;
mp_arg_check_num(n_args, n_kw, 0, 1, false); // Can take 2nd/3rd arg if constructs from str
mp_arg_check_num(n_args, n_kw, 0, 3, false);
if (n_args == 0) { if (n_args == 0) {
// no args: construct an empty bytearray // no args: construct an empty bytearray

View File

@ -1,6 +1,7 @@
# test construction of bytearray from different objects # test construction of bytearray from different objects
# bytes, tuple, list
print(bytearray(b'123')) print(bytearray(b'123'))
print(bytearray('1234', 'utf-8'))
print(bytearray('12345', 'utf-8', 'strict'))
print(bytearray((1, 2))) print(bytearray((1, 2)))
print(bytearray([1, 2])) print(bytearray([1, 2]))