diff options
Diffstat (limited to 'py')
-rw-r--r-- | py/builtin.c | 1 | ||||
-rw-r--r-- | py/builtinevex.c | 1 | ||||
-rw-r--r-- | py/builtinimport.c | 1 | ||||
-rw-r--r-- | py/map.c | 3 | ||||
-rw-r--r-- | py/map.h | 48 | ||||
-rw-r--r-- | py/modarray.c | 1 | ||||
-rw-r--r-- | py/modcollections.c | 1 | ||||
-rw-r--r-- | py/modmath.c | 1 | ||||
-rw-r--r-- | py/modmicropython.c | 1 | ||||
-rw-r--r-- | py/obj.c | 1 | ||||
-rw-r--r-- | py/obj.h | 63 | ||||
-rw-r--r-- | py/objarray.c | 1 | ||||
-rw-r--r-- | py/objcomplex.c | 1 | ||||
-rw-r--r-- | py/objdict.c | 1 | ||||
-rw-r--r-- | py/objfun.c | 1 | ||||
-rw-r--r-- | py/objgenerator.c | 1 | ||||
-rw-r--r-- | py/objlist.c | 1 | ||||
-rw-r--r-- | py/objmodule.c | 1 | ||||
-rw-r--r-- | py/objset.c | 1 | ||||
-rw-r--r-- | py/objstr.c | 1 | ||||
-rw-r--r-- | py/objtuple.c | 1 | ||||
-rw-r--r-- | py/objtype.c | 1 | ||||
-rw-r--r-- | py/runtime.c | 1 | ||||
-rw-r--r-- | py/runtime.h | 10 | ||||
-rw-r--r-- | py/sequence.c | 1 |
25 files changed, 61 insertions, 84 deletions
diff --git a/py/builtin.c b/py/builtin.c index a8a7009708..d606db17f4 100644 --- a/py/builtin.c +++ b/py/builtin.c @@ -8,7 +8,6 @@ #include "obj.h" #include "runtime0.h" #include "runtime.h" -#include "map.h" #include "builtin.h" #if MICROPY_ENABLE_FLOAT diff --git a/py/builtinevex.c b/py/builtinevex.c index 92550a7965..264aa77f31 100644 --- a/py/builtinevex.c +++ b/py/builtinevex.c @@ -12,7 +12,6 @@ #include "compile.h" #include "runtime0.h" #include "runtime.h" -#include "map.h" #include "builtin.h" STATIC mp_obj_t parse_compile_execute(mp_obj_t o_in, mp_parse_input_kind_t parse_input_kind) { diff --git a/py/builtinimport.c b/py/builtinimport.c index 4ba1d146a6..8feb2a01ba 100644 --- a/py/builtinimport.c +++ b/py/builtinimport.c @@ -17,7 +17,6 @@ #include "compile.h" #include "runtime0.h" #include "runtime.h" -#include "map.h" #include "builtin.h" #define PATH_SEP_CHAR '/' @@ -5,13 +5,12 @@ #include "qstr.h" #include "obj.h" #include "runtime0.h" -#include "map.h" // approximatelly doubling primes; made with Mathematica command: Table[Prime[Floor[(1.7)^n]], {n, 3, 24}] // prefixed with zero for the empty case. STATIC int doubling_primes[] = {0, 7, 19, 43, 89, 179, 347, 647, 1229, 2297, 4243, 7829, 14347, 26017, 47149, 84947, 152443, 273253, 488399, 869927, 1547173, 2745121, 4861607}; -int get_doubling_prime_greater_or_equal_to(int x) { +STATIC int get_doubling_prime_greater_or_equal_to(int x) { for (int i = 0; i < sizeof(doubling_primes) / sizeof(int); i++) { if (doubling_primes[i] >= x) { return doubling_primes[i]; diff --git a/py/map.h b/py/map.h deleted file mode 100644 index 0614af3c42..0000000000 --- a/py/map.h +++ /dev/null @@ -1,48 +0,0 @@ -typedef struct _mp_map_elem_t { - mp_obj_t key; - mp_obj_t value; -} mp_map_elem_t; - -// TODO maybe have a truncated mp_map_t for fixed tables, since alloc=used -// put alloc last in the structure, so the truncated version does not need it -// this would save 1 ROM word for all ROM objects that have a locals_dict -// would also need a trucated dict structure - -typedef struct _mp_map_t { - machine_uint_t all_keys_are_qstrs : 1; - machine_uint_t table_is_fixed_array : 1; - machine_uint_t used : (8 * sizeof(machine_uint_t) - 2); - machine_uint_t alloc; - mp_map_elem_t *table; -} mp_map_t; - -typedef struct _mp_set_t { - machine_uint_t alloc; - machine_uint_t used; - mp_obj_t *table; -} mp_set_t; - -typedef enum _mp_map_lookup_kind_t { - MP_MAP_LOOKUP, // 0 - MP_MAP_LOOKUP_ADD_IF_NOT_FOUND, // 1 - MP_MAP_LOOKUP_REMOVE_IF_FOUND, // 2 - MP_MAP_LOOKUP_FIRST = 4, -} mp_map_lookup_kind_t; - -typedef struct _mp_obj_dict_t { - mp_obj_base_t base; - mp_map_t map; -} mp_obj_dict_t; - -int get_doubling_prime_greater_or_equal_to(int x); -void mp_map_init(mp_map_t *map, int n); -void mp_map_init_fixed_table(mp_map_t *map, int n, const mp_obj_t *table); -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); - -void mp_set_init(mp_set_t *set, int n); -mp_obj_t mp_set_lookup(mp_set_t *set, mp_obj_t index, mp_map_lookup_kind_t lookup_kind); -void mp_set_clear(mp_set_t *set); diff --git a/py/modarray.c b/py/modarray.c index 2544f7ed59..51c221fff3 100644 --- a/py/modarray.c +++ b/py/modarray.c @@ -2,7 +2,6 @@ #include "mpconfig.h" #include "qstr.h" #include "obj.h" -#include "map.h" #include "builtin.h" STATIC const mp_map_elem_t mp_module_array_globals_table[] = { diff --git a/py/modcollections.c b/py/modcollections.c index ad951d5e9e..3401600bb1 100644 --- a/py/modcollections.c +++ b/py/modcollections.c @@ -2,7 +2,6 @@ #include "mpconfig.h" #include "qstr.h" #include "obj.h" -#include "map.h" #include "builtin.h" STATIC const mp_map_elem_t mp_module_collections_globals_table[] = { diff --git a/py/modmath.c b/py/modmath.c index b814822531..c3ea55f936 100644 --- a/py/modmath.c +++ b/py/modmath.c @@ -4,7 +4,6 @@ #include "mpconfig.h" #include "qstr.h" #include "obj.h" -#include "map.h" #include "builtin.h" #if MICROPY_ENABLE_FLOAT diff --git a/py/modmicropython.c b/py/modmicropython.c index 96ceb811c9..23187c03e9 100644 --- a/py/modmicropython.c +++ b/py/modmicropython.c @@ -2,7 +2,6 @@ #include "mpconfig.h" #include "qstr.h" #include "obj.h" -#include "map.h" #include "builtin.h" // Various builtins specific to MicroPython runtime, @@ -9,7 +9,6 @@ #include "obj.h" #include "runtime0.h" #include "runtime.h" -#include "map.h" mp_obj_type_t *mp_obj_get_type(mp_obj_t o_in) { if (MP_OBJ_IS_SMALL_INT(o_in)) { @@ -83,9 +83,52 @@ typedef struct _mp_obj_base_t mp_obj_base_t; #define MP_DEFINE_CONST_STATICMETHOD_OBJ(obj_name, fun_name) const mp_obj_static_class_method_t obj_name = {{&mp_type_staticmethod}, fun_name} #define MP_DEFINE_CONST_CLASSMETHOD_OBJ(obj_name, fun_name) const mp_obj_static_class_method_t obj_name = {{&mp_type_classmethod}, fun_name} -// Need to declare this here so we are not dependent on map.h -struct _mp_map_t; -struct _mp_map_elem_t; +// Underlying map/hash table implementation (not dict object or map function) + +typedef struct _mp_map_elem_t { + mp_obj_t key; + mp_obj_t value; +} mp_map_elem_t; + +// TODO maybe have a truncated mp_map_t for fixed tables, since alloc=used +// put alloc last in the structure, so the truncated version does not need it +// this would save 1 ROM word for all ROM objects that have a locals_dict +// would also need a trucated dict structure + +typedef struct _mp_map_t { + machine_uint_t all_keys_are_qstrs : 1; + machine_uint_t table_is_fixed_array : 1; + machine_uint_t used : (8 * sizeof(machine_uint_t) - 2); + machine_uint_t alloc; + mp_map_elem_t *table; +} mp_map_t; + +typedef enum _mp_map_lookup_kind_t { + MP_MAP_LOOKUP, // 0 + MP_MAP_LOOKUP_ADD_IF_NOT_FOUND, // 1 + MP_MAP_LOOKUP_REMOVE_IF_FOUND, // 2 + MP_MAP_LOOKUP_FIRST = 4, +} mp_map_lookup_kind_t; + +void mp_map_init(mp_map_t *map, int n); +void mp_map_init_fixed_table(mp_map_t *map, int n, const mp_obj_t *table); +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); + +// Underlying set implementation (not set object) + +typedef struct _mp_set_t { + machine_uint_t alloc; + machine_uint_t used; + mp_obj_t *table; +} mp_set_t; + +void mp_set_init(mp_set_t *set, int n); +mp_obj_t mp_set_lookup(mp_set_t *set, mp_obj_t index, mp_map_lookup_kind_t lookup_kind); +void mp_set_clear(mp_set_t *set); // Type definitions for methods @@ -95,7 +138,7 @@ typedef mp_obj_t (*mp_fun_2_t)(mp_obj_t, mp_obj_t); typedef mp_obj_t (*mp_fun_3_t)(mp_obj_t, mp_obj_t, mp_obj_t); typedef mp_obj_t (*mp_fun_t)(void); typedef mp_obj_t (*mp_fun_var_t)(uint n, const mp_obj_t *); -typedef mp_obj_t (*mp_fun_kw_t)(uint n, const mp_obj_t *, struct _mp_map_t *); +typedef mp_obj_t (*mp_fun_kw_t)(uint n, const mp_obj_t *, mp_map_t *); typedef enum { PRINT_STR, PRINT_REPR @@ -384,12 +427,16 @@ machine_int_t mp_obj_tuple_hash(mp_obj_t self_in); mp_obj_t mp_obj_list_append(mp_obj_t self_in, mp_obj_t arg); void mp_obj_list_get(mp_obj_t self_in, uint *len, mp_obj_t **items); void mp_obj_list_store(mp_obj_t self_in, mp_obj_t index, mp_obj_t value); -mp_obj_t mp_obj_list_sort(uint n_args, const mp_obj_t *args, struct _mp_map_t *kwargs); +mp_obj_t mp_obj_list_sort(uint n_args, const mp_obj_t *args, mp_map_t *kwargs); // dict +typedef struct _mp_obj_dict_t { + mp_obj_base_t base; + mp_map_t map; +} mp_obj_dict_t; uint mp_obj_dict_len(mp_obj_t self_in); mp_obj_t mp_obj_dict_store(mp_obj_t self_in, mp_obj_t key, mp_obj_t value); -struct _mp_map_t *mp_obj_dict_get_map(mp_obj_t self_in); +mp_map_t *mp_obj_dict_get_map(mp_obj_t self_in); // set void mp_obj_set_store(mp_obj_t self_in, mp_obj_t item); @@ -423,9 +470,9 @@ MP_DECLARE_CONST_FUN_OBJ(mp_identity_obj); typedef struct _mp_obj_module_t { mp_obj_base_t base; qstr name; - struct _mp_map_t *globals; + mp_map_t *globals; } mp_obj_module_t; -struct _mp_map_t *mp_obj_module_get_globals(mp_obj_t self_in); +mp_map_t *mp_obj_module_get_globals(mp_obj_t self_in); // staticmethod and classmethod types; defined here so we can make const versions // this structure is used for instances of both staticmethod and classmethod diff --git a/py/objarray.c b/py/objarray.c index 3251ce969b..ea8654b456 100644 --- a/py/objarray.c +++ b/py/objarray.c @@ -6,7 +6,6 @@ #include "mpconfig.h" #include "qstr.h" #include "obj.h" -#include "map.h" #include "runtime0.h" #include "runtime.h" #include "binary.h" diff --git a/py/objcomplex.c b/py/objcomplex.c index afda721cfc..3fba568946 100644 --- a/py/objcomplex.c +++ b/py/objcomplex.c @@ -8,7 +8,6 @@ #include "obj.h" #include "parsenum.h" #include "runtime0.h" -#include "map.h" #if MICROPY_ENABLE_FLOAT diff --git a/py/objdict.c b/py/objdict.c index cb8e9d3e65..a9dbb76c44 100644 --- a/py/objdict.c +++ b/py/objdict.c @@ -7,7 +7,6 @@ #include "mpconfig.h" #include "qstr.h" #include "obj.h" -#include "map.h" #include "runtime0.h" #include "runtime.h" diff --git a/py/objfun.c b/py/objfun.c index d4fa7592f7..019101bedf 100644 --- a/py/objfun.c +++ b/py/objfun.c @@ -9,7 +9,6 @@ #include "qstr.h" #include "obj.h" #include "objtuple.h" -#include "map.h" #include "runtime0.h" #include "runtime.h" #include "bc.h" diff --git a/py/objgenerator.c b/py/objgenerator.c index ce02e6f3ab..d1bae30de1 100644 --- a/py/objgenerator.c +++ b/py/objgenerator.c @@ -6,7 +6,6 @@ #include "mpconfig.h" #include "qstr.h" #include "obj.h" -#include "map.h" #include "runtime.h" #include "bc.h" #include "objgenerator.h" diff --git a/py/objlist.c b/py/objlist.c index c2feb01319..1030a862a2 100644 --- a/py/objlist.c +++ b/py/objlist.c @@ -6,7 +6,6 @@ #include "mpconfig.h" #include "qstr.h" #include "obj.h" -#include "map.h" #include "runtime0.h" #include "runtime.h" diff --git a/py/objmodule.c b/py/objmodule.c index a388ca3f37..cc5944b665 100644 --- a/py/objmodule.c +++ b/py/objmodule.c @@ -8,7 +8,6 @@ #include "obj.h" #include "objmodule.h" #include "runtime.h" -#include "map.h" #include "builtintables.h" STATIC mp_map_t mp_loaded_modules_map; // TODO: expose as sys.modules diff --git a/py/objset.c b/py/objset.c index 9b0ac2b107..2cabf6c509 100644 --- a/py/objset.c +++ b/py/objset.c @@ -9,7 +9,6 @@ #include "obj.h" #include "runtime.h" #include "runtime0.h" -#include "map.h" typedef struct _mp_obj_set_t { mp_obj_base_t base; diff --git a/py/objstr.c b/py/objstr.c index d02924c506..2dd7015c58 100644 --- a/py/objstr.c +++ b/py/objstr.c @@ -7,7 +7,6 @@ #include "mpconfig.h" #include "qstr.h" #include "obj.h" -#include "map.h" #include "runtime0.h" #include "runtime.h" diff --git a/py/objtuple.c b/py/objtuple.c index faa355e5bd..6186640604 100644 --- a/py/objtuple.c +++ b/py/objtuple.c @@ -6,7 +6,6 @@ #include "mpconfig.h" #include "qstr.h" #include "obj.h" -#include "map.h" #include "runtime0.h" #include "runtime.h" #include "objtuple.h" diff --git a/py/objtype.c b/py/objtype.c index 05d39b1217..1275124803 100644 --- a/py/objtype.c +++ b/py/objtype.c @@ -6,7 +6,6 @@ #include "mpconfig.h" #include "qstr.h" #include "obj.h" -#include "map.h" #include "runtime0.h" #include "runtime.h" diff --git a/py/runtime.c b/py/runtime.c index a434d318e9..ed01a5be08 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -12,7 +12,6 @@ #include "runtime0.h" #include "runtime.h" #include "emitglue.h" -#include "map.h" #include "builtin.h" #include "builtintables.h" #include "bc.h" diff --git a/py/runtime.h b/py/runtime.h index 1934ccd1e4..b3d70d939c 100644 --- a/py/runtime.h +++ b/py/runtime.h @@ -3,10 +3,10 @@ void mp_deinit(void); void mp_check_nargs(int n_args, machine_uint_t n_args_min, machine_uint_t n_args_max, int n_kw, bool is_kw); -struct _mp_map_t *mp_locals_get(void); -void mp_locals_set(struct _mp_map_t *m); -struct _mp_map_t *mp_globals_get(void); -void mp_globals_set(struct _mp_map_t *m); +mp_map_t *mp_locals_get(void); +void mp_locals_set(mp_map_t *m); +mp_map_t *mp_globals_get(void); +void mp_globals_set(mp_map_t *m); mp_obj_t mp_load_name(qstr qstr); mp_obj_t mp_load_global(qstr qstr); @@ -58,7 +58,7 @@ mp_obj_t mp_iternext(mp_obj_t o); // will always return MP_OBJ_NULL instead of r mp_obj_t mp_make_raise_obj(mp_obj_t o); extern mp_obj_t mp_sys_path; -struct _mp_map_t *mp_loaded_modules_get(void); +mp_map_t *mp_loaded_modules_get(void); mp_obj_t mp_import_name(qstr name, mp_obj_t fromlist, mp_obj_t level); mp_obj_t mp_import_from(mp_obj_t module, qstr name); void mp_import_all(mp_obj_t module); diff --git a/py/sequence.c b/py/sequence.c index 8810a47d97..3aae4b9420 100644 --- a/py/sequence.c +++ b/py/sequence.c @@ -6,7 +6,6 @@ #include "mpconfig.h" #include "qstr.h" #include "obj.h" -#include "map.h" #include "runtime0.h" #include "runtime.h" |