Merge branch 'pixelbuf-subscr-change' into new-pixelbuf-api
This commit is contained in:
commit
023d64fe4a
@ -61,7 +61,7 @@ STATIC void machine_mem_print(const mp_print_t *print, mp_obj_t self_in, mp_prin
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
STATIC mp_obj_t machine_mem_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value, mp_obj_t instance) {
|
STATIC mp_obj_t machine_mem_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
|
||||||
// TODO support slice index to read/write multiple values at once
|
// TODO support slice index to read/write multiple values at once
|
||||||
machine_mem_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
machine_mem_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
if (value == MP_OBJ_NULL) {
|
if (value == MP_OBJ_NULL) {
|
||||||
|
@ -247,8 +247,9 @@ STATIC mp_obj_t btree_iternext(mp_obj_t self_in) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
STATIC mp_obj_t btree_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value, mp_obj_t instance) {
|
STATIC mp_obj_t btree_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
|
||||||
mp_obj_btree_t *self = MP_OBJ_TO_PTR(self_in);
|
//mp_obj_btree_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
mp_obj_btree_t *self = mp_instance_cast_to_native_base(self_in, &btree_type);
|
||||||
if (value == MP_OBJ_NULL) {
|
if (value == MP_OBJ_NULL) {
|
||||||
// delete
|
// delete
|
||||||
DBT key;
|
DBT key;
|
||||||
|
@ -519,8 +519,8 @@ STATIC void uctypes_struct_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
STATIC mp_obj_t uctypes_struct_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value, mp_obj_t instance) {
|
STATIC mp_obj_t uctypes_struct_subscr(mp_obj_t base_in, mp_obj_t index_in, mp_obj_t value) {
|
||||||
mp_obj_uctypes_struct_t *self = MP_OBJ_TO_PTR(self_in);
|
mp_obj_uctypes_struct_t *self = mp_instance_cast_to_native_base(base_in, &uctypes_struct_type);
|
||||||
|
|
||||||
if (value == MP_OBJ_NULL) {
|
if (value == MP_OBJ_NULL) {
|
||||||
// delete
|
// delete
|
||||||
|
@ -150,7 +150,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_urandom_randint_obj, mod_urandom_randint);
|
|||||||
STATIC mp_obj_t mod_urandom_choice(mp_obj_t seq) {
|
STATIC mp_obj_t mod_urandom_choice(mp_obj_t seq) {
|
||||||
mp_int_t len = mp_obj_get_int(mp_obj_len(seq));
|
mp_int_t len = mp_obj_get_int(mp_obj_len(seq));
|
||||||
if (len > 0) {
|
if (len > 0) {
|
||||||
return mp_obj_subscr(seq, mp_obj_new_int(yasmarang_randbelow(len)), MP_OBJ_SENTINEL, seq);
|
return mp_obj_subscr(seq, mp_obj_new_int(yasmarang_randbelow(len)), MP_OBJ_SENTINEL);
|
||||||
} else {
|
} else {
|
||||||
nlr_raise(mp_obj_new_exception(&mp_type_IndexError));
|
nlr_raise(mp_obj_new_exception(&mp_type_IndexError));
|
||||||
}
|
}
|
||||||
|
@ -373,7 +373,7 @@ mp_obj_t mp_vfs_listdir(size_t n_args, const mp_obj_t *args) {
|
|||||||
mp_obj_t dir_list = mp_obj_new_list(0, NULL);
|
mp_obj_t dir_list = mp_obj_new_list(0, NULL);
|
||||||
mp_obj_t next;
|
mp_obj_t next;
|
||||||
while ((next = mp_iternext(iter)) != MP_OBJ_STOP_ITERATION) {
|
while ((next = mp_iternext(iter)) != MP_OBJ_STOP_ITERATION) {
|
||||||
mp_obj_list_append(dir_list, mp_obj_subscr(next, MP_OBJ_NEW_SMALL_INT(0), MP_OBJ_SENTINEL, next));
|
mp_obj_list_append(dir_list, mp_obj_subscr(next, MP_OBJ_NEW_SMALL_INT(0), MP_OBJ_SENTINEL));
|
||||||
}
|
}
|
||||||
return dir_list;
|
return dir_list;
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
|
|||||||
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_PA07) },
|
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_PA07) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_PC04) },
|
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_PC04) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_PC05) },
|
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_PC05) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA03) },
|
||||||
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_PC07) },
|
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_PC07) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PC06) },
|
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PC06) },
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#define FLASH_PAGE_SIZE (0x4000)
|
#define FLASH_PAGE_SIZE (0x4000)
|
||||||
|
|
||||||
#define BOARD_OSC_DIV 25
|
#define BOARD_OSC_DIV 25
|
||||||
|
#define BOARD_NO_VBUS_SENSE
|
||||||
|
|
||||||
// On-board flash
|
// On-board flash
|
||||||
// #define SPI_FLASH_MOSI_PIN (&pin_PA07)
|
// #define SPI_FLASH_MOSI_PIN (&pin_PA07)
|
||||||
|
@ -32,8 +32,33 @@
|
|||||||
#include "lib/mp-readline/readline.h"
|
#include "lib/mp-readline/readline.h"
|
||||||
#include "stm32f4xx_hal.h"
|
#include "stm32f4xx_hal.h"
|
||||||
|
|
||||||
|
#include "py/mpconfig.h"
|
||||||
|
|
||||||
#include "common-hal/microcontroller/Pin.h"
|
#include "common-hal/microcontroller/Pin.h"
|
||||||
|
|
||||||
|
STATIC void init_usb_vbus_sense(void) {
|
||||||
|
|
||||||
|
#ifdef BOARD_NO_VBUS_SENSE
|
||||||
|
// Disable VBUS sensing
|
||||||
|
#ifdef USB_OTG_GCCFG_VBDEN
|
||||||
|
USB_OTG_FS->GCCFG &= ~USB_OTG_GCCFG_VBDEN;
|
||||||
|
#else
|
||||||
|
USB_OTG_FS->GCCFG |= USB_OTG_GCCFG_NOVBUSSENS;
|
||||||
|
USB_OTG_FS->GCCFG &= ~USB_OTG_GCCFG_VBUSBSEN;
|
||||||
|
USB_OTG_FS->GCCFG &= ~USB_OTG_GCCFG_VBUSASEN;
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
// Enable VBUS hardware sensing
|
||||||
|
#ifdef USB_OTG_GCCFG_VBDEN
|
||||||
|
USB_OTG_FS->GCCFG |= USB_OTG_GCCFG_VBDEN;
|
||||||
|
#else
|
||||||
|
USB_OTG_FS->GCCFG &= ~USB_OTG_GCCFG_NOVBUSSENS;
|
||||||
|
USB_OTG_FS->GCCFG |= USB_OTG_GCCFG_VBUSBSEN; // B Device sense
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void init_usb_hardware(void) {
|
void init_usb_hardware(void) {
|
||||||
//TODO: if future chips overload this with options, move to peripherals management.
|
//TODO: if future chips overload this with options, move to peripherals management.
|
||||||
|
|
||||||
@ -79,7 +104,9 @@ void init_usb_hardware(void) {
|
|||||||
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
|
||||||
never_reset_pin_number(0, 8);
|
never_reset_pin_number(0, 8);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Peripheral clock enable */
|
/* Peripheral clock enable */
|
||||||
__HAL_RCC_USB_OTG_FS_CLK_ENABLE();
|
__HAL_RCC_USB_OTG_FS_CLK_ENABLE();
|
||||||
|
|
||||||
|
init_usb_vbus_sense();
|
||||||
}
|
}
|
||||||
|
@ -242,7 +242,7 @@ STATIC void get_jclass_name(jobject obj, char *buf) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
STATIC mp_obj_t jobject_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value, mp_obj_t instance) {
|
STATIC mp_obj_t jobject_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
|
||||||
mp_obj_jobject_t *self = self_in;
|
mp_obj_jobject_t *self = self_in;
|
||||||
mp_uint_t idx = mp_obj_get_int(index);
|
mp_uint_t idx = mp_obj_get_int(index);
|
||||||
char class_name[64];
|
char class_name[64];
|
||||||
@ -311,7 +311,7 @@ STATIC mp_obj_t jobject_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
|
|||||||
// TODO: subscr_load_adaptor & subscr_getiter convenience functions
|
// TODO: subscr_load_adaptor & subscr_getiter convenience functions
|
||||||
// should be moved to common location for reuse.
|
// should be moved to common location for reuse.
|
||||||
STATIC mp_obj_t subscr_load_adaptor(mp_obj_t self_in, mp_obj_t index_in) {
|
STATIC mp_obj_t subscr_load_adaptor(mp_obj_t self_in, mp_obj_t index_in) {
|
||||||
return mp_obj_subscr(self_in, index_in, MP_OBJ_SENTINEL, self_in);
|
return mp_obj_subscr(self_in, index_in, MP_OBJ_SENTINEL);
|
||||||
}
|
}
|
||||||
MP_DEFINE_CONST_FUN_OBJ_2(subscr_load_adaptor_obj, subscr_load_adaptor);
|
MP_DEFINE_CONST_FUN_OBJ_2(subscr_load_adaptor_obj, subscr_load_adaptor);
|
||||||
|
|
||||||
|
6
py/obj.c
6
py/obj.c
@ -487,11 +487,11 @@ mp_obj_t mp_obj_len_maybe(mp_obj_t o_in) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_obj_t mp_obj_subscr(mp_obj_t base, mp_obj_t index, mp_obj_t value, mp_obj_t instance) {
|
mp_obj_t mp_obj_subscr(mp_obj_t base, mp_obj_t index, mp_obj_t value) {
|
||||||
mp_obj_type_t *type = mp_obj_get_type(base);
|
mp_obj_type_t *type = mp_obj_get_type(base);
|
||||||
|
|
||||||
if (type->subscr != NULL) {
|
if (type->subscr != NULL) {
|
||||||
mp_obj_t ret = type->subscr(base, index, value, instance);
|
mp_obj_t ret = type->subscr(base, index, value);
|
||||||
// May have called port specific C code. Make sure it didn't mess up the heap.
|
// May have called port specific C code. Make sure it didn't mess up the heap.
|
||||||
assert_heap_ok();
|
assert_heap_ok();
|
||||||
if (ret != MP_OBJ_NULL) {
|
if (ret != MP_OBJ_NULL) {
|
||||||
@ -546,7 +546,7 @@ STATIC mp_obj_t generic_it_iternext(mp_obj_t self_in) {
|
|||||||
mp_obj_type_t *type = mp_obj_get_type(self->obj);
|
mp_obj_type_t *type = mp_obj_get_type(self->obj);
|
||||||
mp_obj_t current_length = type->unary_op(MP_UNARY_OP_LEN, self->obj);
|
mp_obj_t current_length = type->unary_op(MP_UNARY_OP_LEN, self->obj);
|
||||||
if (self->cur < MP_OBJ_SMALL_INT_VALUE(current_length)) {
|
if (self->cur < MP_OBJ_SMALL_INT_VALUE(current_length)) {
|
||||||
mp_obj_t o_out = type->subscr(self->obj, MP_OBJ_NEW_SMALL_INT(self->cur), MP_OBJ_SENTINEL, self->obj);
|
mp_obj_t o_out = type->subscr(self->obj, MP_OBJ_NEW_SMALL_INT(self->cur), MP_OBJ_SENTINEL);
|
||||||
self->cur += 1;
|
self->cur += 1;
|
||||||
return o_out;
|
return o_out;
|
||||||
} else {
|
} else {
|
||||||
|
4
py/obj.h
4
py/obj.h
@ -444,7 +444,7 @@ typedef mp_obj_t (*mp_call_fun_t)(mp_obj_t fun, size_t n_args, size_t n_kw, cons
|
|||||||
typedef mp_obj_t (*mp_unary_op_fun_t)(mp_unary_op_t op, mp_obj_t);
|
typedef mp_obj_t (*mp_unary_op_fun_t)(mp_unary_op_t op, mp_obj_t);
|
||||||
typedef mp_obj_t (*mp_binary_op_fun_t)(mp_binary_op_t op, mp_obj_t, mp_obj_t);
|
typedef mp_obj_t (*mp_binary_op_fun_t)(mp_binary_op_t op, mp_obj_t, mp_obj_t);
|
||||||
typedef void (*mp_attr_fun_t)(mp_obj_t self_in, qstr attr, mp_obj_t *dest);
|
typedef void (*mp_attr_fun_t)(mp_obj_t self_in, qstr attr, mp_obj_t *dest);
|
||||||
typedef mp_obj_t (*mp_subscr_fun_t)(mp_obj_t self_in, mp_obj_t index, mp_obj_t value, mp_obj_t instance);
|
typedef mp_obj_t (*mp_subscr_fun_t)(mp_obj_t self_in, mp_obj_t index, mp_obj_t value);
|
||||||
typedef mp_obj_t (*mp_getiter_fun_t)(mp_obj_t self_in, mp_obj_iter_buf_t *iter_buf);
|
typedef mp_obj_t (*mp_getiter_fun_t)(mp_obj_t self_in, mp_obj_iter_buf_t *iter_buf);
|
||||||
|
|
||||||
// Buffer protocol
|
// Buffer protocol
|
||||||
@ -707,7 +707,7 @@ size_t mp_get_index(const mp_obj_type_t *type, size_t len, mp_obj_t index, bool
|
|||||||
mp_obj_t mp_obj_id(mp_obj_t o_in);
|
mp_obj_t mp_obj_id(mp_obj_t o_in);
|
||||||
mp_obj_t mp_obj_len(mp_obj_t o_in);
|
mp_obj_t mp_obj_len(mp_obj_t o_in);
|
||||||
mp_obj_t mp_obj_len_maybe(mp_obj_t o_in); // may return MP_OBJ_NULL
|
mp_obj_t mp_obj_len_maybe(mp_obj_t o_in); // may return MP_OBJ_NULL
|
||||||
mp_obj_t mp_obj_subscr(mp_obj_t base, mp_obj_t index, mp_obj_t val, mp_obj_t instance);
|
mp_obj_t mp_obj_subscr(mp_obj_t base, mp_obj_t index, mp_obj_t val);
|
||||||
mp_obj_t mp_generic_unary_op(mp_unary_op_t op, mp_obj_t o_in);
|
mp_obj_t mp_generic_unary_op(mp_unary_op_t op, mp_obj_t o_in);
|
||||||
|
|
||||||
// cell
|
// cell
|
||||||
|
@ -396,8 +396,7 @@ STATIC mp_obj_t array_extend(mp_obj_t self_in, mp_obj_t arg_in) {
|
|||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(array_extend_obj, array_extend);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_2(array_extend_obj, array_extend);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
STATIC mp_obj_t array_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value) {
|
||||||
STATIC mp_obj_t array_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value, mp_obj_t instance) {
|
|
||||||
if (value == MP_OBJ_NULL) {
|
if (value == MP_OBJ_NULL) {
|
||||||
// delete item
|
// delete item
|
||||||
// TODO implement
|
// TODO implement
|
||||||
|
@ -175,7 +175,7 @@ mp_obj_t mp_obj_dict_get(mp_obj_t self_in, mp_obj_t index) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
STATIC mp_obj_t dict_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value, mp_obj_t instance) {
|
STATIC mp_obj_t dict_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
|
||||||
if (value == MP_OBJ_NULL) {
|
if (value == MP_OBJ_NULL) {
|
||||||
// delete
|
// delete
|
||||||
mp_obj_dict_delete(self_in, index);
|
mp_obj_dict_delete(self_in, index);
|
||||||
|
10
py/objlist.c
10
py/objlist.c
@ -159,12 +159,12 @@ STATIC mp_obj_t list_binary_op(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t rhs) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
STATIC mp_obj_t list_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value, mp_obj_t instance) {
|
STATIC mp_obj_t list_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
|
||||||
|
mp_obj_list_t *self = mp_instance_cast_to_native_base(self_in, &mp_type_list);
|
||||||
if (value == MP_OBJ_NULL) {
|
if (value == MP_OBJ_NULL) {
|
||||||
// delete
|
// delete
|
||||||
#if MICROPY_PY_BUILTINS_SLICE
|
#if MICROPY_PY_BUILTINS_SLICE
|
||||||
if (MP_OBJ_IS_TYPE(index, &mp_type_slice)) {
|
if (MP_OBJ_IS_TYPE(index, &mp_type_slice)) {
|
||||||
mp_obj_list_t *self = MP_OBJ_TO_PTR(self_in);
|
|
||||||
mp_bound_slice_t slice;
|
mp_bound_slice_t slice;
|
||||||
if (!mp_seq_get_fast_slice_indexes(self->len, index, &slice)) {
|
if (!mp_seq_get_fast_slice_indexes(self->len, index, &slice)) {
|
||||||
mp_raise_NotImplementedError(NULL);
|
mp_raise_NotImplementedError(NULL);
|
||||||
@ -180,12 +180,11 @@ STATIC mp_obj_t list_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value, mp
|
|||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
mp_obj_t args[2] = {self_in, index};
|
mp_obj_t args[2] = {self, index};
|
||||||
list_pop(2, args);
|
list_pop(2, args);
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
} else if (value == MP_OBJ_SENTINEL) {
|
} else if (value == MP_OBJ_SENTINEL) {
|
||||||
// load
|
// load
|
||||||
mp_obj_list_t *self = MP_OBJ_TO_PTR(self_in);
|
|
||||||
#if MICROPY_PY_BUILTINS_SLICE
|
#if MICROPY_PY_BUILTINS_SLICE
|
||||||
if (MP_OBJ_IS_TYPE(index, &mp_type_slice)) {
|
if (MP_OBJ_IS_TYPE(index, &mp_type_slice)) {
|
||||||
mp_bound_slice_t slice;
|
mp_bound_slice_t slice;
|
||||||
@ -202,7 +201,6 @@ STATIC mp_obj_t list_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value, mp
|
|||||||
} else {
|
} else {
|
||||||
#if MICROPY_PY_BUILTINS_SLICE
|
#if MICROPY_PY_BUILTINS_SLICE
|
||||||
if (MP_OBJ_IS_TYPE(index, &mp_type_slice)) {
|
if (MP_OBJ_IS_TYPE(index, &mp_type_slice)) {
|
||||||
mp_obj_list_t *self = MP_OBJ_TO_PTR(self_in);
|
|
||||||
size_t value_len; mp_obj_t *value_items;
|
size_t value_len; mp_obj_t *value_items;
|
||||||
mp_obj_get_array(value, &value_len, &value_items);
|
mp_obj_get_array(value, &value_len, &value_items);
|
||||||
mp_bound_slice_t slice_out;
|
mp_bound_slice_t slice_out;
|
||||||
@ -231,7 +229,7 @@ STATIC mp_obj_t list_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value, mp
|
|||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
mp_obj_list_store(self_in, index, value);
|
mp_obj_list_store(self, index, value);
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#include "py/runtime.h"
|
#include "py/runtime.h"
|
||||||
#include "py/objstr.h"
|
#include "py/objstr.h"
|
||||||
#include "py/objnamedtuple.h"
|
#include "py/objnamedtuple.h"
|
||||||
|
#include "py/objtype.h"
|
||||||
|
|
||||||
#include "supervisor/shared/translate.h"
|
#include "supervisor/shared/translate.h"
|
||||||
|
|
||||||
@ -70,6 +71,15 @@ void namedtuple_print(const mp_print_t *print, mp_obj_t o_in, mp_print_kind_t ki
|
|||||||
mp_obj_attrtuple_print_helper(print, fields, &o->tuple);
|
mp_obj_attrtuple_print_helper(print, fields, &o->tuple);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mp_obj_t namedtuple_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
|
||||||
|
mp_obj_type_t *type = mp_obj_get_type(self_in);
|
||||||
|
// Check for subclasses of namedtuple and unpack if needed.
|
||||||
|
if (type->parent != &mp_type_tuple) {
|
||||||
|
self_in = ((mp_obj_instance_t*) self_in)->subobj[0];
|
||||||
|
}
|
||||||
|
return mp_obj_tuple_subscr(self_in, index, value);
|
||||||
|
}
|
||||||
|
|
||||||
void namedtuple_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
|
void namedtuple_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
|
||||||
if (dest[0] == MP_OBJ_NULL) {
|
if (dest[0] == MP_OBJ_NULL) {
|
||||||
// load attribute
|
// load attribute
|
||||||
@ -167,7 +177,7 @@ STATIC mp_obj_t mp_obj_new_namedtuple_type(qstr name, size_t n_fields, mp_obj_t
|
|||||||
o->base.unary_op = mp_obj_tuple_unary_op;
|
o->base.unary_op = mp_obj_tuple_unary_op;
|
||||||
o->base.binary_op = mp_obj_tuple_binary_op;
|
o->base.binary_op = mp_obj_tuple_binary_op;
|
||||||
o->base.attr = namedtuple_attr;
|
o->base.attr = namedtuple_attr;
|
||||||
o->base.subscr = mp_obj_tuple_subscr;
|
o->base.subscr = namedtuple_subscr;
|
||||||
o->base.getiter = mp_obj_tuple_getiter;
|
o->base.getiter = mp_obj_tuple_getiter;
|
||||||
o->base.parent = &mp_type_tuple;
|
o->base.parent = &mp_type_tuple;
|
||||||
return MP_OBJ_FROM_PTR(o);
|
return MP_OBJ_FROM_PTR(o);
|
||||||
|
@ -49,6 +49,7 @@ typedef struct _mp_obj_namedtuple_t {
|
|||||||
|
|
||||||
void namedtuple_print(const mp_print_t *print, mp_obj_t o_in, mp_print_kind_t kind);
|
void namedtuple_print(const mp_print_t *print, mp_obj_t o_in, mp_print_kind_t kind);
|
||||||
size_t mp_obj_namedtuple_find_field(const mp_obj_namedtuple_type_t *type, qstr name);
|
size_t mp_obj_namedtuple_find_field(const mp_obj_namedtuple_type_t *type, qstr name);
|
||||||
|
mp_obj_t namedtuple_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value);
|
||||||
void namedtuple_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest);
|
void namedtuple_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest);
|
||||||
mp_obj_namedtuple_type_t *mp_obj_new_namedtuple_base(size_t n_fields, mp_obj_t *fields);
|
mp_obj_namedtuple_type_t *mp_obj_new_namedtuple_base(size_t n_fields, mp_obj_t *fields);
|
||||||
mp_obj_t namedtuple_make_new(const mp_obj_type_t *type_in, size_t n_args, const mp_obj_t *args, mp_map_t *kw_args);
|
mp_obj_t namedtuple_make_new(const mp_obj_type_t *type_in, size_t n_args, const mp_obj_t *args, mp_map_t *kw_args);
|
||||||
|
@ -159,7 +159,7 @@ STATIC mp_obj_t range_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
STATIC mp_obj_t range_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value, mp_obj_t instance) {
|
STATIC mp_obj_t range_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
|
||||||
if (value == MP_OBJ_SENTINEL) {
|
if (value == MP_OBJ_SENTINEL) {
|
||||||
// load
|
// load
|
||||||
mp_obj_range_t *self = MP_OBJ_TO_PTR(self_in);
|
mp_obj_range_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
@ -66,7 +66,7 @@ STATIC mp_obj_t reversed_iternext(mp_obj_t self_in) {
|
|||||||
|
|
||||||
// pre-decrement and index sequence
|
// pre-decrement and index sequence
|
||||||
self->cur_index -= 1;
|
self->cur_index -= 1;
|
||||||
return mp_obj_subscr(self->seq, MP_OBJ_NEW_SMALL_INT(self->cur_index), MP_OBJ_SENTINEL, self->seq);
|
return mp_obj_subscr(self->seq, MP_OBJ_NEW_SMALL_INT(self->cur_index), MP_OBJ_SENTINEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
const mp_obj_type_t mp_type_reversed = {
|
const mp_obj_type_t mp_type_reversed = {
|
||||||
|
@ -440,7 +440,7 @@ const byte *str_index_to_ptr(const mp_obj_type_t *type, const byte *self_data, s
|
|||||||
|
|
||||||
// This is used for both bytes and 8-bit strings. This is not used for unicode strings.
|
// This is used for both bytes and 8-bit strings. This is not used for unicode strings.
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
STATIC mp_obj_t bytes_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value, mp_obj_t instance) {
|
STATIC mp_obj_t bytes_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
|
||||||
mp_obj_type_t *type = mp_obj_get_type(self_in);
|
mp_obj_type_t *type = mp_obj_get_type(self_in);
|
||||||
GET_STR_DATA_LEN(self_in, self_data, self_len);
|
GET_STR_DATA_LEN(self_in, self_data, self_len);
|
||||||
if (value == MP_OBJ_SENTINEL) {
|
if (value == MP_OBJ_SENTINEL) {
|
||||||
|
@ -198,7 +198,7 @@ const byte *str_index_to_ptr(const mp_obj_type_t *type, const byte *self_data, s
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
STATIC mp_obj_t str_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value, mp_obj_t instance) {
|
STATIC mp_obj_t str_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
|
||||||
mp_obj_type_t *type = mp_obj_get_type(self_in);
|
mp_obj_type_t *type = mp_obj_get_type(self_in);
|
||||||
assert(type == &mp_type_str);
|
assert(type == &mp_type_str);
|
||||||
GET_STR_DATA_LEN(self_in, self_data, self_len);
|
GET_STR_DATA_LEN(self_in, self_data, self_len);
|
||||||
|
@ -178,7 +178,8 @@ mp_obj_t mp_obj_tuple_binary_op(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t rhs) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
mp_obj_t mp_obj_tuple_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value, mp_obj_t instance) {
|
mp_obj_t mp_obj_tuple_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
|
||||||
|
|
||||||
if (value == MP_OBJ_SENTINEL) {
|
if (value == MP_OBJ_SENTINEL) {
|
||||||
// load
|
// load
|
||||||
mp_obj_tuple_t *self = MP_OBJ_TO_PTR(self_in);
|
mp_obj_tuple_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
@ -45,7 +45,7 @@ extern const mp_obj_type_t mp_type_tuple;
|
|||||||
void mp_obj_tuple_print(const mp_print_t *print, mp_obj_t o_in, mp_print_kind_t kind);
|
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_unary_op_t op, mp_obj_t self_in);
|
mp_obj_t mp_obj_tuple_unary_op(mp_unary_op_t op, mp_obj_t self_in);
|
||||||
mp_obj_t mp_obj_tuple_binary_op(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t rhs);
|
mp_obj_t mp_obj_tuple_binary_op(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t rhs);
|
||||||
mp_obj_t mp_obj_tuple_subscr(mp_obj_t base, mp_obj_t index, mp_obj_t value, mp_obj_t instance);
|
mp_obj_t mp_obj_tuple_subscr(mp_obj_t base, mp_obj_t index, mp_obj_t value);
|
||||||
mp_obj_t mp_obj_tuple_getiter(mp_obj_t o_in, mp_obj_iter_buf_t *iter_buf);
|
mp_obj_t mp_obj_tuple_getiter(mp_obj_t o_in, mp_obj_iter_buf_t *iter_buf);
|
||||||
|
|
||||||
extern const mp_obj_type_t mp_type_attrtuple;
|
extern const mp_obj_type_t mp_type_attrtuple;
|
||||||
|
12
py/objtype.c
12
py/objtype.c
@ -34,6 +34,7 @@
|
|||||||
#include "py/objtype.h"
|
#include "py/objtype.h"
|
||||||
#include "py/runtime.h"
|
#include "py/runtime.h"
|
||||||
|
|
||||||
|
#include "supervisor/shared/stack.h"
|
||||||
#include "supervisor/shared/translate.h"
|
#include "supervisor/shared/translate.h"
|
||||||
|
|
||||||
#if MICROPY_DEBUG_VERBOSE // print debugging info
|
#if MICROPY_DEBUG_VERBOSE // print debugging info
|
||||||
@ -825,7 +826,7 @@ STATIC void mp_obj_instance_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t instance_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value, mp_obj_t instance) {
|
STATIC mp_obj_t instance_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
|
||||||
mp_obj_instance_t *self = MP_OBJ_TO_PTR(self_in);
|
mp_obj_instance_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
mp_obj_t member[2] = {MP_OBJ_NULL};
|
mp_obj_t member[2] = {MP_OBJ_NULL};
|
||||||
struct class_lookup_data lookup = {
|
struct class_lookup_data lookup = {
|
||||||
@ -851,8 +852,13 @@ STATIC mp_obj_t instance_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value
|
|||||||
mp_obj_class_lookup(&lookup, self->base.type);
|
mp_obj_class_lookup(&lookup, self->base.type);
|
||||||
meth_args = 3;
|
meth_args = 3;
|
||||||
}
|
}
|
||||||
if (member[0] == MP_OBJ_SENTINEL) {
|
if (member[0] == MP_OBJ_SENTINEL) { // native base subscr exists
|
||||||
return mp_obj_subscr(self->subobj[0], index, value, instance);
|
mp_obj_type_t *subobj_type = mp_obj_get_type(self->subobj[0]);
|
||||||
|
// return mp_obj_subscr(self->subobj[0], index, value, instance);
|
||||||
|
mp_obj_t ret = subobj_type->subscr(self_in, index, value);
|
||||||
|
// May have called port specific C code. Make sure it didn't mess up the heap.
|
||||||
|
assert_heap_ok();
|
||||||
|
return ret;
|
||||||
} else if (member[0] != MP_OBJ_NULL) {
|
} else if (member[0] != MP_OBJ_NULL) {
|
||||||
mp_obj_t args[3] = {self_in, index, value};
|
mp_obj_t args[3] = {self_in, index, value};
|
||||||
// TODO probably need to call mp_convert_member_lookup, and use mp_call_method_n_kw
|
// TODO probably need to call mp_convert_member_lookup, and use mp_call_method_n_kw
|
||||||
|
@ -29,19 +29,19 @@
|
|||||||
|
|
||||||
STATIC mp_obj_t op_getitem(mp_obj_t self_in, mp_obj_t key_in) {
|
STATIC mp_obj_t op_getitem(mp_obj_t self_in, mp_obj_t key_in) {
|
||||||
mp_obj_type_t *type = mp_obj_get_type(self_in);
|
mp_obj_type_t *type = mp_obj_get_type(self_in);
|
||||||
return type->subscr(self_in, key_in, MP_OBJ_SENTINEL, self_in);
|
return type->subscr(self_in, key_in, MP_OBJ_SENTINEL);
|
||||||
}
|
}
|
||||||
MP_DEFINE_CONST_FUN_OBJ_2(mp_op_getitem_obj, op_getitem);
|
MP_DEFINE_CONST_FUN_OBJ_2(mp_op_getitem_obj, op_getitem);
|
||||||
|
|
||||||
STATIC mp_obj_t op_setitem(mp_obj_t self_in, mp_obj_t key_in, mp_obj_t value_in) {
|
STATIC mp_obj_t op_setitem(mp_obj_t self_in, mp_obj_t key_in, mp_obj_t value_in) {
|
||||||
mp_obj_type_t *type = mp_obj_get_type(self_in);
|
mp_obj_type_t *type = mp_obj_get_type(self_in);
|
||||||
return type->subscr(self_in, key_in, value_in, self_in);
|
return type->subscr(self_in, key_in, value_in);
|
||||||
}
|
}
|
||||||
MP_DEFINE_CONST_FUN_OBJ_3(mp_op_setitem_obj, op_setitem);
|
MP_DEFINE_CONST_FUN_OBJ_3(mp_op_setitem_obj, op_setitem);
|
||||||
|
|
||||||
STATIC mp_obj_t op_delitem(mp_obj_t self_in, mp_obj_t key_in) {
|
STATIC mp_obj_t op_delitem(mp_obj_t self_in, mp_obj_t key_in) {
|
||||||
mp_obj_type_t *type = mp_obj_get_type(self_in);
|
mp_obj_type_t *type = mp_obj_get_type(self_in);
|
||||||
return type->subscr(self_in, key_in, MP_OBJ_NULL, self_in);
|
return type->subscr(self_in, key_in, MP_OBJ_NULL);
|
||||||
}
|
}
|
||||||
MP_DEFINE_CONST_FUN_OBJ_2(mp_op_delitem_obj, op_delitem);
|
MP_DEFINE_CONST_FUN_OBJ_2(mp_op_delitem_obj, op_delitem);
|
||||||
|
|
||||||
|
4
py/vm.c
4
py/vm.c
@ -386,7 +386,7 @@ dispatch_loop:
|
|||||||
ENTRY(MP_BC_LOAD_SUBSCR): {
|
ENTRY(MP_BC_LOAD_SUBSCR): {
|
||||||
MARK_EXC_IP_SELECTIVE();
|
MARK_EXC_IP_SELECTIVE();
|
||||||
mp_obj_t index = POP();
|
mp_obj_t index = POP();
|
||||||
SET_TOP(mp_obj_subscr(TOP(), index, MP_OBJ_SENTINEL, TOP()));
|
SET_TOP(mp_obj_subscr(TOP(), index, MP_OBJ_SENTINEL));
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -464,7 +464,7 @@ dispatch_loop:
|
|||||||
|
|
||||||
ENTRY(MP_BC_STORE_SUBSCR):
|
ENTRY(MP_BC_STORE_SUBSCR):
|
||||||
MARK_EXC_IP_SELECTIVE();
|
MARK_EXC_IP_SELECTIVE();
|
||||||
mp_obj_subscr(sp[-1], sp[0], sp[-2], sp[-1]);
|
mp_obj_subscr(sp[-1], sp[0], sp[-2]);
|
||||||
sp -= 3;
|
sp -= 3;
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
|
|
||||||
|
@ -368,7 +368,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(pixelbuf_pixelbuf_fill_obj, pixelbuf_pixelbuf_f
|
|||||||
//|
|
//|
|
||||||
//| Sets the pixel value at the given index.
|
//| Sets the pixel value at the given index.
|
||||||
//|
|
//|
|
||||||
STATIC mp_obj_t pixelbuf_pixelbuf_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value, mp_obj_t instance) {
|
STATIC mp_obj_t pixelbuf_pixelbuf_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value) {
|
||||||
if (value == MP_OBJ_NULL) {
|
if (value == MP_OBJ_NULL) {
|
||||||
// delete item
|
// delete item
|
||||||
// slice deletion
|
// slice deletion
|
||||||
@ -431,7 +431,7 @@ STATIC mp_obj_t pixelbuf_pixelbuf_subscr(mp_obj_t self_in, mp_obj_t index_in, mp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (self->auto_write)
|
if (self->auto_write)
|
||||||
call_show(instance);
|
call_show(self_in);
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
#else
|
#else
|
||||||
return MP_OBJ_NULL; // op not supported
|
return MP_OBJ_NULL; // op not supported
|
||||||
@ -451,7 +451,7 @@ STATIC mp_obj_t pixelbuf_pixelbuf_subscr(mp_obj_t self_in, mp_obj_t index_in, mp
|
|||||||
pixelbuf_set_pixel(self->buf + offset, self->two_buffers ? self->rawbuf + offset : NULL,
|
pixelbuf_set_pixel(self->buf + offset, self->two_buffers ? self->rawbuf + offset : NULL,
|
||||||
self->brightness, value, &self->byteorder, self->byteorder.is_dotstar);
|
self->brightness, value, &self->byteorder, self->byteorder.is_dotstar);
|
||||||
if (self->auto_write)
|
if (self->auto_write)
|
||||||
call_show(instance);
|
call_show(self_in);
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -134,7 +134,7 @@ const mp_obj_property_t displayio_bitmap_height_obj = {
|
|||||||
//| bitmap[0,1] = 3
|
//| bitmap[0,1] = 3
|
||||||
//|
|
//|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
STATIC mp_obj_t bitmap_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t value_obj, mp_obj_t instance) {
|
STATIC mp_obj_t bitmap_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t value_obj) {
|
||||||
if (value_obj == mp_const_none) {
|
if (value_obj == mp_const_none) {
|
||||||
// delete item
|
// delete item
|
||||||
mp_raise_AttributeError(translate("Cannot delete values"));
|
mp_raise_AttributeError(translate("Cannot delete values"));
|
||||||
|
@ -311,7 +311,7 @@ STATIC mp_obj_t group_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
|
|||||||
//| del group[0]
|
//| del group[0]
|
||||||
//|
|
//|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
STATIC mp_obj_t group_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t value, mp_obj_t instance) {
|
STATIC mp_obj_t group_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t value) {
|
||||||
displayio_group_t *self = native_group(self_in);
|
displayio_group_t *self = native_group(self_in);
|
||||||
|
|
||||||
if (MP_OBJ_IS_TYPE(index_obj, &mp_type_slice)) {
|
if (MP_OBJ_IS_TYPE(index_obj, &mp_type_slice)) {
|
||||||
|
@ -96,7 +96,7 @@ STATIC mp_obj_t group_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
|
|||||||
//| palette[3] = bytearray(b'\x00\x00\xFF') # set using a bytearay of 3 or 4 bytes
|
//| palette[3] = bytearray(b'\x00\x00\xFF') # set using a bytearay of 3 or 4 bytes
|
||||||
//|
|
//|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
STATIC mp_obj_t palette_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value, mp_obj_t instance) {
|
STATIC mp_obj_t palette_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value) {
|
||||||
if (value == MP_OBJ_NULL) {
|
if (value == MP_OBJ_NULL) {
|
||||||
// delete item
|
// delete item
|
||||||
return MP_OBJ_NULL; // op not supported
|
return MP_OBJ_NULL; // op not supported
|
||||||
|
@ -349,7 +349,7 @@ const mp_obj_property_t displayio_tilegrid_pixel_shader_obj = {
|
|||||||
//|
|
//|
|
||||||
//| grid[0,0] = 10
|
//| grid[0,0] = 10
|
||||||
//|
|
//|
|
||||||
STATIC mp_obj_t tilegrid_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t value_obj, mp_obj_t instance) {
|
STATIC mp_obj_t tilegrid_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t value_obj) {
|
||||||
displayio_tilegrid_t *self = native_tilegrid(self_in);
|
displayio_tilegrid_t *self = native_tilegrid(self_in);
|
||||||
|
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ STATIC const mp_rom_map_elem_t nvm_bytearray_locals_dict_table[] = {
|
|||||||
|
|
||||||
STATIC MP_DEFINE_CONST_DICT(nvm_bytearray_locals_dict, nvm_bytearray_locals_dict_table);
|
STATIC MP_DEFINE_CONST_DICT(nvm_bytearray_locals_dict, nvm_bytearray_locals_dict_table);
|
||||||
|
|
||||||
STATIC mp_obj_t nvm_bytearray_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value, mp_obj_t instance) {
|
STATIC mp_obj_t nvm_bytearray_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value) {
|
||||||
if (value == MP_OBJ_NULL) {
|
if (value == MP_OBJ_NULL) {
|
||||||
// delete item
|
// delete item
|
||||||
// slice deletion
|
// slice deletion
|
||||||
|
@ -272,7 +272,7 @@ STATIC mp_obj_t pulsein_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
|
|||||||
//| pulses = pulseio.PulseIn(pin)
|
//| pulses = pulseio.PulseIn(pin)
|
||||||
//| print(pulses[0])
|
//| print(pulses[0])
|
||||||
//|
|
//|
|
||||||
STATIC mp_obj_t pulsein_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t value, mp_obj_t instance) {
|
STATIC mp_obj_t pulsein_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t value) {
|
||||||
if (value == mp_const_none) {
|
if (value == mp_const_none) {
|
||||||
// delete item
|
// delete item
|
||||||
mp_raise_AttributeError(translate("Cannot delete values"));
|
mp_raise_AttributeError(translate("Cannot delete values"));
|
||||||
|
@ -145,7 +145,7 @@ STATIC mp_obj_t random_choice(mp_obj_t seq) {
|
|||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
mp_raise_IndexError(translate("empty sequence"));
|
mp_raise_IndexError(translate("empty sequence"));
|
||||||
}
|
}
|
||||||
return mp_obj_subscr(seq, mp_obj_new_int(shared_modules_random_randrange(0, len, 1)), MP_OBJ_SENTINEL, seq);
|
return mp_obj_subscr(seq, mp_obj_new_int(shared_modules_random_randrange(0, len, 1)), MP_OBJ_SENTINEL);
|
||||||
}
|
}
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(random_choice_obj, random_choice);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_1(random_choice_obj, random_choice);
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ mp_obj_t common_hal_os_listdir(const char* path) {
|
|||||||
mp_obj_t next;
|
mp_obj_t next;
|
||||||
while ((next = mp_iternext(iter_obj)) != MP_OBJ_STOP_ITERATION) {
|
while ((next = mp_iternext(iter_obj)) != MP_OBJ_STOP_ITERATION) {
|
||||||
// next[0] is the filename.
|
// next[0] is the filename.
|
||||||
mp_obj_list_append(dir_list, mp_obj_subscr(next, MP_OBJ_NEW_SMALL_INT(0), MP_OBJ_SENTINEL, dir_list));
|
mp_obj_list_append(dir_list, mp_obj_subscr(next, MP_OBJ_NEW_SMALL_INT(0), MP_OBJ_SENTINEL));
|
||||||
RUN_BACKGROUND_TASKS;
|
RUN_BACKGROUND_TASKS;
|
||||||
}
|
}
|
||||||
return dir_list;
|
return dir_list;
|
||||||
|
Loading…
Reference in New Issue
Block a user