summaryrefslogtreecommitdiffstatshomepage
path: root/py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-06-28 10:27:15 +0100
committerDamien George <damien.p.george@gmail.com>2014-06-28 10:27:15 +0100
commitb3a50f0f3e287d63fce274e29641a3bc57405d5d (patch)
tree1db867d2e5c40d9cd530424c022768f6f282251f /py
parented07d035d52764b3b02bfa8488f2e0445c28ea2f (diff)
parent8993fb6cf0677ce980ab56cbad326e4e6bc47811 (diff)
downloadmicropython-b3a50f0f3e287d63fce274e29641a3bc57405d5d.tar.gz
micropython-b3a50f0f3e287d63fce274e29641a3bc57405d5d.zip
Merge branch 'master' into unicode
Conflicts: py/mpconfig.h
Diffstat (limited to 'py')
-rw-r--r--py/builtintables.c4
-rw-r--r--py/modarray.c4
-rw-r--r--py/mpconfig.h11
-rw-r--r--py/obj.c3
-rw-r--r--py/objarray.c4
-rw-r--r--py/runtime.c3
6 files changed, 29 insertions, 0 deletions
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)
diff --git a/py/obj.c b/py/obj.c
index d951abbda8..12d7898428 100644
--- a/py/obj.c
+++ b/py/obj.c
@@ -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;