diff --git a/py/objnamedtuple.h b/py/objnamedtuple.h index 865db526e1..d2f304bbfc 100644 --- a/py/objnamedtuple.h +++ b/py/objnamedtuple.h @@ -52,6 +52,35 @@ void namedtuple_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest); mp_obj_namedtuple_type_t *mp_obj_new_namedtuple_base(size_t n_fields, mp_obj_t *fields); mp_obj_t namedtuple_make_new(const mp_obj_type_t *type_in, size_t n_args, size_t n_kw, const mp_obj_t *args); +// CIRCUITPY yikes +#define NAMEDTUPLE_TYPE_BASE_AND_SLOTS_MAKE_NEW(type_name, make_new_fun) \ + .base = { \ + .base = { .type = &mp_type_type }, \ + .flags = MP_TYPE_FLAG_EQ_CHECKS_OTHER_TYPE, \ + .name = type_name, \ + .slot_index_make_new = 1, \ + .slot_index_print = 2, \ + .slot_index_unary_op = 3, \ + .slot_index_binary_op = 4, \ + .slot_index_attr = 5, \ + .slot_index_subscr = 6, \ + .slot_index_iter = 7, \ + .slot_index_parent = 8, \ + }, \ + .slots = { \ + make_new_fun, \ + namedtuple_print, \ + mp_obj_tuple_unary_op, \ + mp_obj_tuple_binary_op, \ + namedtuple_attr, \ + mp_obj_tuple_subscr, \ + mp_obj_tuple_getiter, \ + (void *)&mp_type_tuple, \ + } + +#define NAMEDTUPLE_TYPE_BASE_AND_SLOTS(type_name) \ + NAMEDTUPLE_TYPE_BASE_AND_SLOTS_MAKE_NEW(type_name, namedtuple_make_new) + #endif // MICROPY_PY_COLLECTIONS #endif // MICROPY_INCLUDED_PY_OBJNAMEDTUPLE_H diff --git a/shared-bindings/qrio/QRInfo.c b/shared-bindings/qrio/QRInfo.c index d53e638f81..dafbc19b99 100644 --- a/shared-bindings/qrio/QRInfo.c +++ b/shared-bindings/qrio/QRInfo.c @@ -40,23 +40,7 @@ //| const mp_obj_namedtuple_type_t qrio_qrinfo_type_obj = { - .base = { - .base = { - .type = &mp_type_type - }, - .flags = MP_TYPE_FLAG_EXTENDED, - .name = MP_QSTR_QRInfo, - .print = namedtuple_print, - .parent = &mp_type_tuple, - .make_new = namedtuple_make_new, - .attr = namedtuple_attr, - MP_TYPE_EXTENDED_FIELDS( - .unary_op = mp_obj_tuple_unary_op, - .binary_op = mp_obj_tuple_binary_op, - .subscr = mp_obj_tuple_subscr, - .getiter = mp_obj_tuple_getiter, - ), - }, + NAMEDTUPLE_TYPE_BASE_AND_SLOTS(MP_QSTR_QRInfo), .n_fields = 2, .fields = { MP_QSTR_payload, diff --git a/shared-bindings/synthio/Biquad.c b/shared-bindings/synthio/Biquad.c index 6fd2856e02..b8dc735154 100644 --- a/shared-bindings/synthio/Biquad.c +++ b/shared-bindings/synthio/Biquad.c @@ -82,23 +82,7 @@ STATIC mp_obj_t synthio_biquad_make_new(const mp_obj_type_t *type_in, size_t n_a } const mp_obj_namedtuple_type_t synthio_biquad_type_obj = { - .base = { - .base = { - .type = &mp_type_type - }, - .flags = MP_TYPE_FLAG_EXTENDED, - .name = MP_QSTR_Biquad, - .print = namedtuple_print, - .parent = &mp_type_tuple, - .make_new = synthio_biquad_make_new, - .attr = namedtuple_attr, - MP_TYPE_EXTENDED_FIELDS( - .unary_op = mp_obj_tuple_unary_op, - .binary_op = mp_obj_tuple_binary_op, - .subscr = mp_obj_tuple_subscr, - .getiter = mp_obj_tuple_getiter, - ), - }, + NAMEDTUPLE_TYPE_BASE_AND_SLOTS_MAKE_NEW(MP_QSTR_Biquad, synthio_biquad_make_new), .n_fields = 5, .fields = { MP_QSTR_a1, diff --git a/shared-bindings/synthio/__init__.c b/shared-bindings/synthio/__init__.c index 4907870a5c..df6eb9a647 100644 --- a/shared-bindings/synthio/__init__.c +++ b/shared-bindings/synthio/__init__.c @@ -171,23 +171,7 @@ STATIC mp_obj_t synthio_envelope_make_new(const mp_obj_type_t *type_in, size_t n }; const mp_obj_namedtuple_type_t synthio_envelope_type_obj = { - .base = { - .base = { - .type = &mp_type_type - }, - .flags = MP_TYPE_FLAG_EXTENDED, - .name = MP_QSTR_Envelope, - .print = namedtuple_print, - .parent = &mp_type_tuple, - .make_new = synthio_envelope_make_new, - .attr = namedtuple_attr, - MP_TYPE_EXTENDED_FIELDS( - .unary_op = mp_obj_tuple_unary_op, - .binary_op = mp_obj_tuple_binary_op, - .subscr = mp_obj_tuple_subscr, - .getiter = mp_obj_tuple_getiter, - ), - }, + NAMEDTUPLE_TYPE_BASE_AND_SLOTS_MAKE_NEW(MP_QSTR_Envelope, synthio_envelope_make_new), .n_fields = 5, .fields = { MP_QSTR_attack_time,