Skip to content

Commit ff319df

Browse files
committed
py: Explicitly set uninitialised struct member to false.
Uninitialised struct members get a default value of 0/false, so this is not strictly needed. But it actually decreases code size because when all members are initialised the compiler doesn't need to insert a call to memset to clear everything. In other words, setting 1 extra member to 0 uses less code than calling memset. ROM savings in bytes: 32-bit unix: 100; bare-arm: 44; stmhal: 52.
1 parent 0344fa1 commit ff319df

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

py/objtype.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ STATIC void instance_print(void (*print)(void *env, const char *fmt, ...), void
204204
.attr = meth,
205205
.meth_offset = offsetof(mp_obj_type_t, print),
206206
.dest = member,
207+
.is_type = false,
207208
};
208209
mp_obj_class_lookup(&lookup, self->base.type);
209210
if (member[0] == MP_OBJ_NULL && kind == PRINT_STR) {
@@ -261,6 +262,7 @@ mp_obj_t instance_make_new(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw, c
261262
.attr = MP_QSTR___new__,
262263
.meth_offset = offsetof(mp_obj_type_t, make_new),
263264
.dest = init_fn,
265+
.is_type = false,
264266
};
265267
mp_obj_class_lookup(&lookup, self);
266268

@@ -341,6 +343,7 @@ STATIC mp_obj_t instance_unary_op(mp_uint_t op, mp_obj_t self_in) {
341343
.attr = op_name,
342344
.meth_offset = offsetof(mp_obj_type_t, unary_op),
343345
.dest = member,
346+
.is_type = false,
344347
};
345348
mp_obj_class_lookup(&lookup, self->base.type);
346349
if (member[0] == MP_OBJ_SENTINEL) {
@@ -437,6 +440,7 @@ STATIC mp_obj_t instance_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_i
437440
.attr = op_name,
438441
.meth_offset = offsetof(mp_obj_type_t, binary_op),
439442
.dest = dest,
443+
.is_type = false,
440444
};
441445
mp_obj_class_lookup(&lookup, lhs->base.type);
442446
if (dest[0] == MP_OBJ_SENTINEL) {
@@ -467,6 +471,7 @@ STATIC void instance_load_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
467471
.attr = attr,
468472
.meth_offset = 0,
469473
.dest = dest,
474+
.is_type = false,
470475
};
471476
mp_obj_class_lookup(&lookup, self->base.type);
472477
mp_obj_t member = dest[0];
@@ -514,6 +519,7 @@ STATIC bool instance_store_attr(mp_obj_t self_in, qstr attr, mp_obj_t value) {
514519
.attr = attr,
515520
.meth_offset = 0,
516521
.dest = member,
522+
.is_type = false,
517523
};
518524
mp_obj_class_lookup(&lookup, self->base.type);
519525
if (member[0] != MP_OBJ_NULL && MP_OBJ_IS_TYPE(member[0], &mp_type_property)) {
@@ -549,6 +555,7 @@ STATIC mp_obj_t instance_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value
549555
.obj = self,
550556
.meth_offset = offsetof(mp_obj_type_t, subscr),
551557
.dest = member,
558+
.is_type = false,
552559
};
553560
uint meth_args;
554561
if (value == MP_OBJ_NULL) {
@@ -591,6 +598,7 @@ bool mp_obj_instance_is_callable(mp_obj_t self_in) {
591598
.attr = MP_QSTR___call__,
592599
.meth_offset = offsetof(mp_obj_type_t, call),
593600
.dest = member,
601+
.is_type = false,
594602
};
595603
mp_obj_class_lookup(&lookup, self->base.type);
596604
return member[0] != MP_OBJ_NULL;
@@ -604,6 +612,7 @@ mp_obj_t mp_obj_instance_call(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw
604612
.attr = MP_QSTR___call__,
605613
.meth_offset = offsetof(mp_obj_type_t, call),
606614
.dest = member,
615+
.is_type = false,
607616
};
608617
mp_obj_class_lookup(&lookup, self->base.type);
609618
if (member[0] == MP_OBJ_NULL) {
@@ -624,6 +633,7 @@ STATIC mp_obj_t instance_getiter(mp_obj_t self_in) {
624633
.attr = MP_QSTR___iter__,
625634
.meth_offset = offsetof(mp_obj_type_t, getiter),
626635
.dest = member,
636+
.is_type = false,
627637
};
628638
mp_obj_class_lookup(&lookup, self->base.type);
629639
if (member[0] == MP_OBJ_NULL) {
@@ -863,6 +873,7 @@ STATIC void super_load_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
863873
.attr = attr,
864874
.meth_offset = 0,
865875
.dest = dest,
876+
.is_type = false,
866877
};
867878
for (uint i = 0; i < len; i++) {
868879
assert(MP_OBJ_IS_TYPE(items[i], &mp_type_type));

0 commit comments

Comments
 (0)