Consolidate rt_make_function_[0123] to rt_make_function_n.
This commit is contained in:
parent
f88a72a88e
commit
f62d33aa1d
37
py/objfun.c
37
py/objfun.c
@ -98,42 +98,13 @@ const mp_obj_type_t fun_native_type = {
|
||||
.call_n_kw = fun_native_call_n_kw,
|
||||
};
|
||||
|
||||
mp_obj_t rt_make_function_0(mp_fun_0_t fun) {
|
||||
// fun must have the correct signature for n_args fixed arguments
|
||||
mp_obj_t rt_make_function_n(int n_args, void *fun) {
|
||||
mp_obj_fun_native_t *o = m_new_obj(mp_obj_fun_native_t);
|
||||
o->base.type = &fun_native_type;
|
||||
o->is_kw = false;
|
||||
o->n_args_min = 0;
|
||||
o->n_args_max = 0;
|
||||
o->fun = fun;
|
||||
return o;
|
||||
}
|
||||
|
||||
mp_obj_t rt_make_function_1(mp_fun_1_t fun) {
|
||||
mp_obj_fun_native_t *o = m_new_obj(mp_obj_fun_native_t);
|
||||
o->base.type = &fun_native_type;
|
||||
o->is_kw = false;
|
||||
o->n_args_min = 1;
|
||||
o->n_args_max = 1;
|
||||
o->fun = fun;
|
||||
return o;
|
||||
}
|
||||
|
||||
mp_obj_t rt_make_function_2(mp_fun_2_t fun) {
|
||||
mp_obj_fun_native_t *o = m_new_obj(mp_obj_fun_native_t);
|
||||
o->base.type = &fun_native_type;
|
||||
o->is_kw = false;
|
||||
o->n_args_min = 2;
|
||||
o->n_args_max = 2;
|
||||
o->fun = fun;
|
||||
return o;
|
||||
}
|
||||
|
||||
mp_obj_t rt_make_function_3(mp_fun_3_t fun) {
|
||||
mp_obj_fun_native_t *o = m_new_obj(mp_obj_fun_native_t);
|
||||
o->base.type = &fun_native_type;
|
||||
o->is_kw = false;
|
||||
o->n_args_min = 3;
|
||||
o->n_args_max = 3;
|
||||
o->n_args_min = n_args;
|
||||
o->n_args_max = n_args;
|
||||
o->fun = fun;
|
||||
return o;
|
||||
}
|
||||
|
@ -3,7 +3,6 @@
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "nlr.h"
|
||||
#include "misc.h"
|
||||
|
@ -587,12 +587,7 @@ mp_obj_t rt_make_function_from_id(int unique_code_id) {
|
||||
fun = mp_obj_new_fun_bc(c->n_args, c->n_locals + c->n_stack, c->u_byte.code);
|
||||
break;
|
||||
case MP_CODE_NATIVE:
|
||||
switch (c->n_args) {
|
||||
case 0: fun = rt_make_function_0(c->u_native.fun); break;
|
||||
case 1: fun = rt_make_function_1((mp_fun_1_t)c->u_native.fun); break;
|
||||
case 2: fun = rt_make_function_2((mp_fun_2_t)c->u_native.fun); break;
|
||||
default: assert(0); fun = mp_const_none;
|
||||
}
|
||||
fun = rt_make_function_n(c->n_args, c->u_native.fun);
|
||||
break;
|
||||
case MP_CODE_INLINE_ASM:
|
||||
fun = mp_obj_new_fun_asm(c->n_args, c->u_inline_asm.fun);
|
||||
|
@ -12,10 +12,8 @@ void rt_store_global(qstr qstr, mp_obj_t obj);
|
||||
mp_obj_t rt_unary_op(int op, mp_obj_t arg);
|
||||
mp_obj_t rt_binary_op(int op, mp_obj_t lhs, mp_obj_t rhs);
|
||||
mp_obj_t rt_make_function_from_id(int unique_code_id);
|
||||
mp_obj_t rt_make_function_0(mp_fun_0_t f);
|
||||
mp_obj_t rt_make_function_1(mp_fun_1_t f);
|
||||
mp_obj_t rt_make_function_2(mp_fun_2_t f);
|
||||
mp_obj_t rt_make_function_var(int n_args_min, mp_fun_var_t f);
|
||||
mp_obj_t rt_make_function_n(int n_args, void *fun); // fun must have the correct signature for n_args fixed arguments
|
||||
mp_obj_t rt_make_function_var(int n_args_min, mp_fun_var_t fun);
|
||||
mp_obj_t rt_make_function_var_between(int n_args_min, int n_args_max, mp_fun_var_t fun); // min and max are inclusive
|
||||
mp_obj_t rt_make_closure_from_id(int unique_code_id, mp_obj_t closure_tuple);
|
||||
mp_obj_t rt_call_function_0(mp_obj_t fun);
|
||||
|
@ -91,8 +91,8 @@ void audio_init(void) {
|
||||
|
||||
// Python interface
|
||||
mp_obj_t m = mp_obj_new_module(qstr_from_str_static("audio"));
|
||||
rt_store_attr(m, qstr_from_str_static("dac"), rt_make_function_1(pyb_audio_dac));
|
||||
rt_store_attr(m, qstr_from_str_static("is_full"), rt_make_function_0(pyb_audio_is_full));
|
||||
rt_store_attr(m, qstr_from_str_static("fill"), rt_make_function_1(pyb_audio_fill));
|
||||
rt_store_attr(m, qstr_from_str_static("dac"), rt_make_function_n(1, pyb_audio_dac));
|
||||
rt_store_attr(m, qstr_from_str_static("is_full"), rt_make_function_n(0, pyb_audio_is_full));
|
||||
rt_store_attr(m, qstr_from_str_static("fill"), rt_make_function_n(1, pyb_audio_fill));
|
||||
rt_store_name(qstr_from_str_static("audio"), m);
|
||||
}
|
||||
|
14
stm/lcd.c
14
stm/lcd.c
@ -220,13 +220,13 @@ void lcd_init(void) {
|
||||
|
||||
// Python interface
|
||||
mp_obj_t m = mp_obj_new_module(qstr_from_str_static("lcd"));
|
||||
rt_store_attr(m, qstr_from_str_static("lcd8"), rt_make_function_2(lcd_draw_pixel_8));
|
||||
rt_store_attr(m, qstr_from_str_static("clear"), rt_make_function_0(lcd_pix_clear));
|
||||
rt_store_attr(m, qstr_from_str_static("get"), rt_make_function_2(lcd_pix_get));
|
||||
rt_store_attr(m, qstr_from_str_static("set"), rt_make_function_2(lcd_pix_set));
|
||||
rt_store_attr(m, qstr_from_str_static("reset"), rt_make_function_2(lcd_pix_reset));
|
||||
rt_store_attr(m, qstr_from_str_static("show"), rt_make_function_0(lcd_pix_show));
|
||||
rt_store_attr(m, qstr_from_str_static("text"), rt_make_function_1(lcd_print));
|
||||
rt_store_attr(m, qstr_from_str_static("lcd8"), rt_make_function_n(2, lcd_draw_pixel_8));
|
||||
rt_store_attr(m, qstr_from_str_static("clear"), rt_make_function_n(0, lcd_pix_clear));
|
||||
rt_store_attr(m, qstr_from_str_static("get"), rt_make_function_n(2, lcd_pix_get));
|
||||
rt_store_attr(m, qstr_from_str_static("set"), rt_make_function_n(2, lcd_pix_set));
|
||||
rt_store_attr(m, qstr_from_str_static("reset"), rt_make_function_n(2, lcd_pix_reset));
|
||||
rt_store_attr(m, qstr_from_str_static("show"), rt_make_function_n(0, lcd_pix_show));
|
||||
rt_store_attr(m, qstr_from_str_static("text"), rt_make_function_n(1, lcd_print));
|
||||
rt_store_name(qstr_from_str_static("lcd"), m);
|
||||
}
|
||||
|
||||
|
42
stm/main.c
42
stm/main.c
@ -812,36 +812,36 @@ soft_reset:
|
||||
|
||||
// add some functions to the python namespace
|
||||
{
|
||||
rt_store_name(qstr_from_str_static("help"), rt_make_function_0(pyb_help));
|
||||
rt_store_name(qstr_from_str_static("help"), rt_make_function_n(0, pyb_help));
|
||||
|
||||
mp_obj_t m = mp_obj_new_module(qstr_from_str_static("pyb"));
|
||||
rt_store_attr(m, qstr_from_str_static("info"), rt_make_function_0(pyb_info));
|
||||
rt_store_attr(m, qstr_from_str_static("sd_test"), rt_make_function_0(pyb_sd_test));
|
||||
rt_store_attr(m, qstr_from_str_static("stop"), rt_make_function_0(pyb_stop));
|
||||
rt_store_attr(m, qstr_from_str_static("standby"), rt_make_function_0(pyb_standby));
|
||||
rt_store_attr(m, qstr_from_str_static("source_dir"), rt_make_function_1(pyb_source_dir));
|
||||
rt_store_attr(m, qstr_from_str_static("main"), rt_make_function_1(pyb_main));
|
||||
rt_store_attr(m, qstr_from_str_static("sync"), rt_make_function_0(pyb_sync));
|
||||
rt_store_attr(m, qstr_from_str_static("gc"), rt_make_function_0(pyb_gc));
|
||||
rt_store_attr(m, qstr_from_str_static("delay"), rt_make_function_1(pyb_delay));
|
||||
rt_store_attr(m, qstr_from_str_static("led"), rt_make_function_1(pyb_led));
|
||||
rt_store_attr(m, qstr_from_str_static("info"), rt_make_function_n(0, pyb_info));
|
||||
rt_store_attr(m, qstr_from_str_static("sd_test"), rt_make_function_n(0, pyb_sd_test));
|
||||
rt_store_attr(m, qstr_from_str_static("stop"), rt_make_function_n(0, pyb_stop));
|
||||
rt_store_attr(m, qstr_from_str_static("standby"), rt_make_function_n(0, pyb_standby));
|
||||
rt_store_attr(m, qstr_from_str_static("source_dir"), rt_make_function_n(1, pyb_source_dir));
|
||||
rt_store_attr(m, qstr_from_str_static("main"), rt_make_function_n(1, pyb_main));
|
||||
rt_store_attr(m, qstr_from_str_static("sync"), rt_make_function_n(0, pyb_sync));
|
||||
rt_store_attr(m, qstr_from_str_static("gc"), rt_make_function_n(0, pyb_gc));
|
||||
rt_store_attr(m, qstr_from_str_static("delay"), rt_make_function_n(1, pyb_delay));
|
||||
rt_store_attr(m, qstr_from_str_static("led"), rt_make_function_n(1, pyb_led));
|
||||
rt_store_attr(m, qstr_from_str_static("switch"), (mp_obj_t)&pyb_switch_obj);
|
||||
rt_store_attr(m, qstr_from_str_static("servo"), rt_make_function_2(pyb_servo_set));
|
||||
rt_store_attr(m, qstr_from_str_static("pwm"), rt_make_function_2(pyb_pwm_set));
|
||||
rt_store_attr(m, qstr_from_str_static("servo"), rt_make_function_n(2, pyb_servo_set));
|
||||
rt_store_attr(m, qstr_from_str_static("pwm"), rt_make_function_n(2, pyb_pwm_set));
|
||||
rt_store_attr(m, qstr_from_str_static("accel"), (mp_obj_t)&pyb_mma_read_obj);
|
||||
rt_store_attr(m, qstr_from_str_static("mma_read"), (mp_obj_t)&pyb_mma_read_all_obj);
|
||||
rt_store_attr(m, qstr_from_str_static("mma_mode"), (mp_obj_t)&pyb_mma_write_mode_obj);
|
||||
rt_store_attr(m, qstr_from_str_static("hid"), rt_make_function_1(pyb_hid_send_report));
|
||||
rt_store_attr(m, qstr_from_str_static("time"), rt_make_function_0(pyb_rtc_read));
|
||||
rt_store_attr(m, qstr_from_str_static("rand"), rt_make_function_0(pyb_rng_get));
|
||||
rt_store_attr(m, qstr_from_str_static("Led"), rt_make_function_1(pyb_Led));
|
||||
rt_store_attr(m, qstr_from_str_static("Servo"), rt_make_function_1(pyb_Servo));
|
||||
rt_store_attr(m, qstr_from_str_static("I2C"), rt_make_function_2(pyb_I2C));
|
||||
rt_store_attr(m, qstr_from_str_static("hid"), rt_make_function_n(1, pyb_hid_send_report));
|
||||
rt_store_attr(m, qstr_from_str_static("time"), rt_make_function_n(0, pyb_rtc_read));
|
||||
rt_store_attr(m, qstr_from_str_static("rand"), rt_make_function_n(0, pyb_rng_get));
|
||||
rt_store_attr(m, qstr_from_str_static("Led"), rt_make_function_n(1, pyb_Led));
|
||||
rt_store_attr(m, qstr_from_str_static("Servo"), rt_make_function_n(1, pyb_Servo));
|
||||
rt_store_attr(m, qstr_from_str_static("I2C"), rt_make_function_n(2, pyb_I2C));
|
||||
rt_store_attr(m, qstr_from_str_static("gpio"), (mp_obj_t)&pyb_gpio_obj);
|
||||
rt_store_attr(m, qstr_from_str_static("Usart"), rt_make_function_2(pyb_Usart));
|
||||
rt_store_attr(m, qstr_from_str_static("Usart"), rt_make_function_n(2, pyb_Usart));
|
||||
rt_store_name(qstr_from_str_static("pyb"), m);
|
||||
|
||||
rt_store_name(qstr_from_str_static("open"), rt_make_function_2(pyb_io_open));
|
||||
rt_store_name(qstr_from_str_static("open"), rt_make_function_n(2, pyb_io_open));
|
||||
}
|
||||
|
||||
// print a message to the LCD
|
||||
|
@ -357,11 +357,11 @@ void pyb_wlan_init(void) {
|
||||
|
||||
mp_obj_t m = mp_obj_new_module(qstr_from_str_static("wlan"));
|
||||
rt_store_attr(m, qstr_from_str_static("connect"), rt_make_function_var(0, pyb_wlan_connect));
|
||||
rt_store_attr(m, qstr_from_str_static("disconnect"), rt_make_function_0(pyb_wlan_disconnect));
|
||||
rt_store_attr(m, qstr_from_str_static("ip"), rt_make_function_0(pyb_wlan_get_ip));
|
||||
rt_store_attr(m, qstr_from_str_static("get_host"), rt_make_function_1(pyb_wlan_get_host));
|
||||
rt_store_attr(m, qstr_from_str_static("http_get"), rt_make_function_2(pyb_wlan_http_get));
|
||||
rt_store_attr(m, qstr_from_str_static("serve"), rt_make_function_0(pyb_wlan_serve));
|
||||
rt_store_attr(m, qstr_from_str_static("disconnect"), rt_make_function_n(0, pyb_wlan_disconnect));
|
||||
rt_store_attr(m, qstr_from_str_static("ip"), rt_make_function_n(0, pyb_wlan_get_ip));
|
||||
rt_store_attr(m, qstr_from_str_static("get_host"), rt_make_function_n(1, pyb_wlan_get_host));
|
||||
rt_store_attr(m, qstr_from_str_static("http_get"), rt_make_function_n(2, pyb_wlan_http_get));
|
||||
rt_store_attr(m, qstr_from_str_static("serve"), rt_make_function_n(0, pyb_wlan_serve));
|
||||
rt_store_name(qstr_from_str_static("wlan"), m);
|
||||
}
|
||||
|
||||
|
@ -72,10 +72,10 @@ void timer_init(void) {
|
||||
|
||||
// Python interface
|
||||
mp_obj_t m = mp_obj_new_module(qstr_from_str_static("timer"));
|
||||
rt_store_attr(m, qstr_from_str_static("callback"), rt_make_function_1(timer_py_set_callback));
|
||||
rt_store_attr(m, qstr_from_str_static("period"), rt_make_function_1(timer_py_set_period));
|
||||
rt_store_attr(m, qstr_from_str_static("prescaler"), rt_make_function_1(timer_py_set_prescaler));
|
||||
rt_store_attr(m, qstr_from_str_static("value"), rt_make_function_0(timer_py_get_value));
|
||||
rt_store_attr(m, qstr_from_str_static("callback"), rt_make_function_n(1, timer_py_set_callback));
|
||||
rt_store_attr(m, qstr_from_str_static("period"), rt_make_function_n(1, timer_py_set_period));
|
||||
rt_store_attr(m, qstr_from_str_static("prescaler"), rt_make_function_n(1, timer_py_set_prescaler));
|
||||
rt_store_attr(m, qstr_from_str_static("value"), rt_make_function_n(0, timer_py_get_value));
|
||||
rt_store_name(qstr_from_str_static("timer"), m);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user