I'm trying to write on for the Unix port, just to figure out how. I started from the modos.c module.
So far I have modified mymod.c
Code: Select all
#include "py/nlr.h"
#include "py/runtime.h"
#include "py/binary.h"
STATIC mp_obj_t mod_mymod_test(mp_obj_t path_in) {
return "test";
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_mymod_test_obj, mod_mymod_test);
STATIC const mp_map_elem_t mp_module_mymod_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR__mymod) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_test), (mp_obj_t)&mod_mymod_test_obj },
};
STATIC MP_DEFINE_CONST_DICT(mp_module_mymod_globals, mp_module_mymod_globals_table);
const mp_obj_module_t mp_module_mymod = {
.base = { &mp_type_module },
.name = MP_QSTR__mymod,
.globals = (mp_obj_dict_t*)&mp_module_mymod_globals,
};
Code: Select all
Q(mymod)
Q(test)
Code: Select all
# source files
SRC_C = \
main.c \
gccollect.c \
unix_mphal.c \
input.c \
file.c \
modos.c \
alloc.c \
coverage.c \
$(SRC_MOD) \
mymod.c \
Code: Select all
#define MICROPY_PY_MYMOD (1)
extern const struct _mp_obj_module_t mp_module_mymod;
#if MICROPY_PY_MYMOD
#define MICROPY_PY_MYMOD_DEF { MP_OBJ_NEW_QSTR(MP_QSTR_mymod), (mp_obj_t)&mp_module_mymod },
#else
#define MICROPY_PY_MYMOD_DEF
#endif
#define MICROPY_PORT_BUILTIN_MODULES \
MICROPY_PY_MYMOD_DEF \
Code: Select all
CC mymod.c
In file included from ../py/mpstate.h:34:0,
from ../py/runtime.h:29,
from mymod.c:29:
mymod.c:38:58: error: ‘MP_QSTR__mymod’ undeclared here (not in a function)
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR__mymod) },
^
../py/obj.h:84:56: note: in definition of macro ‘MP_OBJ_NEW_QSTR’
#define MP_OBJ_NEW_QSTR(qst) ((mp_obj_t)((((mp_uint_t)(qst)) << 2) | 2))
^
mymod.c:46:5: error: initializer element is not constant
.name = MP_QSTR__mymod,
^
mymod.c:46:5: error: (near initialization for ‘mp_module_mymod.name’)
../py/mkrules.mk:47: recipe for target 'build/mymod.o' failed
make: *** [build/mymod.o] Error 1