@@ -117,12 +117,9 @@ static mp_obj_t pb_type_Color_make_new_helper(mp_int_t h, mp_int_t s, mp_int_t v
117117 return MP_OBJ_FROM_PTR (self );
118118}
119119
120- // Create and reset dict to hold default colors and those added by user
121- STATIC mp_obj_dict_t * colors ;
122-
123120void pb_type_Color_reset (void ) {
124121 // Set default contents of Color class
125- colors = mp_obj_new_dict (0 );
122+ mp_obj_dict_t * colors = mp_obj_new_dict (13 );
126123 mp_obj_dict_store (MP_OBJ_FROM_PTR (colors ), MP_ROM_QSTR (MP_QSTR_RED ), MP_OBJ_FROM_PTR (& pb_Color_RED_obj ));
127124 mp_obj_dict_store (MP_OBJ_FROM_PTR (colors ), MP_ROM_QSTR (MP_QSTR_BROWN ), MP_OBJ_FROM_PTR (& pb_Color_BROWN_obj ));
128125 mp_obj_dict_store (MP_OBJ_FROM_PTR (colors ), MP_ROM_QSTR (MP_QSTR_ORANGE ), MP_OBJ_FROM_PTR (& pb_Color_ORANGE_obj ));
@@ -136,19 +133,20 @@ void pb_type_Color_reset(void) {
136133 mp_obj_dict_store (MP_OBJ_FROM_PTR (colors ), MP_ROM_QSTR (MP_QSTR_GRAY ), MP_OBJ_FROM_PTR (& pb_Color_GRAY_obj ));
137134 mp_obj_dict_store (MP_OBJ_FROM_PTR (colors ), MP_ROM_QSTR (MP_QSTR_WHITE ), MP_OBJ_FROM_PTR (& pb_Color_WHITE_obj ));
138135 mp_obj_dict_store (MP_OBJ_FROM_PTR (colors ), MP_ROM_QSTR (MP_QSTR_NONE ), MP_OBJ_FROM_PTR (& pb_Color_NONE_obj ));
136+ MP_STATE_VM (pb_type_Color_dict ) = colors ;
139137}
140138
141139void pb_type_Color_print (const mp_print_t * print , mp_obj_t self_in , mp_print_kind_t kind ) {
142140
143141 // If we're the class itself, use dict printer
144142 if (MP_OBJ_TO_PTR (self_in ) == & pb_type_Color_obj ) {
145- mp_type_dict .print (print , colors , kind );
143+ mp_type_dict .print (print , MP_STATE_VM ( pb_type_Color_dict ) , kind );
146144 return ;
147145 }
148146
149147 // Otherwise, print name of color, if available
150- mp_map_elem_t * color_elems = colors -> map .table ;
151- for (size_t i = 0 ; i < colors -> map .alloc ; i ++ ) {
148+ mp_map_elem_t * color_elems = MP_STATE_VM ( pb_type_Color_dict ) -> map .table ;
149+ for (size_t i = 0 ; i < MP_STATE_VM ( pb_type_Color_dict ) -> map .alloc ; i ++ ) {
152150 mp_map_elem_t * element = & color_elems [i ];
153151 if (self_in == element -> value && MP_OBJ_IS_QSTR (element -> key )) {
154152 mp_printf (print , "Color.%q" , MP_OBJ_QSTR_VALUE (element -> key ));
@@ -174,7 +172,7 @@ STATIC mp_obj_t pb_type_Color_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t
174172 }
175173
176174 // Treat it like a dictionary
177- return mp_type_dict .subscr (colors , index , value );
175+ return mp_type_dict .subscr (MP_STATE_VM ( pb_type_Color_dict ) , index , value );
178176}
179177
180178STATIC mp_obj_t pb_type_Color_getiter (mp_obj_t self_in , mp_obj_iter_buf_t * iter_buf ) {
@@ -185,7 +183,7 @@ STATIC mp_obj_t pb_type_Color_getiter(mp_obj_t self_in, mp_obj_iter_buf_t *iter_
185183 }
186184
187185 // Treat it like a dictionary
188- return mp_type_dict .getiter (colors , iter_buf );
186+ return mp_type_dict .getiter (MP_STATE_VM ( pb_type_Color_dict ) , iter_buf );
189187}
190188
191189STATIC void pb_type_Color_attr (mp_obj_t self_in , qstr attr , mp_obj_t * dest ) {
0 commit comments