3636typedef struct _mp_obj_namedtuple_type_t {
3737 mp_obj_type_t base ;
3838 mp_uint_t n_fields ;
39- mp_obj_t fields [];
39+ qstr fields [];
4040} mp_obj_namedtuple_type_t ;
4141
4242typedef struct _mp_obj_namedtuple_t {
@@ -45,7 +45,7 @@ typedef struct _mp_obj_namedtuple_t {
4545
4646STATIC mp_uint_t namedtuple_find_field (mp_obj_namedtuple_type_t * type , qstr name ) {
4747 for (mp_uint_t i = 0 ; i < type -> n_fields ; i ++ ) {
48- if (MP_OBJ_QSTR_VALUE ( type -> fields [i ]) == name ) {
48+ if (type -> fields [i ] == name ) {
4949 return i ;
5050 }
5151 }
@@ -56,12 +56,12 @@ STATIC void namedtuple_print(void (*print)(void *env, const char *fmt, ...), voi
5656 (void )kind ;
5757 mp_obj_namedtuple_t * o = o_in ;
5858 print (env , "%s(" , qstr_str (o -> tuple .base .type -> name ));
59- const mp_obj_t * fields = ((mp_obj_namedtuple_type_t * )o -> tuple .base .type )-> fields ;
59+ const qstr * fields = ((mp_obj_namedtuple_type_t * )o -> tuple .base .type )-> fields ;
6060 for (mp_uint_t i = 0 ; i < o -> tuple .len ; i ++ ) {
6161 if (i > 0 ) {
6262 print (env , ", " );
6363 }
64- print (env , "%s=" , qstr_str (MP_OBJ_QSTR_VALUE ( fields [i ]) ));
64+ print (env , "%s=" , qstr_str (fields [i ]));
6565 mp_obj_print_helper (print , env , o -> tuple .items [i ], PRINT_REPR );
6666 }
6767 print (env , ")" );
@@ -113,7 +113,7 @@ STATIC mp_obj_t namedtuple_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_
113113 }
114114
115115 for (mp_uint_t i = n_args ; i < n_args + 2 * n_kw ; i += 2 ) {
116- qstr kw = MP_OBJ_QSTR_VALUE (args [i ]);
116+ qstr kw = mp_obj_str_get_qstr (args [i ]);
117117 int id = namedtuple_find_field (type , kw );
118118 if (id == -1 ) {
119119 if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE ) {
@@ -145,7 +145,7 @@ STATIC mp_obj_t namedtuple_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_
145145STATIC const mp_obj_tuple_t namedtuple_base_tuple = {{& mp_type_tuple }, 1 , {(mp_obj_t )& mp_type_tuple }};
146146
147147STATIC mp_obj_t mp_obj_new_namedtuple_type (qstr name , mp_uint_t n_fields , mp_obj_t * fields ) {
148- mp_obj_namedtuple_type_t * o = m_new_obj_var (mp_obj_namedtuple_type_t , mp_obj_t , n_fields );
148+ mp_obj_namedtuple_type_t * o = m_new_obj_var (mp_obj_namedtuple_type_t , qstr , n_fields );
149149 memset (& o -> base , 0 , sizeof (o -> base ));
150150 o -> base .base .type = & mp_type_type ;
151151 o -> base .name = name ;
@@ -159,12 +159,14 @@ STATIC mp_obj_t mp_obj_new_namedtuple_type(qstr name, mp_uint_t n_fields, mp_obj
159159 o -> base .getiter = mp_obj_tuple_getiter ;
160160 o -> base .bases_tuple = (mp_obj_t )& namedtuple_base_tuple ;
161161 o -> n_fields = n_fields ;
162- memcpy (o -> fields , fields , sizeof (mp_obj_t ) * n_fields );
162+ for (mp_uint_t i = 0 ; i < n_fields ; i ++ ) {
163+ o -> fields [i ] = mp_obj_str_get_qstr (fields [i ]);
164+ }
163165 return o ;
164166}
165167
166168STATIC mp_obj_t new_namedtuple_type (mp_obj_t name_in , mp_obj_t fields_in ) {
167- qstr name = MP_OBJ_QSTR_VALUE (name_in );
169+ qstr name = mp_obj_str_get_qstr (name_in );
168170 mp_uint_t n_fields ;
169171 mp_obj_t * fields ;
170172 mp_obj_list_get (fields_in , & n_fields , & fields );
0 commit comments