diff options
-rw-r--r-- | bare-arm/Makefile | 2 | ||||
-rw-r--r-- | bare-arm/mpconfigport.h | 4 | ||||
-rw-r--r-- | py/builtintables.c | 4 | ||||
-rw-r--r-- | py/modarray.c | 4 | ||||
-rw-r--r-- | py/mpconfig.h | 11 | ||||
-rw-r--r-- | py/obj.c | 3 | ||||
-rw-r--r-- | py/objarray.c | 4 | ||||
-rw-r--r-- | py/runtime.c | 3 | ||||
-rw-r--r-- | stmhal/boards/HYDRABUS/mpconfigboard.h | 1 | ||||
-rw-r--r-- | stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h | 1 | ||||
-rw-r--r-- | stmhal/boards/PYBV10/mpconfigboard.h | 1 | ||||
-rw-r--r-- | stmhal/boards/PYBV3/mpconfigboard.h | 1 | ||||
-rw-r--r-- | stmhal/boards/PYBV4/mpconfigboard.h | 1 | ||||
-rw-r--r-- | stmhal/boards/STM32F4DISC/mpconfigboard.h | 1 | ||||
-rw-r--r-- | stmhal/main.c | 1 | ||||
-rw-r--r-- | stmhal/pyexec.c | 2 | ||||
-rw-r--r-- | tests/misc/recursive_data.py_ | 9 | ||||
-rw-r--r-- | unix/input.c | 2 | ||||
-rw-r--r-- | unix/main.c | 1 |
19 files changed, 50 insertions, 6 deletions
diff --git a/bare-arm/Makefile b/bare-arm/Makefile index ed8c00482b..eeaaf423d0 100644 --- a/bare-arm/Makefile +++ b/bare-arm/Makefile @@ -22,7 +22,7 @@ else CFLAGS += -Os -DNDEBUG endif -LDFLAGS = -nostdlib -T stm32f405.ld +LDFLAGS = -nostdlib -T stm32f405.ld -Map=$@.map --cref LIBS = SRC_C = \ diff --git a/bare-arm/mpconfigport.h b/bare-arm/mpconfigport.h index 1587dca57a..8598735480 100644 --- a/bare-arm/mpconfigport.h +++ b/bare-arm/mpconfigport.h @@ -12,10 +12,12 @@ #define MICROPY_HELPER_REPL (0) #define MICROPY_HELPER_LEXER_UNIX (0) #define MICROPY_ENABLE_SOURCE_LINE (0) +#define MICROPY_PY_BUILTINS_BYTEARRAY (0) #define MICROPY_PY_BUILTINS_FROZENSET (0) #define MICROPY_PY_BUILTINS_SET (0) #define MICROPY_PY_BUILTINS_SLICE (0) #define MICROPY_PY_BUILTINS_PROPERTY (0) +#define MICROPY_PY_ARRAY (0) #define MICROPY_PY_COLLECTIONS (0) #define MICROPY_PY_MATH (0) #define MICROPY_PY_CMATH (0) @@ -26,6 +28,8 @@ #define MICROPY_LONGINT_IMPL (MICROPY_LONGINT_IMPL_NONE) #define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_NONE) +//#define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_TERSE) + // type definitions for the specific machine #define BYTES_PER_WORD (4) diff --git a/py/builtintables.c b/py/builtintables.c index 8b4df93177..c42cdf89bb 100644 --- a/py/builtintables.c +++ b/py/builtintables.c @@ -43,7 +43,9 @@ STATIC const mp_map_elem_t mp_builtin_object_table[] = { // built-in types { MP_OBJ_NEW_QSTR(MP_QSTR_bool), (mp_obj_t)&mp_type_bool }, { MP_OBJ_NEW_QSTR(MP_QSTR_bytes), (mp_obj_t)&mp_type_bytes }, +#if MICROPY_PY_BUILTINS_BYTEARRAY { MP_OBJ_NEW_QSTR(MP_QSTR_bytearray), (mp_obj_t)&mp_type_bytearray }, +#endif #if MICROPY_PY_BUILTINS_COMPLEX { MP_OBJ_NEW_QSTR(MP_QSTR_complex), (mp_obj_t)&mp_type_complex }, #endif @@ -160,7 +162,9 @@ STATIC const mp_map_elem_t mp_builtin_module_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR___main__), (mp_obj_t)&mp_module___main__ }, { MP_OBJ_NEW_QSTR(MP_QSTR_micropython), (mp_obj_t)&mp_module_micropython }, +#if MICROPY_PY_ARRAY { MP_OBJ_NEW_QSTR(MP_QSTR_array), (mp_obj_t)&mp_module_array }, +#endif #if MICROPY_PY_IO { MP_OBJ_NEW_QSTR(MP_QSTR__io), (mp_obj_t)&mp_module_io }, #endif diff --git a/py/modarray.c b/py/modarray.c index 3ff567f1d9..c0fe331643 100644 --- a/py/modarray.c +++ b/py/modarray.c @@ -30,6 +30,8 @@ #include "obj.h" #include "builtin.h" +#if MICROPY_PY_ARRAY + STATIC const mp_map_elem_t mp_module_array_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_array) }, { MP_OBJ_NEW_QSTR(MP_QSTR_array), (mp_obj_t)&mp_type_array }, @@ -51,3 +53,5 @@ const mp_obj_module_t mp_module_array = { .name = MP_QSTR_array, .globals = (mp_obj_dict_t*)&mp_module_array_globals, }; + +#endif diff --git a/py/mpconfig.h b/py/mpconfig.h index 5194ba028a..7ed99ac8e0 100644 --- a/py/mpconfig.h +++ b/py/mpconfig.h @@ -252,6 +252,10 @@ typedef double mp_float_t; // Whether str object is proper unicode #ifndef MICROPY_PY_BUILTINS_STR_UNICODE #define MICROPY_PY_BUILTINS_STR_UNICODE (0) + +// Whether to support bytearray object +#ifndef MICROPY_PY_BUILTINS_BYTEARRAY +#define MICROPY_PY_BUILTINS_BYTEARRAY (1) #endif // Whether to support set object @@ -274,6 +278,13 @@ typedef double mp_float_t; #define MICROPY_PY_BUILTINS_PROPERTY (1) #endif +// Whether to provide "array" module. Note that large chunk of the +// underlying code is shared with "bytearray" builtin type, so to +// get real savings, it should be disabled too. +#ifndef MICROPY_PY_ARRAY +#define MICROPY_PY_ARRAY (1) +#endif + // Whether to provide "collections" module #ifndef MICROPY_PY_COLLECTIONS #define MICROPY_PY_COLLECTIONS (1) @@ -35,6 +35,7 @@ #include "obj.h" #include "runtime0.h" #include "runtime.h" +#include "stackctrl.h" mp_obj_type_t *mp_obj_get_type(mp_const_obj_t o_in) { if (MP_OBJ_IS_SMALL_INT(o_in)) { @@ -59,6 +60,8 @@ void printf_wrapper(void *env, const char *fmt, ...) { } void mp_obj_print_helper(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t o_in, mp_print_kind_t kind) { + // There can be data structures nested too deep, or just recursive + STACK_CHECK(); #if !NDEBUG if (o_in == NULL) { print(env, "(nil)"); diff --git a/py/objarray.c b/py/objarray.c index 05821e8de4..b13df2bdba 100644 --- a/py/objarray.c +++ b/py/objarray.c @@ -37,6 +37,8 @@ #include "runtime.h" #include "binary.h" +#if MICROPY_PY_ARRAY || MICROPY_PY_BUILTINS_BYTEARRAY + typedef struct _mp_obj_array_t { mp_obj_base_t base; machine_uint_t typecode : 8; @@ -310,3 +312,5 @@ STATIC mp_obj_t array_iterator_new(mp_obj_t array_in) { o->cur = 0; return o; } + +#endif // MICROPY_PY_ARRAY || MICROPY_PY_BUILTINS_BYTEARRAY diff --git a/py/runtime.c b/py/runtime.c index b539984c0b..f08ff9ff40 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -45,6 +45,7 @@ #include "smallint.h" #include "objgenerator.h" #include "lexer.h" +#include "stackctrl.h" #if 0 // print debugging info #define DEBUG_PRINT (1) @@ -69,6 +70,8 @@ const mp_obj_module_t mp_module___main__ = { }; void mp_init(void) { + stack_ctrl_init(); + // call port specific initialization if any #ifdef MICROPY_PORT_INIT_FUNC MICROPY_PORT_INIT_FUNC; diff --git a/stmhal/boards/HYDRABUS/mpconfigboard.h b/stmhal/boards/HYDRABUS/mpconfigboard.h index f87a14142e..db49434b5b 100644 --- a/stmhal/boards/HYDRABUS/mpconfigboard.h +++ b/stmhal/boards/HYDRABUS/mpconfigboard.h @@ -1,6 +1,7 @@ #define HYDRABUSV10 #define MICROPY_HW_BOARD_NAME "HydraBus1.0" +#define MICROPY_HW_MCU_NAME "STM32F4" #define MICROPY_HW_HAS_SWITCH (1) #define MICROPY_HW_HAS_SDCARD (1) diff --git a/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h b/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h index 0e40545253..2679aee576 100644 --- a/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h +++ b/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h @@ -1,6 +1,7 @@ #define NETDUINO_PLUS_2 #define MICROPY_HW_BOARD_NAME "NetduinoPlus2" +#define MICROPY_HW_MCU_NAME "STM32F405RG" #define MICROPY_HW_HAS_SWITCH (1) diff --git a/stmhal/boards/PYBV10/mpconfigboard.h b/stmhal/boards/PYBV10/mpconfigboard.h index 3def531232..4ae6954a7d 100644 --- a/stmhal/boards/PYBV10/mpconfigboard.h +++ b/stmhal/boards/PYBV10/mpconfigboard.h @@ -1,6 +1,7 @@ #define PYBV10 #define MICROPY_HW_BOARD_NAME "PYBv1.0" +#define MICROPY_HW_MCU_NAME "STM32F405RG" #define MICROPY_HW_HAS_SWITCH (1) #define MICROPY_HW_HAS_SDCARD (1) diff --git a/stmhal/boards/PYBV3/mpconfigboard.h b/stmhal/boards/PYBV3/mpconfigboard.h index ac0d84ca29..43d860a0cc 100644 --- a/stmhal/boards/PYBV3/mpconfigboard.h +++ b/stmhal/boards/PYBV3/mpconfigboard.h @@ -1,6 +1,7 @@ #define PYBV3 #define MICROPY_HW_BOARD_NAME "PYBv3" +#define MICROPY_HW_MCU_NAME "STM32F405RG" #define MICROPY_HW_HAS_SWITCH (1) #define MICROPY_HW_HAS_SDCARD (1) diff --git a/stmhal/boards/PYBV4/mpconfigboard.h b/stmhal/boards/PYBV4/mpconfigboard.h index 9fedb70136..a278dea9fb 100644 --- a/stmhal/boards/PYBV4/mpconfigboard.h +++ b/stmhal/boards/PYBV4/mpconfigboard.h @@ -1,6 +1,7 @@ #define PYBV4 #define MICROPY_HW_BOARD_NAME "PYBv4" +#define MICROPY_HW_MCU_NAME "STM32F405RG" #define MICROPY_HW_HAS_SWITCH (1) #define MICROPY_HW_HAS_SDCARD (1) diff --git a/stmhal/boards/STM32F4DISC/mpconfigboard.h b/stmhal/boards/STM32F4DISC/mpconfigboard.h index e6780eacbd..10bbe45188 100644 --- a/stmhal/boards/STM32F4DISC/mpconfigboard.h +++ b/stmhal/boards/STM32F4DISC/mpconfigboard.h @@ -1,6 +1,7 @@ #define STM32F4DISC #define MICROPY_HW_BOARD_NAME "F4DISC" +#define MICROPY_HW_MCU_NAME "STM32F407" #define MICROPY_HW_HAS_SWITCH (1) #define MICROPY_HW_HAS_SDCARD (0) diff --git a/stmhal/main.c b/stmhal/main.c index 4e50daba41..9f48fbfd65 100644 --- a/stmhal/main.c +++ b/stmhal/main.c @@ -187,7 +187,6 @@ static const char fresh_readme_txt[] = int main(void) { // TODO disable JTAG - stack_ctrl_init(); // Stack limit should be less than real stack size, so we // had chance to recover from limit hit. stack_set_limit(&_ram_end - &_heap_end - 512); diff --git a/stmhal/pyexec.c b/stmhal/pyexec.c index 45928427e1..baf6ddfb34 100644 --- a/stmhal/pyexec.c +++ b/stmhal/pyexec.c @@ -185,7 +185,7 @@ int pyexec_friendly_repl(void) { #endif friendly_repl_reset: - stdout_tx_str("Micro Python " MICROPY_GIT_TAG " on " MICROPY_BUILD_DATE "; " MICROPY_HW_BOARD_NAME " with STM32F405RG\r\n"); + stdout_tx_str("Micro Python " MICROPY_GIT_TAG " on " MICROPY_BUILD_DATE "; " MICROPY_HW_BOARD_NAME " with " MICROPY_HW_MCU_NAME "\r\n"); stdout_tx_str("Type \"help()\" for more information.\r\n"); // to test ctrl-C diff --git a/tests/misc/recursive_data.py_ b/tests/misc/recursive_data.py_ new file mode 100644 index 0000000000..6a52a3c0e8 --- /dev/null +++ b/tests/misc/recursive_data.py_ @@ -0,0 +1,9 @@ +# This tests that printing recursive data structure doesn't lead to segfault. +# Unfortunately, print() so far doesn't support "file "kwarg, so variable-len +# output of this test cannot be redirected, and this test cannot be validated. +l = [1, 2, 3, None] +l[-1] = l +try: + print(l) +except RuntimeError: + print("RuntimeError") diff --git a/unix/input.c b/unix/input.c index 4d856f2ff8..19ca649c9f 100644 --- a/unix/input.c +++ b/unix/input.c @@ -41,8 +41,6 @@ #include <readline/history.h> #endif -#define CTRL_D '\x04' - char *prompt(char *p) { #if MICROPY_USE_READLINE char *line = readline(p); diff --git a/unix/main.c b/unix/main.c index a08661339c..23615aa988 100644 --- a/unix/main.c +++ b/unix/main.c @@ -265,7 +265,6 @@ void pre_process_options(int argc, char **argv) { #endif int main(int argc, char **argv) { - stack_ctrl_init(); stack_set_limit(32768); pre_process_options(argc, argv); |