summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
Diffstat (limited to 'py')
-rw-r--r--py/objnamedtuple.c6
-rw-r--r--py/objnamedtuple.h7
-rw-r--r--py/objtuple.h10
3 files changed, 20 insertions, 3 deletions
diff --git a/py/objnamedtuple.c b/py/objnamedtuple.c
index 19fd3c5db..f0134d9be 100644
--- a/py/objnamedtuple.c
+++ b/py/objnamedtuple.c
@@ -125,7 +125,11 @@ mp_obj_t namedtuple_make_new(const mp_obj_type_t *type_in, size_t n_args, size_t
return MP_OBJ_FROM_PTR(tuple);
}
-const mp_rom_obj_tuple_t namedtuple_base_tuple = {{&mp_type_tuple}, 1, {MP_ROM_PTR(&mp_type_tuple)}};
+const mp_rom_obj_tuple1_t namedtuple_base_tuple = {
+ .base = {&mp_type_tuple},
+ .len = 1u,
+ .items = {MP_OBJ_FROM_PTR(&mp_type_tuple)}
+};
STATIC mp_obj_t mp_obj_new_namedtuple_type(qstr name, mp_uint_t n_fields, mp_obj_t *fields) {
mp_obj_namedtuple_type_t *o = m_new_obj_var(mp_obj_namedtuple_type_t, qstr, n_fields);
diff --git a/py/objnamedtuple.h b/py/objnamedtuple.h
index f6621642a..89bc16311 100644
--- a/py/objnamedtuple.h
+++ b/py/objnamedtuple.h
@@ -25,6 +25,9 @@
* THE SOFTWARE.
*/
+#ifndef __MICROPY_INCLUDED_PY_OBJNAMEDTUPLE_H__
+#define __MICROPY_INCLUDED_PY_OBJNAMEDTUPLE_H__
+
#include <string.h>
#include "py/nlr.h"
@@ -50,6 +53,8 @@ void namedtuple_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest);
mp_obj_t namedtuple_make_new(const mp_obj_type_t *type_in, size_t n_args, size_t n_kw, const mp_obj_t *args);
-const mp_rom_obj_tuple_t namedtuple_base_tuple;
+const mp_rom_obj_tuple1_t namedtuple_base_tuple;
#endif // MICROPY_PY_COLLECTIONS
+
+#endif // __MICROPY_INCLUDED_PY_OBJNAMEDTUPLE_H__
diff --git a/py/objtuple.h b/py/objtuple.h
index ebfc5c406..024f38a0d 100644
--- a/py/objtuple.h
+++ b/py/objtuple.h
@@ -36,10 +36,18 @@ typedef struct _mp_obj_tuple_t {
typedef struct _mp_rom_obj_tuple_t {
mp_obj_base_t base;
- mp_uint_t len;
+ uint32_t len;
mp_rom_obj_t items[];
} mp_rom_obj_tuple_t;
+// This is identical to the type above except it makes it clear that there is
+// only one item. This makes lto happy with the namedtuple_base_tuple.
+typedef struct _mp_rom_obj_tuple1_t {
+ mp_obj_base_t base;
+ uint32_t len;
+ mp_rom_obj_t items[1];
+} mp_rom_obj_tuple1_t;
+
void mp_obj_tuple_print(const mp_print_t *print, mp_obj_t o_in, mp_print_kind_t kind);
mp_obj_t mp_obj_tuple_unary_op(mp_uint_t op, mp_obj_t self_in);
mp_obj_t mp_obj_tuple_binary_op(mp_uint_t op, mp_obj_t lhs, mp_obj_t rhs);