|
|
@@ -222,10 +222,24 @@ STATIC mp_obj_t gen_instance_close(mp_obj_t self_in) {
|
|
|
|
|
|
STATIC MP_DEFINE_CONST_FUN_OBJ_1(gen_instance_close_obj, gen_instance_close);
|
|
|
|
|
|
+STATIC mp_obj_t gen_instance_pend_throw(mp_obj_t self_in, mp_obj_t exc_in) {
|
|
|
+ mp_obj_gen_instance_t *self = MP_OBJ_TO_PTR(self_in);
|
|
|
+ if (self->code_state.sp == self->code_state.state - 1) {
|
|
|
+ mp_raise_TypeError("can't pend throw to just-started generator");
|
|
|
+ }
|
|
|
+ mp_obj_t prev = *self->code_state.sp;
|
|
|
+ *self->code_state.sp = exc_in;
|
|
|
+ return prev;
|
|
|
+}
|
|
|
+STATIC MP_DEFINE_CONST_FUN_OBJ_2(gen_instance_pend_throw_obj, gen_instance_pend_throw);
|
|
|
+
|
|
|
STATIC const mp_rom_map_elem_t gen_instance_locals_dict_table[] = {
|
|
|
{ MP_ROM_QSTR(MP_QSTR_close), MP_ROM_PTR(&gen_instance_close_obj) },
|
|
|
{ MP_ROM_QSTR(MP_QSTR_send), MP_ROM_PTR(&gen_instance_send_obj) },
|
|
|
{ MP_ROM_QSTR(MP_QSTR_throw), MP_ROM_PTR(&gen_instance_throw_obj) },
|
|
|
+ #if MICROPY_PY_GENERATOR_PEND_THROW
|
|
|
+ { MP_ROM_QSTR(MP_QSTR_pend_throw), MP_ROM_PTR(&gen_instance_pend_throw_obj) },
|
|
|
+ #endif
|
|
|
};
|
|
|
|
|
|
STATIC MP_DEFINE_CONST_DICT(gen_instance_locals_dict, gen_instance_locals_dict_table);
|