Skip to content

Commit 999cedb

Browse files
committed
py: Wrap all obj-ptr conversions in MP_OBJ_TO_PTR/MP_OBJ_FROM_PTR.
This allows the mp_obj_t type to be configured to something other than a pointer-sized primitive type. This patch also includes additional changes to allow the code to compile when sizeof(mp_uint_t) != sizeof(void*), such as using size_t instead of mp_uint_t, and various casts.
1 parent cbf7674 commit 999cedb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+856
-816
lines changed

extmod/modmachine.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,13 @@ typedef struct _machine_mem_obj_t {
7777

7878
STATIC void machine_mem_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
7979
(void)kind;
80-
machine_mem_obj_t *self = self_in;
80+
machine_mem_obj_t *self = MP_OBJ_TO_PTR(self_in);
8181
mp_printf(print, "<%u-bit memory>", 8 * self->elem_size);
8282
}
8383

8484
STATIC mp_obj_t machine_mem_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
8585
// TODO support slice index to read/write multiple values at once
86-
machine_mem_obj_t *self = self_in;
86+
machine_mem_obj_t *self = MP_OBJ_TO_PTR(self_in);
8787
if (value == MP_OBJ_NULL) {
8888
// delete
8989
return MP_OBJ_NULL; // op not supported

extmod/moductypes.c

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -124,24 +124,24 @@ STATIC NORETURN void syntax_error(void) {
124124
STATIC mp_obj_t uctypes_struct_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) {
125125
mp_arg_check_num(n_args, n_kw, 2, 3, false);
126126
mp_obj_uctypes_struct_t *o = m_new_obj(mp_obj_uctypes_struct_t);
127-
o->base.type = type_in;
128-
o->addr = (void*)mp_obj_get_int(args[0]);
127+
o->base.type = MP_OBJ_TO_PTR(type_in);
128+
o->addr = (void*)(uintptr_t)mp_obj_get_int(args[0]);
129129
o->desc = args[1];
130130
o->flags = LAYOUT_NATIVE;
131131
if (n_args == 3) {
132132
o->flags = mp_obj_get_int(args[2]);
133133
}
134-
return o;
134+
return MP_OBJ_FROM_PTR(o);
135135
}
136136

137137
STATIC void uctypes_struct_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
138138
(void)kind;
139-
mp_obj_uctypes_struct_t *self = self_in;
139+
mp_obj_uctypes_struct_t *self = MP_OBJ_TO_PTR(self_in);
140140
const char *typen = "unk";
141141
if (MP_OBJ_IS_TYPE(self->desc, &mp_type_dict)) {
142142
typen = "STRUCT";
143143
} else if (MP_OBJ_IS_TYPE(self->desc, &mp_type_tuple)) {
144-
mp_obj_tuple_t *t = (mp_obj_tuple_t*)self->desc;
144+
mp_obj_tuple_t *t = MP_OBJ_TO_PTR(self->desc);
145145
mp_int_t offset = MP_OBJ_SMALL_INT_VALUE(t->items[0]);
146146
uint agg_type = GET_TYPE(offset, AGG_TYPE_BITS);
147147
switch (agg_type) {
@@ -207,12 +207,9 @@ STATIC mp_uint_t uctypes_struct_agg_size(mp_obj_tuple_t *t, mp_uint_t *max_field
207207
}
208208

209209
STATIC mp_uint_t uctypes_struct_size(mp_obj_t desc_in, mp_uint_t *max_field_size) {
210-
mp_obj_dict_t *d = desc_in;
211-
mp_uint_t total_size = 0;
212-
213210
if (!MP_OBJ_IS_TYPE(desc_in, &mp_type_dict)) {
214211
if (MP_OBJ_IS_TYPE(desc_in, &mp_type_tuple)) {
215-
return uctypes_struct_agg_size((mp_obj_tuple_t*)desc_in, max_field_size);
212+
return uctypes_struct_agg_size((mp_obj_tuple_t*)MP_OBJ_TO_PTR(desc_in), max_field_size);
216213
} else if (MP_OBJ_IS_SMALL_INT(desc_in)) {
217214
// We allow sizeof on both type definitions and structures/structure fields,
218215
// but scalar structure field is lowered into native Python int, so all
@@ -223,6 +220,9 @@ STATIC mp_uint_t uctypes_struct_size(mp_obj_t desc_in, mp_uint_t *max_field_size
223220
syntax_error();
224221
}
225222

223+
mp_obj_dict_t *d = MP_OBJ_TO_PTR(desc_in);
224+
mp_uint_t total_size = 0;
225+
226226
for (mp_uint_t i = 0; i < d->map.alloc; i++) {
227227
if (MP_MAP_SLOT_IS_FILLED(&d->map, i)) {
228228
mp_obj_t v = d->map.table[i].value;
@@ -241,7 +241,7 @@ STATIC mp_uint_t uctypes_struct_size(mp_obj_t desc_in, mp_uint_t *max_field_size
241241
if (!MP_OBJ_IS_TYPE(v, &mp_type_tuple)) {
242242
syntax_error();
243243
}
244-
mp_obj_tuple_t *t = (mp_obj_tuple_t*)v;
244+
mp_obj_tuple_t *t = MP_OBJ_TO_PTR(v);
245245
mp_int_t offset = MP_OBJ_SMALL_INT_VALUE(t->items[0]);
246246
offset &= VALUE_MASK(AGG_TYPE_BITS);
247247
mp_uint_t s = uctypes_struct_agg_size(t, max_field_size);
@@ -266,7 +266,7 @@ STATIC mp_obj_t uctypes_struct_sizeof(mp_obj_t obj_in) {
266266
// or to instantiated structure
267267
if (MP_OBJ_IS_TYPE(obj_in, &uctypes_struct_type)) {
268268
// Extract structure definition
269-
mp_obj_uctypes_struct_t *obj = obj_in;
269+
mp_obj_uctypes_struct_t *obj = MP_OBJ_TO_PTR(obj_in);
270270
obj_in = obj->desc;
271271
}
272272
mp_uint_t size = uctypes_struct_size(obj_in, &max_field_size);
@@ -365,7 +365,7 @@ STATIC void set_aligned(uint val_type, void *p, mp_int_t index, mp_obj_t val) {
365365
}
366366

367367
STATIC mp_obj_t uctypes_struct_attr_op(mp_obj_t self_in, qstr attr, mp_obj_t set_val) {
368-
mp_obj_uctypes_struct_t *self = self_in;
368+
mp_obj_uctypes_struct_t *self = MP_OBJ_TO_PTR(self_in);
369369

370370
// TODO: Support at least OrderedDict in addition
371371
if (!MP_OBJ_IS_TYPE(self->desc, &mp_type_dict)) {
@@ -443,7 +443,7 @@ STATIC mp_obj_t uctypes_struct_attr_op(mp_obj_t self_in, qstr attr, mp_obj_t set
443443
syntax_error();
444444
}
445445

446-
mp_obj_tuple_t *sub = (mp_obj_tuple_t*)deref;
446+
mp_obj_tuple_t *sub = MP_OBJ_TO_PTR(deref);
447447
mp_int_t offset = MP_OBJ_SMALL_INT_VALUE(sub->items[0]);
448448
mp_uint_t agg_type = GET_TYPE(offset, AGG_TYPE_BITS);
449449
offset &= VALUE_MASK(AGG_TYPE_BITS);
@@ -456,7 +456,7 @@ STATIC mp_obj_t uctypes_struct_attr_op(mp_obj_t self_in, qstr attr, mp_obj_t set
456456
o->desc = sub->items[1];
457457
o->addr = self->addr + offset;
458458
o->flags = self->flags;
459-
return o;
459+
return MP_OBJ_FROM_PTR(o);
460460
}
461461
case ARRAY: {
462462
mp_uint_t dummy;
@@ -468,11 +468,11 @@ STATIC mp_obj_t uctypes_struct_attr_op(mp_obj_t self_in, qstr attr, mp_obj_t set
468468
case PTR: {
469469
mp_obj_uctypes_struct_t *o = m_new_obj(mp_obj_uctypes_struct_t);
470470
o->base.type = &uctypes_struct_type;
471-
o->desc = sub;
471+
o->desc = MP_OBJ_FROM_PTR(sub);
472472
o->addr = self->addr + offset;
473473
o->flags = self->flags;
474474
//printf("PTR/ARR base addr=%p\n", o->addr);
475-
return o;
475+
return MP_OBJ_FROM_PTR(o);
476476
}
477477
}
478478

@@ -494,7 +494,7 @@ STATIC void uctypes_struct_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
494494
}
495495

496496
STATIC mp_obj_t uctypes_struct_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value) {
497-
mp_obj_uctypes_struct_t *self = self_in;
497+
mp_obj_uctypes_struct_t *self = MP_OBJ_TO_PTR(self_in);
498498

499499
if (value == MP_OBJ_NULL) {
500500
// delete
@@ -505,7 +505,7 @@ STATIC mp_obj_t uctypes_struct_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_ob
505505
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, "struct: cannot index"));
506506
}
507507

508-
mp_obj_tuple_t *t = (mp_obj_tuple_t*)self->desc;
508+
mp_obj_tuple_t *t = MP_OBJ_TO_PTR(self->desc);
509509
mp_int_t offset = MP_OBJ_SMALL_INT_VALUE(t->items[0]);
510510
uint agg_type = GET_TYPE(offset, AGG_TYPE_BITS);
511511

@@ -530,7 +530,7 @@ STATIC mp_obj_t uctypes_struct_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_ob
530530
o->desc = t->items[2];
531531
o->addr = self->addr + size * index;
532532
o->flags = self->flags;
533-
return o;
533+
return MP_OBJ_FROM_PTR(o);
534534
}
535535
} else if (agg_type == PTR) {
536536
byte *p = *(void**)self->addr;
@@ -545,7 +545,7 @@ STATIC mp_obj_t uctypes_struct_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_ob
545545
o->desc = t->items[1];
546546
o->addr = p + size * index;
547547
o->flags = self->flags;
548-
return o;
548+
return MP_OBJ_FROM_PTR(o);
549549
}
550550
}
551551

@@ -559,7 +559,7 @@ STATIC mp_obj_t uctypes_struct_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_ob
559559

560560
STATIC mp_int_t uctypes_get_buffer(mp_obj_t self_in, mp_buffer_info_t *bufinfo, mp_uint_t flags) {
561561
(void)flags;
562-
mp_obj_uctypes_struct_t *self = self_in;
562+
mp_obj_uctypes_struct_t *self = MP_OBJ_TO_PTR(self_in);
563563
mp_uint_t max_field_size = 0;
564564
mp_uint_t size = uctypes_struct_size(self->desc, &max_field_size);
565565

@@ -575,7 +575,7 @@ STATIC mp_int_t uctypes_get_buffer(mp_obj_t self_in, mp_buffer_info_t *bufinfo,
575575
STATIC mp_obj_t uctypes_struct_addressof(mp_obj_t buf) {
576576
mp_buffer_info_t bufinfo;
577577
mp_get_buffer_raise(buf, &bufinfo, MP_BUFFER_READ);
578-
return mp_obj_new_int((mp_int_t)bufinfo.buf);
578+
return mp_obj_new_int((mp_int_t)(uintptr_t)bufinfo.buf);
579579
}
580580
MP_DEFINE_CONST_FUN_OBJ_1(uctypes_struct_addressof_obj, uctypes_struct_addressof);
581581

@@ -584,7 +584,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(uctypes_struct_addressof_obj, uctypes_struct_addressof
584584
/// captured by reference (and thus memory pointed by bytearray may change
585585
/// or become invalid at later time). Use bytes_at() to capture by value.
586586
STATIC mp_obj_t uctypes_struct_bytearray_at(mp_obj_t ptr, mp_obj_t size) {
587-
return mp_obj_new_bytearray_by_ref(mp_obj_int_get_truncated(size), (void*)mp_obj_int_get_truncated(ptr));
587+
return mp_obj_new_bytearray_by_ref(mp_obj_int_get_truncated(size), (void*)(uintptr_t)mp_obj_int_get_truncated(ptr));
588588
}
589589
MP_DEFINE_CONST_FUN_OBJ_2(uctypes_struct_bytearray_at_obj, uctypes_struct_bytearray_at);
590590

@@ -593,7 +593,7 @@ MP_DEFINE_CONST_FUN_OBJ_2(uctypes_struct_bytearray_at_obj, uctypes_struct_bytear
593593
/// captured by value, i.e. copied. Use bytearray_at() to capture by reference
594594
/// ("zero copy").
595595
STATIC mp_obj_t uctypes_struct_bytes_at(mp_obj_t ptr, mp_obj_t size) {
596-
return mp_obj_new_bytes((void*)mp_obj_int_get_truncated(ptr), mp_obj_int_get_truncated(size));
596+
return mp_obj_new_bytes((void*)(uintptr_t)mp_obj_int_get_truncated(ptr), mp_obj_int_get_truncated(size));
597597
}
598598
MP_DEFINE_CONST_FUN_OBJ_2(uctypes_struct_bytes_at_obj, uctypes_struct_bytes_at);
599599

extmod/moduhashlib.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,16 @@ STATIC mp_obj_t hash_update(mp_obj_t self_in, mp_obj_t arg);
4444
STATIC mp_obj_t hash_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) {
4545
mp_arg_check_num(n_args, n_kw, 0, 1, false);
4646
mp_obj_hash_t *o = m_new_obj_var(mp_obj_hash_t, char, sizeof(SHA256_CTX));
47-
o->base.type = type_in;
47+
o->base.type = MP_OBJ_TO_PTR(type_in);
4848
sha256_init((SHA256_CTX*)o->state);
4949
if (n_args == 1) {
50-
hash_update(o, args[0]);
50+
hash_update(MP_OBJ_FROM_PTR(o), args[0]);
5151
}
52-
return o;
52+
return MP_OBJ_FROM_PTR(o);
5353
}
5454

5555
STATIC mp_obj_t hash_update(mp_obj_t self_in, mp_obj_t arg) {
56-
mp_obj_hash_t *self = self_in;
56+
mp_obj_hash_t *self = MP_OBJ_TO_PTR(self_in);
5757
mp_buffer_info_t bufinfo;
5858
mp_get_buffer_raise(arg, &bufinfo, MP_BUFFER_READ);
5959
sha256_update((SHA256_CTX*)self->state, bufinfo.buf, bufinfo.len);
@@ -62,7 +62,7 @@ STATIC mp_obj_t hash_update(mp_obj_t self_in, mp_obj_t arg) {
6262
MP_DEFINE_CONST_FUN_OBJ_2(hash_update_obj, hash_update);
6363

6464
STATIC mp_obj_t hash_digest(mp_obj_t self_in) {
65-
mp_obj_hash_t *self = self_in;
65+
mp_obj_hash_t *self = MP_OBJ_TO_PTR(self_in);
6666
vstr_t vstr;
6767
vstr_init_len(&vstr, SHA256_BLOCK_SIZE);
6868
sha256_final((SHA256_CTX*)self->state, (byte*)vstr.buf);

extmod/moduheapq.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ STATIC mp_obj_list_t *get_heap(mp_obj_t heap_in) {
3737
if (!MP_OBJ_IS_TYPE(heap_in, &mp_type_list)) {
3838
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, "heap must be a list"));
3939
}
40-
return heap_in;
40+
return MP_OBJ_TO_PTR(heap_in);
4141
}
4242

4343
STATIC void heap_siftdown(mp_obj_list_t *heap, mp_uint_t start_pos, mp_uint_t pos) {
@@ -74,7 +74,7 @@ STATIC void heap_siftup(mp_obj_list_t *heap, mp_uint_t pos) {
7474

7575
STATIC mp_obj_t mod_uheapq_heappush(mp_obj_t heap_in, mp_obj_t item) {
7676
mp_obj_list_t *heap = get_heap(heap_in);
77-
mp_obj_list_append(heap, item);
77+
mp_obj_list_append(heap_in, item);
7878
heap_siftdown(heap, 0, heap->len - 1);
7979
return mp_const_none;
8080
}

extmod/modujson.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ STATIC mp_obj_t mod_ujson_loads(mp_obj_t obj) {
222222
mp_obj_list_init(&stack, 1);
223223
stack.items[0] = stack_top;
224224
} else {
225-
mp_obj_list_append(&stack, stack_top);
225+
mp_obj_list_append(MP_OBJ_FROM_PTR(&stack), stack_top);
226226
}
227227
stack_top = next;
228228
stack_top_type = mp_obj_get_type(stack_top);

extmod/modure.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,12 @@ typedef struct _mp_obj_match_t {
5353

5454
STATIC void match_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
5555
(void)kind;
56-
mp_obj_match_t *self = self_in;
56+
mp_obj_match_t *self = MP_OBJ_TO_PTR(self_in);
5757
mp_printf(print, "<match num=%d>", self->num_matches);
5858
}
5959

6060
STATIC mp_obj_t match_group(mp_obj_t self_in, mp_obj_t no_in) {
61-
mp_obj_match_t *self = self_in;
61+
mp_obj_match_t *self = MP_OBJ_TO_PTR(self_in);
6262
mp_int_t no = mp_obj_get_int(no_in);
6363
if (no < 0 || no >= self->num_matches) {
6464
nlr_raise(mp_obj_new_exception_arg1(&mp_type_IndexError, no_in));
@@ -83,18 +83,18 @@ STATIC const mp_obj_type_t match_type = {
8383
{ &mp_type_type },
8484
.name = MP_QSTR_match,
8585
.print = match_print,
86-
.locals_dict = (mp_obj_t)&match_locals_dict,
86+
.locals_dict = (void*)&match_locals_dict,
8787
};
8888

8989
STATIC void re_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
9090
(void)kind;
91-
mp_obj_re_t *self = self_in;
91+
mp_obj_re_t *self = MP_OBJ_TO_PTR(self_in);
9292
mp_printf(print, "<re %p>", self);
9393
}
9494

9595
STATIC mp_obj_t re_exec(bool is_anchored, uint n_args, const mp_obj_t *args) {
9696
(void)n_args;
97-
mp_obj_re_t *self = args[0];
97+
mp_obj_re_t *self = MP_OBJ_TO_PTR(args[0]);
9898
Subject subj;
9999
mp_uint_t len;
100100
subj.begin = mp_obj_str_get_data(args[1], &len);
@@ -112,7 +112,7 @@ STATIC mp_obj_t re_exec(bool is_anchored, uint n_args, const mp_obj_t *args) {
112112
match->base.type = &match_type;
113113
match->num_matches = caps_num / 2; // caps_num counts start and end pointers
114114
match->str = args[1];
115-
return match;
115+
return MP_OBJ_FROM_PTR(match);
116116
}
117117

118118
STATIC mp_obj_t re_match(mp_uint_t n_args, const mp_obj_t *args) {
@@ -126,7 +126,7 @@ STATIC mp_obj_t re_search(mp_uint_t n_args, const mp_obj_t *args) {
126126
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(re_search_obj, 2, 4, re_search);
127127

128128
STATIC mp_obj_t re_split(mp_uint_t n_args, const mp_obj_t *args) {
129-
mp_obj_re_t *self = args[0];
129+
mp_obj_re_t *self = MP_OBJ_TO_PTR(args[0]);
130130
Subject subj;
131131
mp_uint_t len;
132132
subj.begin = mp_obj_str_get_data(args[1], &len);
@@ -179,7 +179,7 @@ STATIC const mp_obj_type_t re_type = {
179179
{ &mp_type_type },
180180
.name = MP_QSTR_ure,
181181
.print = re_print,
182-
.locals_dict = (mp_obj_t)&re_locals_dict,
182+
.locals_dict = (void*)&re_locals_dict,
183183
};
184184

185185
STATIC mp_obj_t mod_re_compile(mp_uint_t n_args, const mp_obj_t *args) {
@@ -202,16 +202,16 @@ STATIC mp_obj_t mod_re_compile(mp_uint_t n_args, const mp_obj_t *args) {
202202
if (flags & FLAG_DEBUG) {
203203
re1_5_dumpcode(&o->re);
204204
}
205-
return o;
205+
return MP_OBJ_FROM_PTR(o);
206206
}
207207
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_re_compile_obj, 1, 2, mod_re_compile);
208208

209209
STATIC mp_obj_t mod_re_exec(bool is_anchored, uint n_args, const mp_obj_t *args) {
210210
(void)n_args;
211-
mp_obj_re_t *self = mod_re_compile(1, args);
211+
mp_obj_t self = mod_re_compile(1, args);
212212

213213
const mp_obj_t args2[] = {self, args[1]};
214-
mp_obj_match_t *match = re_exec(is_anchored, 2, args2);
214+
mp_obj_t match = re_exec(is_anchored, 2, args2);
215215
return match;
216216
}
217217

py/bc.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ STATIC NORETURN void fun_pos_args_mismatch(mp_obj_fun_bc_t *f, mp_uint_t expecte
6868
#elif MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_DETAILED
6969
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError,
7070
"%q() takes %d positional arguments but %d were given",
71-
mp_obj_fun_get_name(f), expected, given));
71+
mp_obj_fun_get_name(MP_OBJ_FROM_PTR(f)), expected, given));
7272
#endif
7373
}
7474

@@ -95,7 +95,7 @@ void mp_setup_code_state(mp_code_state *code_state, mp_obj_fun_bc_t *self, mp_ui
9595
mp_uint_t n_state = code_state->n_state;
9696

9797
// ip comes in as an offset into bytecode, so turn it into a true pointer
98-
code_state->ip = self->bytecode + (mp_uint_t)code_state->ip;
98+
code_state->ip = self->bytecode + (size_t)code_state->ip;
9999

100100
// store pointer to constant table
101101
code_state->const_table = self->const_table;
@@ -219,7 +219,7 @@ continue2:;
219219
if (code_state->state[n_state - 1 - n_pos_args - i] == MP_OBJ_NULL) {
220220
mp_map_elem_t *elem = NULL;
221221
if ((scope_flags & MP_SCOPE_FLAG_DEFKWARGS) != 0) {
222-
elem = mp_map_lookup(&((mp_obj_dict_t*)self->extra_args[n_def_pos_args])->map, arg_names[n_pos_args + i], MP_MAP_LOOKUP);
222+
elem = mp_map_lookup(&((mp_obj_dict_t*)MP_OBJ_TO_PTR(self->extra_args[n_def_pos_args]))->map, arg_names[n_pos_args + i], MP_MAP_LOOKUP);
223223
}
224224
if (elem != NULL) {
225225
code_state->state[n_state - 1 - n_pos_args - i] = elem->value;

py/bc.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ typedef struct _mp_exc_stack {
6666
// bit 1 is whether the opcode was SETUP_WITH or SETUP_FINALLY
6767
mp_obj_t *val_sp;
6868
// Saved exception, valid if currently_in_except_block bit is 1
69-
mp_obj_t prev_exc;
69+
mp_obj_base_t *prev_exc;
7070
} mp_exc_stack_t;
7171

7272
typedef struct _mp_code_state {

0 commit comments

Comments
 (0)