Skip to content

Commit a52cd5b

Browse files
jimmodpgeorge
authored andcommitted
py/obj: Add accessors for type slots and use everywhere.
This is a no-op, but sets the stage for changing the mp_obj_type_t representation. Signed-off-by: Jim Mussared <[email protected]>
1 parent e8355eb commit a52cd5b

27 files changed

+207
-188
lines changed

drivers/ninaw10/nina_wifi_bsp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ int nina_bsp_spi_slave_deselect(void) {
137137

138138
int nina_bsp_spi_transfer(const uint8_t *tx_buf, uint8_t *rx_buf, uint32_t size) {
139139
mp_obj_t mp_wifi_spi = MP_STATE_PORT(mp_wifi_spi);
140-
((mp_machine_spi_p_t *)machine_spi_type.protocol)->transfer(mp_wifi_spi, size, tx_buf, rx_buf);
140+
((mp_machine_spi_p_t *)MP_OBJ_TYPE_GET_SLOT(&machine_spi_type, protocol))->transfer(mp_wifi_spi, size, tx_buf, rx_buf);
141141
#if NINA_DEBUG
142142
for (int i = 0; i < size; i++) {
143143
if (tx_buf) {

examples/natmod/btree/btree_c.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ int *__errno (void)
5151

5252
ssize_t mp_stream_posix_write(void *stream, const void *buf, size_t len) {
5353
mp_obj_base_t* o = stream;
54-
const mp_stream_p_t *stream_p = o->type->protocol;
54+
const mp_stream_p_t *stream_p = MP_OBJ_TYPE_GET_SLOT(o->type, protocol);
5555
mp_uint_t out_sz = stream_p->write(MP_OBJ_FROM_PTR(stream), buf, len, &native_errno);
5656
if (out_sz == MP_STREAM_ERROR) {
5757
return -1;
@@ -62,7 +62,7 @@ ssize_t mp_stream_posix_write(void *stream, const void *buf, size_t len) {
6262

6363
ssize_t mp_stream_posix_read(void *stream, void *buf, size_t len) {
6464
mp_obj_base_t* o = stream;
65-
const mp_stream_p_t *stream_p = o->type->protocol;
65+
const mp_stream_p_t *stream_p = MP_OBJ_TYPE_GET_SLOT(o->type, protocol);
6666
mp_uint_t out_sz = stream_p->read(MP_OBJ_FROM_PTR(stream), buf, len, &native_errno);
6767
if (out_sz == MP_STREAM_ERROR) {
6868
return -1;
@@ -73,7 +73,7 @@ ssize_t mp_stream_posix_read(void *stream, void *buf, size_t len) {
7373

7474
off_t mp_stream_posix_lseek(void *stream, off_t offset, int whence) {
7575
const mp_obj_base_t* o = stream;
76-
const mp_stream_p_t *stream_p = o->type->protocol;
76+
const mp_stream_p_t *stream_p = MP_OBJ_TYPE_GET_SLOT(o->type, protocol);
7777
struct mp_stream_seek_t seek_s;
7878
seek_s.offset = offset;
7979
seek_s.whence = whence;
@@ -86,7 +86,7 @@ off_t mp_stream_posix_lseek(void *stream, off_t offset, int whence) {
8686

8787
int mp_stream_posix_fsync(void *stream) {
8888
mp_obj_base_t* o = stream;
89-
const mp_stream_p_t *stream_p = o->type->protocol;
89+
const mp_stream_p_t *stream_p = MP_OBJ_TYPE_GET_SLOT(o->type, protocol);
9090
mp_uint_t res = stream_p->ioctl(MP_OBJ_FROM_PTR(stream), MP_STREAM_FLUSH, 0, &native_errno);
9191
if (res == MP_STREAM_ERROR) {
9292
return -1;
@@ -124,11 +124,11 @@ mp_obj_t mpy_init(mp_obj_fun_bc_t *self, size_t n_args, size_t n_kw, mp_obj_t *a
124124

125125
btree_type.base.type = (void*)&mp_fun_table.type_type;
126126
btree_type.name = MP_QSTR_btree;
127-
btree_type.print = btree_print;
128-
btree_type.getiter = btree_getiter;
129-
btree_type.iternext = btree_iternext;
130-
btree_type.binary_op = btree_binary_op;
131-
btree_type.subscr = btree_subscr;
127+
MP_OBJ_TYPE_SET_SLOT(&btree_type, print, btree_print, 0);
128+
MP_OBJ_TYPE_SET_SLOT(&btree_type, getiter, btree_getiter, 1);
129+
MP_OBJ_TYPE_SET_SLOT(&btree_type, iternext, btree_iternext, 2);
130+
MP_OBJ_TYPE_SET_SLOT(&btree_type, binary_op, btree_binary_op, 3);
131+
MP_OBJ_TYPE_SET_SLOT(&btree_type, subscr, btree_subscr, 4);
132132
btree_locals_dict_table[0] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_close), MP_OBJ_FROM_PTR(&btree_close_obj) };
133133
btree_locals_dict_table[1] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_flush), MP_OBJ_FROM_PTR(&btree_flush_obj) };
134134
btree_locals_dict_table[2] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_get), MP_OBJ_FROM_PTR(&btree_get_obj) };
@@ -137,7 +137,7 @@ mp_obj_t mpy_init(mp_obj_fun_bc_t *self, size_t n_args, size_t n_kw, mp_obj_t *a
137137
btree_locals_dict_table[5] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_keys), MP_OBJ_FROM_PTR(&btree_keys_obj) };
138138
btree_locals_dict_table[6] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_values), MP_OBJ_FROM_PTR(&btree_values_obj) };
139139
btree_locals_dict_table[7] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_items), MP_OBJ_FROM_PTR(&btree_items_obj) };
140-
btree_type.locals_dict = (void*)&btree_locals_dict;
140+
MP_OBJ_TYPE_SET_SLOT(&btree_type, locals_dict, (void*)&btree_locals_dict, 5);
141141

142142
mp_store_global(MP_QSTR__open, MP_OBJ_FROM_PTR(&btree_open_obj));
143143
mp_store_global(MP_QSTR_INCL, MP_OBJ_NEW_SMALL_INT(FLAG_END_KEY_INCL));

examples/natmod/framebuf/framebuf.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ mp_obj_t mpy_init(mp_obj_fun_bc_t *self, size_t n_args, size_t n_kw, mp_obj_t *a
2121
mp_type_framebuf.base.type = (void*)&mp_type_type;
2222
mp_type_framebuf.name = MP_QSTR_FrameBuffer;
2323
mp_type_framebuf.make_new = framebuf_make_new;
24-
mp_type_framebuf.buffer = framebuf_get_buffer;
24+
MP_OBJ_TYPE_SET_SLOT(&mp_type_framebuf, buffer, framebuf_get_buffer, 0);
2525
framebuf_locals_dict_table[0] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_fill), MP_OBJ_FROM_PTR(&framebuf_fill_obj) };
2626
framebuf_locals_dict_table[1] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_fill_rect), MP_OBJ_FROM_PTR(&framebuf_fill_rect_obj) };
2727
framebuf_locals_dict_table[2] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_pixel), MP_OBJ_FROM_PTR(&framebuf_pixel_obj) };
@@ -33,7 +33,7 @@ mp_obj_t mpy_init(mp_obj_fun_bc_t *self, size_t n_args, size_t n_kw, mp_obj_t *a
3333
framebuf_locals_dict_table[8] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_blit), MP_OBJ_FROM_PTR(&framebuf_blit_obj) };
3434
framebuf_locals_dict_table[9] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_scroll), MP_OBJ_FROM_PTR(&framebuf_scroll_obj) };
3535
framebuf_locals_dict_table[10] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_text), MP_OBJ_FROM_PTR(&framebuf_text_obj) };
36-
mp_type_framebuf.locals_dict = (void*)&framebuf_locals_dict;
36+
MP_OBJ_TYPE_SET_SLOT(&mp_type_framebuf, locals_dict, (void*)&framebuf_locals_dict, 1);
3737

3838
mp_store_global(MP_QSTR_FrameBuffer, MP_OBJ_FROM_PTR(&mp_type_framebuf));
3939
mp_store_global(MP_QSTR_FrameBuffer1, MP_OBJ_FROM_PTR(&legacy_framebuffer1_obj));

examples/natmod/ure/ure.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,21 +54,21 @@ mp_obj_t mpy_init(mp_obj_fun_bc_t *self, size_t n_args, size_t n_kw, mp_obj_t *a
5454

5555
match_type.base.type = (void*)&mp_fun_table.type_type;
5656
match_type.name = MP_QSTR_match;
57-
match_type.print = match_print;
57+
MP_OBJ_TYPE_SET_SLOT(&match_type, print, match_print, 0);
5858
match_locals_dict_table[0] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_group), MP_OBJ_FROM_PTR(&match_group_obj) };
5959
match_locals_dict_table[1] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_groups), MP_OBJ_FROM_PTR(&match_groups_obj) };
6060
match_locals_dict_table[2] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_span), MP_OBJ_FROM_PTR(&match_span_obj) };
6161
match_locals_dict_table[3] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_start), MP_OBJ_FROM_PTR(&match_start_obj) };
6262
match_locals_dict_table[4] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_end), MP_OBJ_FROM_PTR(&match_end_obj) };
63-
match_type.locals_dict = (void*)&match_locals_dict;
63+
MP_OBJ_TYPE_SET_SLOT(&match_type, locals_dict, (void*)&match_locals_dict, 1);
6464

6565
re_type.base.type = (void*)&mp_fun_table.type_type;
6666
re_type.name = MP_QSTR_ure;
67-
re_type.print = re_print;
67+
MP_OBJ_TYPE_SET_SLOT(&re_type, print, re_print, 0);
6868
re_locals_dict_table[0] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_match), MP_OBJ_FROM_PTR(&re_match_obj) };
6969
re_locals_dict_table[1] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_search), MP_OBJ_FROM_PTR(&re_search_obj) };
7070
re_locals_dict_table[2] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_split), MP_OBJ_FROM_PTR(&re_split_obj) };
71-
re_type.locals_dict = (void*)&re_locals_dict;
71+
MP_OBJ_TYPE_SET_SLOT(&re_type, locals_dict, (void*)&re_locals_dict, 1);
7272

7373
mp_store_global(MP_QSTR_compile, MP_OBJ_FROM_PTR(&mod_re_compile_obj));
7474
mp_store_global(MP_QSTR_match, MP_OBJ_FROM_PTR(&re_match_obj));

examples/natmod/uzlib/uzlib.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ mp_obj_t mpy_init(mp_obj_fun_bc_t *self, size_t n_args, size_t n_kw, mp_obj_t *a
2020

2121
decompio_type.base.type = mp_fun_table.type_type;
2222
decompio_type.name = MP_QSTR_DecompIO;
23-
decompio_type.make_new = decompio_make_new;
24-
decompio_type.protocol = &decompio_stream_p;
23+
decompio_type.make_new = &decompio_make_new;
24+
MP_OBJ_TYPE_SET_SLOT(&decompio_type, protocol, &decompio_stream_p, 0);
2525
decompio_locals_dict_table[0] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_read), MP_OBJ_FROM_PTR(&mp_stream_read_obj) };
2626
decompio_locals_dict_table[1] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_readinto), MP_OBJ_FROM_PTR(&mp_stream_readinto_obj) };
2727
decompio_locals_dict_table[2] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_readline), MP_OBJ_FROM_PTR(&mp_stream_unbuffered_readline_obj) };
28-
decompio_type.locals_dict = (void*)&decompio_locals_dict;
28+
MP_OBJ_TYPE_SET_SLOT(&decompio_type, locals_dict, (void*)&decompio_locals_dict, 1);
2929

3030
mp_store_global(MP_QSTR___name__, MP_OBJ_NEW_QSTR(MP_QSTR_uzlib));
3131
mp_store_global(MP_QSTR_decompress, MP_OBJ_FROM_PTR(&mod_uzlib_decompress_obj));

extmod/machine_i2c.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ int mp_machine_i2c_transfer_adaptor(mp_obj_base_t *self, uint16_t addr, size_t n
273273
}
274274
}
275275

276-
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)self->type->protocol;
276+
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)MP_OBJ_TYPE_GET_SLOT(self->type, protocol);
277277
int ret = i2c_p->transfer_single(self, addr, len, buf, flags);
278278

279279
if (n > 1) {
@@ -292,14 +292,14 @@ int mp_machine_i2c_transfer_adaptor(mp_obj_base_t *self, uint16_t addr, size_t n
292292
}
293293

294294
STATIC int mp_machine_i2c_readfrom(mp_obj_base_t *self, uint16_t addr, uint8_t *dest, size_t len, bool stop) {
295-
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)self->type->protocol;
295+
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)MP_OBJ_TYPE_GET_SLOT(self->type, protocol);
296296
mp_machine_i2c_buf_t buf = {.len = len, .buf = dest};
297297
unsigned int flags = MP_MACHINE_I2C_FLAG_READ | (stop ? MP_MACHINE_I2C_FLAG_STOP : 0);
298298
return i2c_p->transfer(self, addr, 1, &buf, flags);
299299
}
300300

301301
STATIC int mp_machine_i2c_writeto(mp_obj_base_t *self, uint16_t addr, const uint8_t *src, size_t len, bool stop) {
302-
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)self->type->protocol;
302+
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)MP_OBJ_TYPE_GET_SLOT(self->type, protocol);
303303
mp_machine_i2c_buf_t buf = {.len = len, .buf = (uint8_t *)src};
304304
unsigned int flags = stop ? MP_MACHINE_I2C_FLAG_STOP : 0;
305305
return i2c_p->transfer(self, addr, 1, &buf, flags);
@@ -310,7 +310,7 @@ STATIC int mp_machine_i2c_writeto(mp_obj_base_t *self, uint16_t addr, const uint
310310

311311
STATIC mp_obj_t machine_i2c_init(size_t n_args, const mp_obj_t *args, mp_map_t *kw_args) {
312312
mp_obj_base_t *self = (mp_obj_base_t *)MP_OBJ_TO_PTR(args[0]);
313-
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)self->type->protocol;
313+
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)MP_OBJ_TYPE_GET_SLOT(self->type, protocol);
314314
if (i2c_p->init == NULL) {
315315
mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("I2C operation not supported"));
316316
}
@@ -338,7 +338,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(machine_i2c_scan_obj, machine_i2c_scan);
338338

339339
STATIC mp_obj_t machine_i2c_start(mp_obj_t self_in) {
340340
mp_obj_base_t *self = (mp_obj_base_t *)MP_OBJ_TO_PTR(self_in);
341-
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)self->type->protocol;
341+
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)MP_OBJ_TYPE_GET_SLOT(self->type, protocol);
342342
if (i2c_p->start == NULL) {
343343
mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("I2C operation not supported"));
344344
}
@@ -352,7 +352,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(machine_i2c_start_obj, machine_i2c_start);
352352

353353
STATIC mp_obj_t machine_i2c_stop(mp_obj_t self_in) {
354354
mp_obj_base_t *self = (mp_obj_base_t *)MP_OBJ_TO_PTR(self_in);
355-
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)self->type->protocol;
355+
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)MP_OBJ_TYPE_GET_SLOT(self->type, protocol);
356356
if (i2c_p->stop == NULL) {
357357
mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("I2C operation not supported"));
358358
}
@@ -366,7 +366,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(machine_i2c_stop_obj, machine_i2c_stop);
366366

367367
STATIC mp_obj_t machine_i2c_readinto(size_t n_args, const mp_obj_t *args) {
368368
mp_obj_base_t *self = (mp_obj_base_t *)MP_OBJ_TO_PTR(args[0]);
369-
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)self->type->protocol;
369+
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)MP_OBJ_TYPE_GET_SLOT(self->type, protocol);
370370
if (i2c_p->read == NULL) {
371371
mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("I2C operation not supported"));
372372
}
@@ -390,7 +390,7 @@ MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(machine_i2c_readinto_obj, 2, 3, machine_i2c_
390390

391391
STATIC mp_obj_t machine_i2c_write(mp_obj_t self_in, mp_obj_t buf_in) {
392392
mp_obj_base_t *self = (mp_obj_base_t *)MP_OBJ_TO_PTR(self_in);
393-
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)self->type->protocol;
393+
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)MP_OBJ_TYPE_GET_SLOT(self->type, protocol);
394394
if (i2c_p->write == NULL) {
395395
mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("I2C operation not supported"));
396396
}
@@ -486,7 +486,7 @@ STATIC mp_obj_t machine_i2c_writevto(size_t n_args, const mp_obj_t *args) {
486486
}
487487

488488
// Do the I2C transfer
489-
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)self->type->protocol;
489+
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)MP_OBJ_TYPE_GET_SLOT(self->type, protocol);
490490
int ret = i2c_p->transfer(self, addr, nbufs, bufs, stop ? MP_MACHINE_I2C_FLAG_STOP : 0);
491491
mp_local_free(bufs);
492492

@@ -519,7 +519,7 @@ STATIC int read_mem(mp_obj_t self_in, uint16_t addr, uint32_t memaddr, uint8_t a
519519

520520
#if MICROPY_PY_MACHINE_I2C_TRANSFER_WRITE1
521521
// The I2C transfer function may support the MP_MACHINE_I2C_FLAG_WRITE1 option
522-
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)self->type->protocol;
522+
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)MP_OBJ_TYPE_GET_SLOT(self->type, protocol);
523523
if (i2c_p->transfer_supports_write1) {
524524
// Create partial write and read buffers
525525
mp_machine_i2c_buf_t bufs[2] = {
@@ -556,7 +556,7 @@ STATIC int write_mem(mp_obj_t self_in, uint16_t addr, uint32_t memaddr, uint8_t
556556
};
557557

558558
// Do I2C transfer
559-
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)self->type->protocol;
559+
mp_machine_i2c_p_t *i2c_p = (mp_machine_i2c_p_t *)MP_OBJ_TYPE_GET_SLOT(self->type, protocol);
560560
return i2c_p->transfer(self, addr, 2, bufs, MP_MACHINE_I2C_FLAG_STOP);
561561
}
562562

extmod/machine_signal.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ STATIC mp_obj_t signal_make_new(const mp_obj_type_t *type, size_t n_args, size_t
5151

5252
if (n_args > 0 && mp_obj_is_obj(args[0])) {
5353
mp_obj_base_t *pin_base = (mp_obj_base_t *)MP_OBJ_TO_PTR(args[0]);
54-
pin_p = (mp_pin_p_t *)pin_base->type->protocol;
54+
pin_p = (mp_pin_p_t *)MP_OBJ_TYPE_GET_SLOT_OR_NULL(pin_base->type, protocol);
5555
}
5656

5757
if (pin_p == NULL) {

extmod/machine_spi.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,15 @@
4343

4444
STATIC mp_obj_t machine_spi_init(size_t n_args, const mp_obj_t *args, mp_map_t *kw_args) {
4545
mp_obj_base_t *s = (mp_obj_base_t *)MP_OBJ_TO_PTR(args[0]);
46-
mp_machine_spi_p_t *spi_p = (mp_machine_spi_p_t *)s->type->protocol;
46+
mp_machine_spi_p_t *spi_p = (mp_machine_spi_p_t *)MP_OBJ_TYPE_GET_SLOT(s->type, protocol);
4747
spi_p->init(s, n_args - 1, args + 1, kw_args);
4848
return mp_const_none;
4949
}
5050
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(machine_spi_init_obj, 1, machine_spi_init);
5151

5252
STATIC mp_obj_t machine_spi_deinit(mp_obj_t self) {
5353
mp_obj_base_t *s = (mp_obj_base_t *)MP_OBJ_TO_PTR(self);
54-
mp_machine_spi_p_t *spi_p = (mp_machine_spi_p_t *)s->type->protocol;
54+
mp_machine_spi_p_t *spi_p = (mp_machine_spi_p_t *)MP_OBJ_TYPE_GET_SLOT(s->type, protocol);
5555
if (spi_p->deinit != NULL) {
5656
spi_p->deinit(s);
5757
}
@@ -61,7 +61,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(machine_spi_deinit_obj, machine_spi_deinit);
6161

6262
STATIC void mp_machine_spi_transfer(mp_obj_t self, size_t len, const void *src, void *dest) {
6363
mp_obj_base_t *s = (mp_obj_base_t *)MP_OBJ_TO_PTR(self);
64-
mp_machine_spi_p_t *spi_p = (mp_machine_spi_p_t *)s->type->protocol;
64+
mp_machine_spi_p_t *spi_p = (mp_machine_spi_p_t *)MP_OBJ_TYPE_GET_SLOT(s->type, protocol);
6565
spi_p->transfer(s, len, src, dest);
6666
}
6767

extmod/network_wiznet5k.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -744,7 +744,7 @@ STATIC mp_obj_t wiznet5k_make_new(const mp_obj_type_t *type, size_t n_args, size
744744
wiznet5k_obj.base.type = (mp_obj_type_t *)&mod_network_nic_type_wiznet5k;
745745
wiznet5k_obj.cris_state = 0;
746746
wiznet5k_obj.spi = spi;
747-
wiznet5k_obj.spi_transfer = ((mp_machine_spi_p_t *)spi->type->protocol)->transfer;
747+
wiznet5k_obj.spi_transfer = ((mp_machine_spi_p_t *)MP_OBJ_TYPE_GET_SLOT(spi->type, protocol))->transfer;
748748
wiznet5k_obj.cs = cs;
749749
wiznet5k_obj.rst = rst;
750750
#if WIZNET5K_WITH_LWIP_STACK

extmod/vfs.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,9 @@ mp_import_stat_t mp_vfs_import_stat(const char *path) {
132132
}
133133

134134
// If the mounted object has the VFS protocol, call its import_stat helper
135-
const mp_vfs_proto_t *proto = mp_obj_get_type(vfs->obj)->protocol;
136-
if (proto != NULL) {
135+
const mp_obj_type_t *type = mp_obj_get_type(vfs->obj);
136+
if (MP_OBJ_TYPE_HAS_SLOT(type, protocol)) {
137+
const mp_vfs_proto_t *proto = MP_OBJ_TYPE_GET_SLOT(type, protocol);
137138
return proto->import_stat(MP_OBJ_TO_PTR(vfs->obj), path_out);
138139
}
139140

extmod/virtpin.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@
2828

2929
int mp_virtual_pin_read(mp_obj_t pin) {
3030
mp_obj_base_t *s = (mp_obj_base_t *)MP_OBJ_TO_PTR(pin);
31-
mp_pin_p_t *pin_p = (mp_pin_p_t *)s->type->protocol;
31+
mp_pin_p_t *pin_p = (mp_pin_p_t *)MP_OBJ_TYPE_GET_SLOT(s->type, protocol);
3232
return pin_p->ioctl(pin, MP_PIN_READ, 0, NULL);
3333
}
3434

3535
void mp_virtual_pin_write(mp_obj_t pin, int value) {
3636
mp_obj_base_t *s = (mp_obj_base_t *)MP_OBJ_TO_PTR(pin);
37-
mp_pin_p_t *pin_p = (mp_pin_p_t *)s->type->protocol;
37+
mp_pin_p_t *pin_p = (mp_pin_p_t *)MP_OBJ_TYPE_GET_SLOT(s->type, protocol);
3838
pin_p->ioctl(pin, MP_PIN_WRITE, value, NULL);
3939
}

ports/nrf/modules/ubluepy/ubluepy_scan_entry.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ STATIC mp_obj_t scan_entry_get_scan_data(mp_obj_t self_in) {
9191

9292
mp_obj_t description = mp_const_none;
9393

94-
mp_map_t *constant_map = mp_obj_dict_get_map(ubluepy_constants_ad_types_type.locals_dict);
94+
mp_map_t *constant_map = mp_obj_dict_get_map(MP_OBJ_TYPE_GET_SLOT(&ubluepy_constants_ad_types_type, locals_dict));
9595
mp_map_elem_t *ad_types_table = MP_OBJ_TO_PTR(constant_map->table);
9696

9797
uint16_t num_of_elements = constant_map->used;

ports/rp2/mpbthciport.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ int mp_bluetooth_hci_uart_set_baudrate(uint32_t baudrate) {
128128

129129
int mp_bluetooth_hci_uart_any(void) {
130130
int errcode = 0;
131-
const mp_stream_p_t *proto = (mp_stream_p_t *)machine_uart_type.protocol;
131+
const mp_stream_p_t *proto = (mp_stream_p_t *)MP_OBJ_TYPE_GET_SLOT(&machine_uart_type, protocol);
132132

133133
mp_uint_t ret = proto->ioctl(mp_bthci_uart, MP_STREAM_POLL, MP_STREAM_POLL_RD, &errcode);
134134
if (errcode != 0) {
@@ -142,7 +142,7 @@ int mp_bluetooth_hci_uart_write(const uint8_t *buf, size_t len) {
142142
debug_printf("mp_bluetooth_hci_uart_write\n");
143143

144144
int errcode = 0;
145-
const mp_stream_p_t *proto = (mp_stream_p_t *)machine_uart_type.protocol;
145+
const mp_stream_p_t *proto = (mp_stream_p_t *)MP_OBJ_TYPE_GET_SLOT(&machine_uart_type, protocol);
146146

147147
mp_bluetooth_hci_controller_wakeup();
148148

@@ -159,7 +159,7 @@ int mp_bluetooth_hci_uart_readchar(void) {
159159
if (mp_bluetooth_hci_uart_any()) {
160160
int errcode = 0;
161161
uint8_t buf = 0;
162-
const mp_stream_p_t *proto = (mp_stream_p_t *)machine_uart_type.protocol;
162+
const mp_stream_p_t *proto = (mp_stream_p_t *)MP_OBJ_TYPE_GET_SLOT(&machine_uart_type, protocol);
163163
if (proto->read(mp_bthci_uart, (void *)&buf, 1, &errcode) < 0) {
164164
error_printf("mp_bluetooth_hci_uart_readchar: failed to read UART %d\n", errcode);
165165
return -1;

ports/unix/modffi.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -506,10 +506,10 @@ STATIC mp_obj_t ffifunc_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const
506506
} else if (mp_obj_is_str(a)) {
507507
const char *s = mp_obj_str_get_str(a);
508508
values[i].ffi = (ffi_arg)(intptr_t)s;
509-
} else if (((mp_obj_base_t *)MP_OBJ_TO_PTR(a))->type->buffer != NULL) {
509+
} else if (MP_OBJ_TYPE_HAS_SLOT(((mp_obj_base_t *)MP_OBJ_TO_PTR(a))->type, buffer)) {
510510
mp_obj_base_t *o = (mp_obj_base_t *)MP_OBJ_TO_PTR(a);
511511
mp_buffer_info_t bufinfo;
512-
int ret = o->type->buffer(MP_OBJ_FROM_PTR(o), &bufinfo, MP_BUFFER_READ); // TODO: MP_BUFFER_READ?
512+
int ret = MP_OBJ_TYPE_GET_SLOT(o->type, buffer)(MP_OBJ_FROM_PTR(o), &bufinfo, MP_BUFFER_READ); // TODO: MP_BUFFER_READ?
513513
if (ret != 0) {
514514
goto error;
515515
}

0 commit comments

Comments
 (0)