From 18bef25a0cd99029ebfaa92a29187c56ea96a835 Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Sun, 13 Apr 2014 06:17:29 +0300
Subject: [PATCH] objlist: Add support for statically allocated lists.

Similar to similar support for lists.
---
 py/obj.h     |  2 ++
 py/objlist.c | 16 +++++++---------
 py/objlist.h |  6 ++++++
 3 files changed, 15 insertions(+), 9 deletions(-)
 create mode 100644 py/objlist.h

diff --git a/py/obj.h b/py/obj.h
index 356e722dc..6e5796668 100644
--- a/py/obj.h
+++ b/py/obj.h
@@ -454,6 +454,8 @@ machine_int_t mp_obj_tuple_hash(mp_obj_t self_in);
 mp_obj_t mp_obj_tuple_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_obj_t *args);
 
 // list
+struct _mp_obj_list_t;
+void mp_obj_list_init(struct _mp_obj_list_t *o, uint n);
 mp_obj_t mp_obj_list_append(mp_obj_t self_in, mp_obj_t arg);
 void mp_obj_list_get(mp_obj_t self_in, uint *len, mp_obj_t **items);
 void mp_obj_list_set_len(mp_obj_t self_in, uint len);
diff --git a/py/objlist.c b/py/objlist.c
index 531e4b85b..538cba71f 100644
--- a/py/objlist.c
+++ b/py/objlist.c
@@ -8,13 +8,7 @@
 #include "obj.h"
 #include "runtime0.h"
 #include "runtime.h"
-
-typedef struct _mp_obj_list_t {
-    mp_obj_base_t base;
-    machine_uint_t alloc;
-    machine_uint_t len;
-    mp_obj_t *items;
-} mp_obj_list_t;
+#include "objlist.h"
 
 STATIC mp_obj_t mp_obj_new_list_iterator(mp_obj_list_t *list, int cur);
 STATIC mp_obj_list_t *list_new(uint n);
@@ -363,12 +357,16 @@ const mp_obj_type_t mp_type_list = {
     .locals_dict = (mp_obj_t)&list_locals_dict,
 };
 
-STATIC mp_obj_list_t *list_new(uint n) {
-    mp_obj_list_t *o = m_new_obj(mp_obj_list_t);
+void mp_obj_list_init(mp_obj_list_t *o, uint n) {
     o->base.type = &mp_type_list;
     o->alloc = n < LIST_MIN_ALLOC ? LIST_MIN_ALLOC : n;
     o->len = n;
     o->items = m_new(mp_obj_t, o->alloc);
+}
+
+STATIC mp_obj_list_t *list_new(uint n) {
+    mp_obj_list_t *o = m_new_obj(mp_obj_list_t);
+    mp_obj_list_init(o, n);
     return o;
 }
 
diff --git a/py/objlist.h b/py/objlist.h
new file mode 100644
index 000000000..cc8d7de26
--- /dev/null
+++ b/py/objlist.h
@@ -0,0 +1,6 @@
+typedef struct _mp_obj_list_t {
+    mp_obj_base_t base;
+    machine_uint_t alloc;
+    machine_uint_t len;
+    mp_obj_t *items;
+} mp_obj_list_t;
-- 
GitLab