From dcac88095b3a67e75204f6b245d62d481ce2d906 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 16 Jan 2014 19:19:50 +0200 Subject: [PATCH] Add empty "micropython" module to allow more seamless CPython portability. Implicit "micropython" module contains (at least) codegeneration decorators. Make it explicit, so an app could have "import micropython". On MicroPython, that will be no-op. On CPython, that will give a chance to have a module with placeholder decorators. --- py/mpconfig.h | 8 ++++++++ py/runtime.c | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/py/mpconfig.h b/py/mpconfig.h index 5d8c57692e..505b1b2d18 100644 --- a/py/mpconfig.h +++ b/py/mpconfig.h @@ -85,6 +85,14 @@ typedef long long mp_longint_impl_t; #define MICROPY_ENABLE_SLICE (1) #endif +// Enable features which improve CPython compatibility +// but may lead to more code size/memory usage. +// TODO: Originally intended as generic category to not +// add bunch of once-off options. May need refactoring later +#ifndef MICROPY_CPYTHON_COMPAT +#define MICROPY_CPYTHON_COMPAT (1) +#endif + /*****************************************************************************/ /* Miscellaneous settings */ diff --git a/py/runtime.c b/py/runtime.c index e1e9e31cc7..0da3ced058 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -143,6 +143,13 @@ void rt_init(void) { mp_map_add_qstr(&map_builtins, MP_QSTR_sum, (mp_obj_t)&mp_builtin_sum_obj); mp_map_add_qstr(&map_builtins, MP_QSTR_str, (mp_obj_t)&mp_builtin_str_obj); +#if MICROPY_CPYTHON_COMPAT + // Add (empty) micropython module, so it was possible to "import micropython", + // which can be a placeholder module on CPython. + mp_obj_t m = mp_obj_new_module(qstr_from_str_static("micropython")); + rt_store_name(qstr_from_str_static("micropython"), m); +#endif + next_unique_code_id = 1; // 0 indicates "no code" unique_codes_alloc = 0; unique_codes = NULL;