diff --git a/cc3200/application.mk b/cc3200/application.mk index 2eef3c8c32..b862212a54 100644 --- a/cc3200/application.mk +++ b/cc3200/application.mk @@ -152,6 +152,7 @@ APP_LIB_SRC_C = $(addprefix lib/,\ netutils/netutils.c \ timeutils/timeutils.c \ utils/pyexec.c \ + utils/pyhelp.c \ utils/printf.c \ ) diff --git a/cc3200/misc/help.c b/cc3200/misc/help.c index 9bbd711a88..4601818bda 100644 --- a/cc3200/misc/help.c +++ b/cc3200/misc/help.c @@ -27,21 +27,12 @@ #include -#include "py/mpconfig.h" -#include "py/obj.h" +#include "lib/utils/pyhelp.h" STATIC const char help_text[] = "Welcome to MicroPython!\n" "For online help please visit http://micropython.org/help/.\n" "For further help on a specific object, type help(obj)\n"; -STATIC void pyb_help_print_info_about_object(mp_obj_t name_o, mp_obj_t value) { - printf(" "); - mp_obj_print(name_o, PRINT_STR); - printf(" -- "); - mp_obj_print(value, PRINT_STR); - printf("\n"); -} - STATIC mp_obj_t pyb_help(uint n_args, const mp_obj_t *args) { if (n_args == 0) { // print a general help message @@ -49,31 +40,7 @@ STATIC mp_obj_t pyb_help(uint n_args, const mp_obj_t *args) { } else { // try to print something sensible about the given object - printf("object "); - mp_obj_print(args[0], PRINT_STR); - printf(" is of type %s\n", mp_obj_get_type_str(args[0])); - - mp_map_t *map = NULL; - if (MP_OBJ_IS_TYPE(args[0], &mp_type_module)) { - map = mp_obj_dict_get_map(mp_obj_module_get_globals(args[0])); - } else { - mp_obj_type_t *type; - if (MP_OBJ_IS_TYPE(args[0], &mp_type_type)) { - type = args[0]; - } else { - type = mp_obj_get_type(args[0]); - } - if (type->locals_dict != MP_OBJ_NULL && MP_OBJ_IS_TYPE(type->locals_dict, &mp_type_dict)) { - map = mp_obj_dict_get_map(type->locals_dict); - } - } - if (map != NULL) { - for (uint i = 0; i < map->alloc; i++) { - if (map->table[i].key != MP_OBJ_NULL) { - pyb_help_print_info_about_object(map->table[i].key, map->table[i].value); - } - } - } + pyhelp_print_obj(args[0]); } return mp_const_none; } diff --git a/stmhal/Makefile b/stmhal/Makefile index 1b4b78e43e..fffedd326c 100644 --- a/stmhal/Makefile +++ b/stmhal/Makefile @@ -110,6 +110,7 @@ SRC_LIB = $(addprefix lib/,\ netutils/netutils.c \ timeutils/timeutils.c \ utils/pyexec.c \ + utils/pyhelp.c \ utils/printf.c \ ) diff --git a/stmhal/help.c b/stmhal/help.c index 32837972f0..21e81ebc0e 100644 --- a/stmhal/help.c +++ b/stmhal/help.c @@ -26,8 +26,7 @@ #include -#include "py/nlr.h" -#include "py/obj.h" +#include "lib/utils/pyhelp.h" STATIC const char *help_text = "Welcome to MicroPython!\n" @@ -72,14 +71,6 @@ STATIC const char *help_text = "For further help on a specific object, type help(obj)\n" ; -STATIC void pyb_help_print_info_about_object(mp_obj_t name_o, mp_obj_t value) { - printf(" "); - mp_obj_print(name_o, PRINT_STR); - printf(" -- "); - mp_obj_print(value, PRINT_STR); - printf("\n"); -} - STATIC mp_obj_t pyb_help(uint n_args, const mp_obj_t *args) { if (n_args == 0) { // print a general help message @@ -87,32 +78,7 @@ STATIC mp_obj_t pyb_help(uint n_args, const mp_obj_t *args) { } else { // try to print something sensible about the given object - - printf("object "); - mp_obj_print(args[0], PRINT_STR); - printf(" is of type %s\n", mp_obj_get_type_str(args[0])); - - mp_map_t *map = NULL; - if (MP_OBJ_IS_TYPE(args[0], &mp_type_module)) { - map = mp_obj_dict_get_map(mp_obj_module_get_globals(args[0])); - } else { - mp_obj_type_t *type; - if (MP_OBJ_IS_TYPE(args[0], &mp_type_type)) { - type = args[0]; - } else { - type = mp_obj_get_type(args[0]); - } - if (type->locals_dict != MP_OBJ_NULL && MP_OBJ_IS_TYPE(type->locals_dict, &mp_type_dict)) { - map = mp_obj_dict_get_map(type->locals_dict); - } - } - if (map != NULL) { - for (uint i = 0; i < map->alloc; i++) { - if (map->table[i].key != MP_OBJ_NULL) { - pyb_help_print_info_about_object(map->table[i].key, map->table[i].value); - } - } - } + pyhelp_print_obj(args[0]); } return mp_const_none; diff --git a/teensy/Makefile b/teensy/Makefile index de7036571f..7b34ba90e2 100644 --- a/teensy/Makefile +++ b/teensy/Makefile @@ -109,6 +109,7 @@ LIB_SRC_C = $(addprefix lib/,\ libc/string0.c \ mp-readline/readline.c \ utils/pyexec.c \ + utils/pyhelp.c \ utils/printf.c \ ) diff --git a/teensy/help.c b/teensy/help.c index d8fe3a1d9c..147347fc22 100644 --- a/teensy/help.c +++ b/teensy/help.c @@ -26,7 +26,7 @@ #include -#include "py/obj.h" +#include "lib/utils/pyhelp.h" STATIC const char *help_text = "Welcome to MicroPython!\n" @@ -70,14 +70,6 @@ STATIC const char *help_text = "For further help on a specific object, type help(obj)\n" ; -STATIC void pyb_help_print_info_about_object(mp_obj_t name_o, mp_obj_t value) { - printf(" "); - mp_obj_print(name_o, PRINT_STR); - printf(" -- "); - mp_obj_print(value, PRINT_STR); - printf("\n"); -} - STATIC mp_obj_t pyb_help(uint n_args, const mp_obj_t *args) { if (n_args == 0) { // print a general help message @@ -85,32 +77,7 @@ STATIC mp_obj_t pyb_help(uint n_args, const mp_obj_t *args) { } else { // try to print something sensible about the given object - - printf("object "); - mp_obj_print(args[0], PRINT_STR); - printf(" is of type %s\n", mp_obj_get_type_str(args[0])); - - mp_map_t *map = NULL; - if (MP_OBJ_IS_TYPE(args[0], &mp_type_module)) { - map = mp_obj_dict_get_map(mp_obj_module_get_globals(args[0])); - } else { - mp_obj_type_t *type; - if (MP_OBJ_IS_TYPE(args[0], &mp_type_type)) { - type = args[0]; - } else { - type = mp_obj_get_type(args[0]); - } - if (type->locals_dict != MP_OBJ_NULL && MP_OBJ_IS_TYPE(type->locals_dict, &mp_type_dict)) { - map = mp_obj_dict_get_map(type->locals_dict); - } - } - if (map != NULL) { - for (uint i = 0; i < map->alloc; i++) { - if (map->table[i].key != MP_OBJ_NULL) { - pyb_help_print_info_about_object(map->table[i].key, map->table[i].value); - } - } - } + pyhelp_print_obj(args[0]); } return mp_const_none;