From 104aa26271d38fc6204fcee6d65044716e4dae31 Mon Sep 17 00:00:00 2001
From: Colin Hogben <colin@infinnovation.co.uk>
Date: Thu, 21 Apr 2016 20:17:50 +0100
Subject: [PATCH] cc3200, stmhal, teensy: Use pyhelp_print_obj function.

Update the help() implementations in the cc3200, stmhal and teensy
ports to use the pyhelp_print_obj function.
---
 cc3200/application.mk |  1 +
 cc3200/misc/help.c    | 37 ++-----------------------------------
 stmhal/Makefile       |  1 +
 stmhal/help.c         | 38 ++------------------------------------
 teensy/Makefile       |  1 +
 teensy/help.c         | 37 ++-----------------------------------
 6 files changed, 9 insertions(+), 106 deletions(-)

diff --git a/cc3200/application.mk b/cc3200/application.mk
index 2eef3c8c3..b862212a5 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 9bbd711a8..4601818bd 100644
--- a/cc3200/misc/help.c
+++ b/cc3200/misc/help.c
@@ -27,21 +27,12 @@
 
 #include <stdio.h>
 
-#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 1b4b78e43..fffedd326 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 32837972f..21e81ebc0 100644
--- a/stmhal/help.c
+++ b/stmhal/help.c
@@ -26,8 +26,7 @@
 
 #include <stdio.h>
 
-#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 de7036571..7b34ba90e 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 d8fe3a1d9..147347fc2 100644
--- a/teensy/help.c
+++ b/teensy/help.c
@@ -26,7 +26,7 @@
 
 #include <stdio.h>
 
-#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;
-- 
GitLab