From 081284d4eda47de496fe53031b79b93101065e1f Mon Sep 17 00:00:00 2001 From: microDev <70126934+microDev1@users.noreply.github.com> Date: Sat, 26 Jun 2021 18:01:19 +0530 Subject: [PATCH] update struct_time --- shared-bindings/time/__init__.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/shared-bindings/time/__init__.c b/shared-bindings/time/__init__.c index 87a40f6fc19d1..7ad7926135c00 100644 --- a/shared-bindings/time/__init__.c +++ b/shared-bindings/time/__init__.c @@ -83,19 +83,26 @@ mp_obj_t struct_time_make_new(const mp_obj_type_t *type, size_t n_args, const mp if (n_args != 1 || (kw_args != NULL && kw_args->used > 0)) { return namedtuple_make_new(type, n_args, args, kw_args); } - if (mp_obj_get_type(args[0])->getiter != mp_obj_tuple_getiter || ((mp_obj_tuple_t *)MP_OBJ_TO_PTR(args[0]))->len != 9) { + size_t len = 0; + mp_obj_t *items = NULL; + if (mp_obj_is_type(args[0], &mp_type_list)) { + len = ((mp_obj_list_t *)args[0])->len; + items = ((mp_obj_list_t *)args[0])->items; + } else if (mp_obj_is_type(args[0], &mp_type_tuple)) { + len = ((mp_obj_tuple_t *)args[0])->len; + items = ((mp_obj_tuple_t *)args[0])->items; + } + if (len != 9) { mp_raise_TypeError(translate("time.struct_time() takes a 9-sequence")); } - - mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR(args[0]); - return namedtuple_make_new(type, 9, tuple->items, NULL); + return namedtuple_make_new(type, len, items, NULL); } //| class struct_time: -//| def __init__(self, time_tuple: Tuple[int, int, int, int, int, int, int, int, int]) -> None: -//| """Structure used to capture a date and time. Note that it takes a tuple! +//| def __init__(self, time: Tuple[int, int, int, int, int, int, int, int, int]) -> None: +//| """Structure used to capture a date and time. Note that it takes list or a tuple! //| -//| :param tuple time_tuple: Tuple of time info: ``(tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst)`` +//| :param time: ``(tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst)`` //| //| * ``tm_year``: the year, 2017 for example //| * ``tm_mon``: the month, range [1, 12]