Skip to content

Commit 8b0535e

Browse files
committed
py: Change module globals from mp_map_t* to mp_obj_dict_t*.
Towards addressing issue adafruit#424. Had a small increase to ROM usage (order 60 bytes).
1 parent 60be1cf commit 8b0535e

19 files changed

Lines changed: 129 additions & 98 deletions

py/builtin.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ STATIC mp_obj_t mp_builtin_dir(uint n_args, const mp_obj_t *args) {
157157
} else { // n_args == 1
158158
// make a list of names in the given object
159159
if (MP_OBJ_IS_TYPE(args[0], &mp_type_module)) {
160-
map = mp_obj_module_get_globals(args[0]);
160+
map = mp_obj_dict_get_map(mp_obj_module_get_globals(args[0]));
161161
} else {
162162
mp_obj_type_t *type;
163163
if (MP_OBJ_IS_TYPE(args[0], &mp_type_type)) {
@@ -174,7 +174,7 @@ STATIC mp_obj_t mp_builtin_dir(uint n_args, const mp_obj_t *args) {
174174
mp_obj_t dir = mp_obj_new_list(0, NULL);
175175
if (map != NULL) {
176176
for (uint i = 0; i < map->alloc; i++) {
177-
if (map->table[i].key != MP_OBJ_NULL) {
177+
if (MP_MAP_SLOT_IS_FILLED(map, i)) {
178178
mp_obj_list_append(dir, map->table[i].key);
179179
}
180180
}

py/builtinimport.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ void do_load(mp_obj_t module_obj, vstr_t *file) {
8787
mp_map_t *old_globals = mp_globals_get();
8888

8989
// set the new context
90-
mp_locals_set(mp_obj_module_get_globals(module_obj));
91-
mp_globals_set(mp_obj_module_get_globals(module_obj));
90+
mp_locals_set(mp_obj_dict_get_map(mp_obj_module_get_globals(module_obj)));
91+
mp_globals_set(mp_obj_dict_get_map(mp_obj_module_get_globals(module_obj)));
9292

9393
// parse the imported script
9494
mp_parse_error_kind_t parse_error_kind;

py/map.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include <stdlib.h>
2+
#include <assert.h>
23

34
#include "misc.h"
45
#include "mpconfig.h"
@@ -285,7 +286,7 @@ mp_obj_t mp_set_lookup(mp_set_t *set, mp_obj_t index, mp_map_lookup_kind_t looku
285286

286287
mp_obj_t mp_set_remove_first(mp_set_t *set) {
287288
for (uint pos = 0; pos < set->alloc; pos++) {
288-
if (set->table[pos] != MP_OBJ_NULL && set->table[pos] != MP_OBJ_SENTINEL) {
289+
if (MP_SET_SLOT_IS_FILLED(set, pos)) {
289290
mp_obj_t elem = set->table[pos];
290291
// delete element
291292
set->used--;

py/modarray.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,19 @@ STATIC const mp_map_elem_t mp_module_array_globals_table[] = {
99
{ MP_OBJ_NEW_QSTR(MP_QSTR_array), (mp_obj_t)&mp_type_array },
1010
};
1111

12-
STATIC const mp_map_t mp_module_array_globals = {
13-
.all_keys_are_qstrs = 1,
14-
.table_is_fixed_array = 1,
15-
.used = sizeof(mp_module_array_globals_table) / sizeof(mp_map_elem_t),
16-
.alloc = sizeof(mp_module_array_globals_table) / sizeof(mp_map_elem_t),
17-
.table = (mp_map_elem_t*)mp_module_array_globals_table,
12+
STATIC const mp_obj_dict_t mp_module_array_globals = {
13+
.base = {&mp_type_dict},
14+
.map = {
15+
.all_keys_are_qstrs = 1,
16+
.table_is_fixed_array = 1,
17+
.used = sizeof(mp_module_array_globals_table) / sizeof(mp_map_elem_t),
18+
.alloc = sizeof(mp_module_array_globals_table) / sizeof(mp_map_elem_t),
19+
.table = (mp_map_elem_t*)mp_module_array_globals_table,
20+
},
1821
};
1922

2023
const mp_obj_module_t mp_module_array = {
2124
.base = { &mp_type_module },
2225
.name = MP_QSTR_array,
23-
.globals = (mp_map_t*)&mp_module_array_globals,
26+
.globals = (mp_obj_dict_t*)&mp_module_array_globals,
2427
};

py/modcollections.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,19 @@ STATIC const mp_map_elem_t mp_module_collections_globals_table[] = {
99
{ MP_OBJ_NEW_QSTR(MP_QSTR_namedtuple), (mp_obj_t)&mp_namedtuple_obj },
1010
};
1111

12-
STATIC const mp_map_t mp_module_collections_globals = {
13-
.all_keys_are_qstrs = 1,
14-
.table_is_fixed_array = 1,
15-
.used = sizeof(mp_module_collections_globals_table) / sizeof(mp_map_elem_t),
16-
.alloc = sizeof(mp_module_collections_globals_table) / sizeof(mp_map_elem_t),
17-
.table = (mp_map_elem_t*)mp_module_collections_globals_table,
12+
STATIC const mp_obj_dict_t mp_module_collections_globals = {
13+
.base = {&mp_type_dict},
14+
.map = {
15+
.all_keys_are_qstrs = 1,
16+
.table_is_fixed_array = 1,
17+
.used = sizeof(mp_module_collections_globals_table) / sizeof(mp_map_elem_t),
18+
.alloc = sizeof(mp_module_collections_globals_table) / sizeof(mp_map_elem_t),
19+
.table = (mp_map_elem_t*)mp_module_collections_globals_table,
20+
},
1821
};
1922

2023
const mp_obj_module_t mp_module_collections = {
2124
.base = { &mp_type_module },
2225
.name = MP_QSTR_collections,
23-
.globals = (mp_map_t*)&mp_module_collections_globals,
26+
.globals = (mp_obj_dict_t*)&mp_module_collections_globals,
2427
};

py/modio.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,21 @@ STATIC const mp_map_elem_t mp_module_io_globals_table[] = {
1313
{ MP_OBJ_NEW_QSTR(MP_QSTR_open), (mp_obj_t)&mp_builtin_open_obj },
1414
};
1515

16-
STATIC const mp_map_t mp_module_io_globals = {
17-
.all_keys_are_qstrs = 1,
18-
.table_is_fixed_array = 1,
19-
.used = sizeof(mp_module_io_globals_table) / sizeof(mp_map_elem_t),
20-
.alloc = sizeof(mp_module_io_globals_table) / sizeof(mp_map_elem_t),
21-
.table = (mp_map_elem_t*)mp_module_io_globals_table,
16+
STATIC const mp_obj_dict_t mp_module_io_globals = {
17+
.base = {&mp_type_dict},
18+
.map = {
19+
.all_keys_are_qstrs = 1,
20+
.table_is_fixed_array = 1,
21+
.used = sizeof(mp_module_io_globals_table) / sizeof(mp_map_elem_t),
22+
.alloc = sizeof(mp_module_io_globals_table) / sizeof(mp_map_elem_t),
23+
.table = (mp_map_elem_t*)mp_module_io_globals_table,
24+
},
2225
};
2326

2427
const mp_obj_module_t mp_module_io = {
2528
.base = { &mp_type_module },
2629
.name = MP_QSTR_io,
27-
.globals = (mp_map_t*)&mp_module_io_globals,
30+
.globals = (mp_obj_dict_t*)&mp_module_io_globals,
2831
};
2932

3033
#endif

py/modmath.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,18 +139,21 @@ STATIC const mp_map_elem_t mp_module_math_globals_table[] = {
139139
{ MP_OBJ_NEW_QSTR(MP_QSTR_lgamma), (mp_obj_t)&mp_math_lgamma_obj },
140140
};
141141

142-
STATIC const mp_map_t mp_module_math_globals = {
143-
.all_keys_are_qstrs = 1,
144-
.table_is_fixed_array = 1,
145-
.used = sizeof(mp_module_math_globals_table) / sizeof(mp_map_elem_t),
146-
.alloc = sizeof(mp_module_math_globals_table) / sizeof(mp_map_elem_t),
147-
.table = (mp_map_elem_t*)mp_module_math_globals_table,
142+
STATIC const mp_obj_dict_t mp_module_math_globals = {
143+
.base = {&mp_type_dict},
144+
.map = {
145+
.all_keys_are_qstrs = 1,
146+
.table_is_fixed_array = 1,
147+
.used = sizeof(mp_module_math_globals_table) / sizeof(mp_map_elem_t),
148+
.alloc = sizeof(mp_module_math_globals_table) / sizeof(mp_map_elem_t),
149+
.table = (mp_map_elem_t*)mp_module_math_globals_table,
150+
},
148151
};
149152

150153
const mp_obj_module_t mp_module_math = {
151154
.base = { &mp_type_module },
152155
.name = MP_QSTR_math,
153-
.globals = (mp_map_t*)&mp_module_math_globals,
156+
.globals = (mp_obj_dict_t*)&mp_module_math_globals,
154157
};
155158

156159
#endif // MICROPY_ENABLE_FLOAT

py/modmicropython.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,19 @@ STATIC const mp_map_elem_t mp_module_micropython_globals_table[] = {
3434
#endif
3535
};
3636

37-
STATIC const mp_map_t mp_module_micropython_globals = {
38-
.all_keys_are_qstrs = 1,
39-
.table_is_fixed_array = 1,
40-
.used = sizeof(mp_module_micropython_globals_table) / sizeof(mp_map_elem_t),
41-
.alloc = sizeof(mp_module_micropython_globals_table) / sizeof(mp_map_elem_t),
42-
.table = (mp_map_elem_t*)mp_module_micropython_globals_table,
37+
STATIC const mp_obj_dict_t mp_module_micropython_globals = {
38+
.base = {&mp_type_dict},
39+
.map = {
40+
.all_keys_are_qstrs = 1,
41+
.table_is_fixed_array = 1,
42+
.used = sizeof(mp_module_micropython_globals_table) / sizeof(mp_map_elem_t),
43+
.alloc = sizeof(mp_module_micropython_globals_table) / sizeof(mp_map_elem_t),
44+
.table = (mp_map_elem_t*)mp_module_micropython_globals_table,
45+
},
4346
};
4447

4548
const mp_obj_module_t mp_module_micropython = {
4649
.base = { &mp_type_module },
4750
.name = MP_QSTR_micropython,
48-
.globals = (mp_map_t*)&mp_module_micropython_globals,
51+
.globals = (mp_obj_dict_t*)&mp_module_micropython_globals,
4952
};

py/obj.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ typedef enum _mp_map_lookup_kind_t {
115115
MP_MAP_LOOKUP_REMOVE_IF_FOUND, // 2
116116
} mp_map_lookup_kind_t;
117117

118+
#define MP_MAP_SLOT_IS_FILLED(map, pos) ((map)->table[pos].key != MP_OBJ_NULL && (map)->table[pos].key != MP_OBJ_SENTINEL)
119+
118120
void mp_map_init(mp_map_t *map, int n);
119121
void mp_map_init_fixed_table(mp_map_t *map, int n, const mp_obj_t *table);
120122
mp_map_t *mp_map_new(int n);
@@ -132,6 +134,8 @@ typedef struct _mp_set_t {
132134
mp_obj_t *table;
133135
} mp_set_t;
134136

137+
#define MP_SET_SLOT_IS_FILLED(set, pos) ((set)->table[pos] != MP_OBJ_NULL && (set)->table[pos] != MP_OBJ_SENTINEL)
138+
135139
void mp_set_init(mp_set_t *set, int n);
136140
mp_obj_t mp_set_lookup(mp_set_t *set, mp_obj_t index, mp_map_lookup_kind_t lookup_kind);
137141
mp_obj_t mp_set_remove_first(mp_set_t *set);
@@ -444,6 +448,7 @@ typedef struct _mp_obj_dict_t {
444448
mp_obj_base_t base;
445449
mp_map_t map;
446450
} mp_obj_dict_t;
451+
void mp_obj_dict_init(mp_obj_dict_t *dict, int n_args);
447452
uint mp_obj_dict_len(mp_obj_t self_in);
448453
mp_obj_t mp_obj_dict_store(mp_obj_t self_in, mp_obj_t key, mp_obj_t value);
449454
mp_obj_t mp_obj_dict_delete(mp_obj_t self_in, mp_obj_t key);
@@ -483,9 +488,9 @@ MP_DECLARE_CONST_FUN_OBJ(mp_identity_obj);
483488
typedef struct _mp_obj_module_t {
484489
mp_obj_base_t base;
485490
qstr name;
486-
mp_map_t *globals;
491+
mp_obj_dict_t *globals;
487492
} mp_obj_module_t;
488-
mp_map_t *mp_obj_module_get_globals(mp_obj_t self_in);
493+
mp_obj_dict_t *mp_obj_module_get_globals(mp_obj_t self_in);
489494

490495
// staticmethod and classmethod types; defined here so we can make const versions
491496
// this structure is used for instances of both staticmethod and classmethod

py/objcell.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
#include "nlr.h"
32
#include "misc.h"
43
#include "mpconfig.h"

0 commit comments

Comments
 (0)