mirror of
https://github.com/micropython/micropython.git
synced 2025-07-21 04:51:12 +02:00
py: Make struct-initializing macros compatible with C++.
This requires explicitly naming and initializing all members so add that where needed and possible. For MP_DEFINE_NLR_JUMP_CALLBACK_FUNCTION_1 this would require initializing the .callback member, but that's a bit of a waste since the macro is always followed by a call to nlr_push_jump_callback() to initialize exactly that member, so rewrite the macro without initializers. Signed-off-by: stijn <stijn@ignitron.net>
This commit is contained in:
14
py/obj.h
14
py/obj.h
@@ -371,25 +371,25 @@ typedef struct _mp_rom_obj_t { mp_const_obj_t o; } mp_rom_obj_t;
|
||||
|
||||
#define MP_DEFINE_CONST_FUN_OBJ_0(obj_name, fun_name) \
|
||||
const mp_obj_fun_builtin_fixed_t obj_name = \
|
||||
{{&mp_type_fun_builtin_0}, .fun._0 = fun_name}
|
||||
{.base = {.type = &mp_type_fun_builtin_0}, .fun = {._0 = fun_name}}
|
||||
#define MP_DEFINE_CONST_FUN_OBJ_1(obj_name, fun_name) \
|
||||
const mp_obj_fun_builtin_fixed_t obj_name = \
|
||||
{{&mp_type_fun_builtin_1}, .fun._1 = fun_name}
|
||||
{.base = {.type = &mp_type_fun_builtin_1}, .fun = {._1 = fun_name}}
|
||||
#define MP_DEFINE_CONST_FUN_OBJ_2(obj_name, fun_name) \
|
||||
const mp_obj_fun_builtin_fixed_t obj_name = \
|
||||
{{&mp_type_fun_builtin_2}, .fun._2 = fun_name}
|
||||
{.base = {.type = &mp_type_fun_builtin_2}, .fun = {._2 = fun_name}}
|
||||
#define MP_DEFINE_CONST_FUN_OBJ_3(obj_name, fun_name) \
|
||||
const mp_obj_fun_builtin_fixed_t obj_name = \
|
||||
{{&mp_type_fun_builtin_3}, .fun._3 = fun_name}
|
||||
{.base = {.type = &mp_type_fun_builtin_3}, .fun = {._3 = fun_name}}
|
||||
#define MP_DEFINE_CONST_FUN_OBJ_VAR(obj_name, n_args_min, fun_name) \
|
||||
const mp_obj_fun_builtin_var_t obj_name = \
|
||||
{{&mp_type_fun_builtin_var}, MP_OBJ_FUN_MAKE_SIG(n_args_min, MP_OBJ_FUN_ARGS_MAX, false), .fun.var = fun_name}
|
||||
{.base = {.type = &mp_type_fun_builtin_var}, .sig = MP_OBJ_FUN_MAKE_SIG(n_args_min, MP_OBJ_FUN_ARGS_MAX, false), .fun = {.var = fun_name}}
|
||||
#define MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(obj_name, n_args_min, n_args_max, fun_name) \
|
||||
const mp_obj_fun_builtin_var_t obj_name = \
|
||||
{{&mp_type_fun_builtin_var}, MP_OBJ_FUN_MAKE_SIG(n_args_min, n_args_max, false), .fun.var = fun_name}
|
||||
{.base = {.type = &mp_type_fun_builtin_var}, .sig = MP_OBJ_FUN_MAKE_SIG(n_args_min, n_args_max, false), .fun = {.var = fun_name}}
|
||||
#define MP_DEFINE_CONST_FUN_OBJ_KW(obj_name, n_args_min, fun_name) \
|
||||
const mp_obj_fun_builtin_var_t obj_name = \
|
||||
{{&mp_type_fun_builtin_var}, MP_OBJ_FUN_MAKE_SIG(n_args_min, MP_OBJ_FUN_ARGS_MAX, true), .fun.kw = fun_name}
|
||||
{.base = {.type = &mp_type_fun_builtin_var}, .sig = MP_OBJ_FUN_MAKE_SIG(n_args_min, MP_OBJ_FUN_ARGS_MAX, true), .fun = {.kw = fun_name}}
|
||||
|
||||
// These macros are used to define constant map/dict objects
|
||||
// You can put "static" in front of the definition to make it local
|
||||
|
@@ -50,7 +50,7 @@ extern const mp_obj_type_t mp_type_attrtuple;
|
||||
|
||||
#define MP_DEFINE_ATTRTUPLE(tuple_obj_name, fields, nitems, ...) \
|
||||
const mp_rom_obj_tuple_t tuple_obj_name = { \
|
||||
.base = {&mp_type_attrtuple}, \
|
||||
.base = {.type = &mp_type_attrtuple}, \
|
||||
.len = nitems, \
|
||||
.items = { __VA_ARGS__, MP_ROM_PTR((void *)fields) } \
|
||||
}
|
||||
|
10
py/runtime.h
10
py/runtime.h
@@ -30,12 +30,12 @@
|
||||
#include "py/pystack.h"
|
||||
#include "py/cstack.h"
|
||||
|
||||
// For use with mp_call_function_1_from_nlr_jump_callback.
|
||||
// Initialize an nlr_jump_callback_node_call_function_1_t struct for use with
|
||||
// nlr_push_jump_callback(&ctx.callback, mp_call_function_1_from_nlr_jump_callback);
|
||||
#define MP_DEFINE_NLR_JUMP_CALLBACK_FUNCTION_1(ctx, f, a) \
|
||||
nlr_jump_callback_node_call_function_1_t ctx = { \
|
||||
.func = (void (*)(void *))(f), \
|
||||
.arg = (a), \
|
||||
}
|
||||
nlr_jump_callback_node_call_function_1_t ctx; \
|
||||
ctx.func = (void (*)(void *))(f); \
|
||||
ctx.arg = (a)
|
||||
|
||||
typedef enum {
|
||||
MP_VM_RETURN_NORMAL,
|
||||
|
Reference in New Issue
Block a user