diff options
author | Damien George <damien.p.george@gmail.com> | 2014-01-25 00:18:30 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-01-25 00:18:30 +0000 |
commit | 0f5e8b151f2bfaec9c69c296d4fa0082de99e762 (patch) | |
tree | 9ecdfede99da8693b3a55ef98d10721f0de31a51 | |
parent | 7c9c667633d445e4df88868d630a0af4bc63d2f8 (diff) | |
parent | c1d200ef74c9a76a661cfbb3f2f73db992f0e272 (diff) | |
download | micropython-0f5e8b151f2bfaec9c69c296d4fa0082de99e762.tar.gz micropython-0f5e8b151f2bfaec9c69c296d4fa0082de99e762.zip |
Merge branch 'master' of github.com:micropython/micropython
-rw-r--r-- | py/map.c | 11 | ||||
-rw-r--r-- | py/map.h | 2 | ||||
-rw-r--r-- | py/runtime.c | 4 |
3 files changed, 17 insertions, 0 deletions
@@ -40,6 +40,17 @@ mp_map_t *mp_map_new(int n) { return map; } +// Differentiate from mp_map_clear() - semantics is different +void mp_map_deinit(mp_map_t *map) { + m_del(mp_map_elem_t, map->table, map->alloc); + map->used = map->alloc = 0; +} + +void mp_map_free(mp_map_t *map) { + mp_map_deinit(map); + m_del_obj(mp_map_t, map); +} + void mp_map_clear(mp_map_t *map) { map->used = 0; map->all_keys_are_qstrs = 1; @@ -28,6 +28,8 @@ typedef enum _mp_map_lookup_kind_t { int get_doubling_prime_greater_or_equal_to(int x); void mp_map_init(mp_map_t *map, int n); mp_map_t *mp_map_new(int n); +void mp_map_deinit(mp_map_t *map); +void mp_map_free(mp_map_t *map); mp_map_elem_t* mp_map_lookup(mp_map_t *map, mp_obj_t index, mp_map_lookup_kind_t lookup_kind); void mp_map_clear(mp_map_t *map); diff --git a/py/runtime.c b/py/runtime.c index 976d23a6b9..8ad98d5f12 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -166,6 +166,7 @@ void rt_init(void) { mp_module_micropython_init(); + // TODO: wastes one mp_code_t structure in mem next_unique_code_id = 1; // 0 indicates "no code" unique_codes_alloc = 0; unique_codes = NULL; @@ -177,6 +178,9 @@ void rt_init(void) { void rt_deinit(void) { m_del(mp_code_t, unique_codes, unique_codes_alloc); + mp_map_free(map_globals); + mp_map_deinit(&map_loaded_modules); + mp_map_deinit(&map_builtins); #ifdef WRITE_CODE if (fp_write_code != NULL) { fclose(fp_write_code); |