summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
authorBrian Pugh <bnp117@gmail.com>2024-04-19 16:37:51 -0700
committerDamien George <damien@micropython.org>2024-05-24 13:50:57 +1000
commitc624a5c0c4d02fd67e2ad5a0f36a141d2a6ef2ff (patch)
tree22ade79dfb47aa3d01fd6fa60c0d2ee0070992c3 /py
parenta196468c4752997a11cf06b65cb2147465b7f8eb (diff)
py/dynruntime: Export mp_load_method_maybe and mp_arg_parse_all* funcs.
Also define `mp_type_bytearray`. These all help to write native modules. Signed-off-by: Brian Pugh <bnp117@gmail.com> Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'py')
-rw-r--r--py/dynruntime.h8
-rw-r--r--py/nativeglue.c3
-rw-r--r--py/nativeglue.h5
3 files changed, 15 insertions, 1 deletions
diff --git a/py/dynruntime.h b/py/dynruntime.h
index 5503a1014..d360d824a 100644
--- a/py/dynruntime.h
+++ b/py/dynruntime.h
@@ -88,6 +88,7 @@ static inline void *m_realloc_dyn(void *ptr, size_t new_num_bytes) {
#define mp_type_int (*(mp_obj_type_t *)(mp_load_global(MP_QSTR_int)))
#define mp_type_str (*mp_fun_table.type_str)
#define mp_type_bytes (*(mp_obj_type_t *)(mp_load_global(MP_QSTR_bytes)))
+#define mp_type_bytearray (*(mp_obj_type_t *)(mp_load_global(MP_QSTR_bytearray)))
#define mp_type_tuple (*((mp_obj_base_t *)mp_const_empty_tuple)->type)
#define mp_type_list (*mp_fun_table.type_list)
#define mp_type_Exception (*mp_fun_table.type_Exception)
@@ -194,6 +195,7 @@ static inline void *mp_obj_malloc_helper_dyn(size_t num_bytes, const mp_obj_type
#define mp_load_global(qst) (mp_fun_table.load_global((qst)))
#define mp_load_attr(base, attr) (mp_fun_table.load_attr((base), (attr)))
#define mp_load_method(base, attr, dest) (mp_fun_table.load_method((base), (attr), (dest)))
+#define mp_load_method_maybe(base, attr, dest) (mp_fun_table.load_method_maybe((base), (attr), (dest)))
#define mp_load_super_method(attr, dest) (mp_fun_table.load_super_method((attr), (dest)))
#define mp_store_name(qst, obj) (mp_fun_table.store_name((qst), (obj)))
#define mp_store_global(qst, obj) (mp_fun_table.store_global((qst), (obj)))
@@ -211,6 +213,12 @@ static inline void *mp_obj_malloc_helper_dyn(size_t num_bytes, const mp_obj_type
#define mp_arg_check_num(n_args, n_kw, n_args_min, n_args_max, takes_kw) \
(mp_fun_table.arg_check_num_sig((n_args), (n_kw), MP_OBJ_FUN_MAKE_SIG((n_args_min), (n_args_max), (takes_kw))))
+#define mp_arg_parse_all(n_pos, pos, kws, n_allowed, allowed, out_vals) \
+ (mp_fun_table.arg_parse_all((n_pos), (pos), (kws), (n_allowed), (allowed), (out_vals)))
+
+#define mp_arg_parse_all_kw_array(n_pos, n_kw, args, n_allowed, allowed, out_vals) \
+ (mp_fun_table.arg_parse_all_kw_array((n_pos), (n_kw), (args), (n_allowed), (allowed), (out_vals)))
+
#define MP_DYNRUNTIME_INIT_ENTRY \
mp_obj_t old_globals = mp_fun_table.swap_globals(self->context->module.globals); \
mp_raw_code_truncated_t rc; \
diff --git a/py/nativeglue.c b/py/nativeglue.c
index ad2483cae..6bf16f1ac 100644
--- a/py/nativeglue.c
+++ b/py/nativeglue.c
@@ -329,8 +329,11 @@ const mp_fun_table_t mp_fun_table = {
mp_obj_new_float_from_d,
mp_obj_get_float_to_f,
mp_obj_get_float_to_d,
+ mp_load_method_maybe,
mp_get_buffer,
mp_get_stream_raise,
+ mp_arg_parse_all,
+ mp_arg_parse_all_kw_array,
mp_binary_get_size,
mp_binary_get_val_array,
mp_binary_set_val_array,
diff --git a/py/nativeglue.h b/py/nativeglue.h
index 4c114de42..e96fd7b66 100644
--- a/py/nativeglue.h
+++ b/py/nativeglue.h
@@ -154,13 +154,16 @@ typedef struct _mp_fun_table_t {
mp_obj_t (*obj_new_float_from_d)(double d);
float (*obj_get_float_to_f)(mp_obj_t o);
double (*obj_get_float_to_d)(mp_obj_t o);
+ void (*load_method_maybe)(mp_obj_t base, qstr attr, mp_obj_t *dest);
bool (*get_buffer)(mp_obj_t obj, mp_buffer_info_t *bufinfo, mp_uint_t flags);
const mp_stream_p_t *(*get_stream_raise)(mp_obj_t self_in, int flags);
+ void (*arg_parse_all)(size_t n_pos, const mp_obj_t *pos, mp_map_t *kws, size_t n_allowed, const mp_arg_t *allowed, mp_arg_val_t *out_vals);
+ void (*arg_parse_all_kw_array)(size_t n_pos, size_t n_kw, const mp_obj_t *args, size_t n_allowed, const mp_arg_t *allowed, mp_arg_val_t *out_vals);
size_t (*binary_get_size)(char struct_type, char val_type, size_t *palign);
mp_obj_t (*binary_get_val_array)(char typecode, void *p, size_t index);
void (*binary_set_val_array)(char typecode, void *p, size_t index, mp_obj_t val_in);
const mp_print_t *plat_print;
- // The following entries start at index 70 and are referenced by tools-mpy_ld.py,
+ // The following entries start at index 73 and are referenced by tools-mpy_ld.py,
// see constant MP_FUN_TABLE_MP_TYPE_TYPE_OFFSET.
const mp_obj_type_t *type_type;
const mp_obj_type_t *type_str;