Skip to content

Commit 7d0d721

Browse files
committed
py: Use mp_raise_msg helper function where appropriate.
Saves the following number of bytes of code space: 176 for bare-arm, 352 for minimal, 272 for unix x86-64, 140 for stmhal, 120 for esp8266.
1 parent 6caca32 commit 7d0d721

24 files changed

+83
-119
lines changed

py/argcheck.c

+4-7
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ void mp_arg_check_num(size_t n_args, size_t n_kw, size_t n_args_min, size_t n_ar
3737
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
3838
mp_arg_error_terse_mismatch();
3939
} else {
40-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError,
41-
"function does not take keyword arguments"));
40+
mp_raise_msg(&mp_type_TypeError, "function does not take keyword arguments");
4241
}
4342
}
4443

@@ -116,17 +115,15 @@ void mp_arg_parse_all(size_t n_pos, const mp_obj_t *pos, mp_map_t *kws, size_t n
116115
mp_arg_error_terse_mismatch();
117116
} else {
118117
// TODO better error message
119-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError,
120-
"extra positional arguments given"));
118+
mp_raise_msg(&mp_type_TypeError, "extra positional arguments given");
121119
}
122120
}
123121
if (kws_found < kws->used) {
124122
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
125123
mp_arg_error_terse_mismatch();
126124
} else {
127125
// TODO better error message
128-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError,
129-
"extra keyword arguments given"));
126+
mp_raise_msg(&mp_type_TypeError, "extra keyword arguments given");
130127
}
131128
}
132129
}
@@ -139,7 +136,7 @@ void mp_arg_parse_all_kw_array(size_t n_pos, size_t n_kw, const mp_obj_t *args,
139136

140137
#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE || _MSC_VER
141138
NORETURN void mp_arg_error_terse_mismatch(void) {
142-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, "argument num/types mismatch"));
139+
mp_raise_msg(&mp_type_TypeError, "argument num/types mismatch");
143140
}
144141
#endif
145142

py/bc.c

+2-3
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ void mp_setup_code_state(mp_code_state_t *code_state, mp_obj_fun_bc_t *self, siz
185185
}
186186
// Didn't find name match with positional args
187187
if ((scope_flags & MP_SCOPE_FLAG_VARKEYWORDS) == 0) {
188-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, "function does not take keyword arguments"));
188+
mp_raise_msg(&mp_type_TypeError, "function does not take keyword arguments");
189189
}
190190
mp_obj_dict_store(dict, kwargs[2 * i], kwargs[2 * i + 1]);
191191
continue2:;
@@ -234,8 +234,7 @@ continue2:;
234234
} else {
235235
// no keyword arguments given
236236
if (n_kwonly_args != 0) {
237-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError,
238-
"function missing keyword-only argument"));
237+
mp_raise_msg(&mp_type_TypeError, "function missing keyword-only argument");
239238
}
240239
if ((scope_flags & MP_SCOPE_FLAG_VARKEYWORDS) != 0) {
241240
*var_pos_kw_args = mp_obj_new_dict(0);

py/builtinevex.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ STATIC mp_obj_t mp_builtin_compile(size_t n_args, const mp_obj_t *args) {
9595
case MP_QSTR_exec: parse_input_kind = MP_PARSE_FILE_INPUT; break;
9696
case MP_QSTR_eval: parse_input_kind = MP_PARSE_EVAL_INPUT; break;
9797
default:
98-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "bad compile mode"));
98+
mp_raise_msg(&mp_type_ValueError, "bad compile mode");
9999
}
100100

101101
mp_obj_code_t *code = m_new_obj(mp_obj_code_t);

py/builtinimport.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ STATIC void do_load_from_lexer(mp_obj_t module_obj, mp_lexer_t *lex, const char
138138
if (lex == NULL) {
139139
// we verified the file exists using stat, but lexer could still fail
140140
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
141-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ImportError, "module not found"));
141+
mp_raise_msg(&mp_type_ImportError, "module not found");
142142
} else {
143143
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ImportError,
144144
"no module named '%s'", fname));
@@ -340,7 +340,7 @@ mp_obj_t mp_builtin___import__(size_t n_args, const mp_obj_t *args) {
340340
DEBUG_printf("Warning: no dots in current module name and level>0\n");
341341
p = this_name + this_name_l;
342342
} else if (level != -1) {
343-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ImportError, "Invalid relative import"));
343+
mp_raise_msg(&mp_type_ImportError, "invalid relative import");
344344
}
345345

346346
uint new_mod_l = (mod_len == 0 ? (size_t)(p - this_name) : (size_t)(p - this_name) + 1 + mod_len);
@@ -355,7 +355,7 @@ mp_obj_t mp_builtin___import__(size_t n_args, const mp_obj_t *args) {
355355
DEBUG_printf("Resolved base name for relative import: '%s'\n", qstr_str(new_mod_q));
356356
if (new_mod_q == MP_QSTR_) {
357357
// CPython raises SystemError
358-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ImportError, "cannot perform relative import"));
358+
mp_raise_msg(&mp_type_ImportError, "cannot perform relative import");
359359
}
360360
module_name = MP_OBJ_NEW_QSTR(new_mod_q);
361361
mod_str = new_mod;
@@ -425,7 +425,7 @@ mp_obj_t mp_builtin___import__(size_t n_args, const mp_obj_t *args) {
425425
#endif
426426
// couldn't find the file, so fail
427427
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
428-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ImportError, "module not found"));
428+
mp_raise_msg(&mp_type_ImportError, "module not found");
429429
} else {
430430
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ImportError,
431431
"no module named '%q'", mod_name));

py/modbuiltins.c

+4-5
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ STATIC mp_obj_t mp_builtin_chr(mp_obj_t o_in) {
178178
str[3] = (c & 0x3F) | 0x80;
179179
len = 4;
180180
} else {
181-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "chr() arg not in range(0x110000)"));
181+
mp_raise_msg(&mp_type_ValueError, "chr() arg not in range(0x110000)");
182182
}
183183
return mp_obj_new_str(str, len, true);
184184
#else
@@ -187,7 +187,7 @@ STATIC mp_obj_t mp_builtin_chr(mp_obj_t o_in) {
187187
char str[1] = {ord};
188188
return mp_obj_new_str(str, 1, true);
189189
} else {
190-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "chr() arg not in range(256)"));
190+
mp_raise_msg(&mp_type_ValueError, "chr() arg not in range(256)");
191191
}
192192
#endif
193193
}
@@ -286,7 +286,7 @@ STATIC mp_obj_t mp_builtin_min_max(size_t n_args, const mp_obj_t *args, mp_map_t
286286
if (default_elem != NULL) {
287287
best_obj = default_elem->value;
288288
} else {
289-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "arg is an empty sequence"));
289+
mp_raise_msg(&mp_type_ValueError, "arg is an empty sequence");
290290
}
291291
}
292292
return best_obj;
@@ -507,8 +507,7 @@ MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_sum_obj, 1, 2, mp_builtin_sum);
507507

508508
STATIC mp_obj_t mp_builtin_sorted(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs) {
509509
if (n_args > 1) {
510-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError,
511-
"must use keyword argument for key function"));
510+
mp_raise_msg(&mp_type_TypeError, "must use keyword argument for key function");
512511
}
513512
mp_obj_t self = mp_type_list.make_new(&mp_type_list, 1, 0, args);
514513
mp_obj_list_sort(1, &self, kwargs);

py/modthread.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ STATIC mp_obj_t mod_thread_start_new_thread(size_t n_args, const mp_obj_t *args)
239239
} else {
240240
// positional and keyword arguments
241241
if (mp_obj_get_type(args[2]) != &mp_type_dict) {
242-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, "expecting a dict for keyword args"));
242+
mp_raise_msg(&mp_type_TypeError, "expecting a dict for keyword args");
243243
}
244244
mp_map_t *map = &((mp_obj_dict_t*)MP_OBJ_TO_PTR(args[2]))->map;
245245
th_args = m_new_obj_var(thread_entry_args_t, mp_obj_t, pos_args_len + 2 * map->used);

py/obj.c

+11-20
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,7 @@ mp_int_t mp_obj_get_int(mp_const_obj_t arg) {
233233
return mp_obj_int_get_checked(arg);
234234
} else {
235235
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
236-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError,
237-
"can't convert to int"));
236+
mp_raise_msg(&mp_type_TypeError, "can't convert to int");
238237
} else {
239238
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError,
240239
"can't convert %s to int", mp_obj_get_type_str(arg)));
@@ -282,8 +281,7 @@ mp_float_t mp_obj_get_float(mp_obj_t arg) {
282281
return mp_obj_float_get(arg);
283282
} else {
284283
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
285-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError,
286-
"can't convert to float"));
284+
mp_raise_msg(&mp_type_TypeError, "can't convert to float");
287285
} else {
288286
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError,
289287
"can't convert %s to float", mp_obj_get_type_str(arg)));
@@ -312,8 +310,7 @@ void mp_obj_get_complex(mp_obj_t arg, mp_float_t *real, mp_float_t *imag) {
312310
mp_obj_complex_get(arg, real, imag);
313311
} else {
314312
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
315-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError,
316-
"can't convert to complex"));
313+
mp_raise_msg(&mp_type_TypeError, "can't convert to complex");
317314
} else {
318315
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError,
319316
"can't convert %s to complex", mp_obj_get_type_str(arg)));
@@ -331,8 +328,7 @@ void mp_obj_get_array(mp_obj_t o, mp_uint_t *len, mp_obj_t **items) {
331328
mp_obj_list_get(o, len, items);
332329
} else {
333330
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
334-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError,
335-
"expected tuple/list"));
331+
mp_raise_msg(&mp_type_TypeError, "expected tuple/list");
336332
} else {
337333
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError,
338334
"object '%s' is not a tuple or list", mp_obj_get_type_str(o)));
@@ -346,8 +342,7 @@ void mp_obj_get_array_fixed_n(mp_obj_t o, mp_uint_t len, mp_obj_t **items) {
346342
mp_obj_get_array(o, &seq_len, items);
347343
if (seq_len != len) {
348344
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
349-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError,
350-
"tuple/list has wrong length"));
345+
mp_raise_msg(&mp_type_ValueError, "tuple/list has wrong length");
351346
} else {
352347
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError,
353348
"requested length %d but object has length %d", (int)len, (int)seq_len));
@@ -362,8 +357,7 @@ mp_uint_t mp_get_index(const mp_obj_type_t *type, mp_uint_t len, mp_obj_t index,
362357
i = MP_OBJ_SMALL_INT_VALUE(index);
363358
} else if (!mp_obj_get_int_maybe(index, &i)) {
364359
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
365-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError,
366-
"indices must be integers"));
360+
mp_raise_msg(&mp_type_TypeError, "indices must be integers");
367361
} else {
368362
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError,
369363
"%q indices must be integers, not %s",
@@ -383,7 +377,7 @@ mp_uint_t mp_get_index(const mp_obj_type_t *type, mp_uint_t len, mp_obj_t index,
383377
} else {
384378
if (i < 0 || (mp_uint_t)i >= len) {
385379
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
386-
nlr_raise(mp_obj_new_exception_msg(&mp_type_IndexError, "index out of range"));
380+
mp_raise_msg(&mp_type_IndexError, "index out of range");
387381
} else {
388382
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_IndexError,
389383
"%q index out of range", type->name));
@@ -416,8 +410,7 @@ mp_obj_t mp_obj_len(mp_obj_t o_in) {
416410
mp_obj_t len = mp_obj_len_maybe(o_in);
417411
if (len == MP_OBJ_NULL) {
418412
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
419-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError,
420-
"object has no len"));
413+
mp_raise_msg(&mp_type_TypeError, "object has no len");
421414
} else {
422415
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError,
423416
"object of type '%s' has no len()", mp_obj_get_type_str(o_in)));
@@ -458,8 +451,7 @@ mp_obj_t mp_obj_subscr(mp_obj_t base, mp_obj_t index, mp_obj_t value) {
458451
}
459452
if (value == MP_OBJ_NULL) {
460453
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
461-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError,
462-
"object does not support item deletion"));
454+
mp_raise_msg(&mp_type_TypeError, "object does not support item deletion");
463455
} else {
464456
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError,
465457
"'%s' object does not support item deletion", mp_obj_get_type_str(base)));
@@ -474,8 +466,7 @@ mp_obj_t mp_obj_subscr(mp_obj_t base, mp_obj_t index, mp_obj_t value) {
474466
}
475467
} else {
476468
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
477-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError,
478-
"object does not support item assignment"));
469+
mp_raise_msg(&mp_type_TypeError, "object does not support item assignment");
479470
} else {
480471
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError,
481472
"'%s' object does not support item assignment", mp_obj_get_type_str(base)));
@@ -504,7 +495,7 @@ bool mp_get_buffer(mp_obj_t obj, mp_buffer_info_t *bufinfo, mp_uint_t flags) {
504495

505496
void mp_get_buffer_raise(mp_obj_t obj, mp_buffer_info_t *bufinfo, mp_uint_t flags) {
506497
if (!mp_get_buffer(obj, bufinfo, flags)) {
507-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, "object with buffer protocol required"));
498+
mp_raise_msg(&mp_type_TypeError, "object with buffer protocol required");
508499
}
509500
}
510501

py/objarray.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ STATIC void array_print(const mp_print_t *print, mp_obj_t o_in, mp_print_kind_t
9595
STATIC mp_obj_array_t *array_new(char typecode, mp_uint_t n) {
9696
int typecode_size = mp_binary_get_size('@', typecode, NULL);
9797
if (typecode_size == 0) {
98-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "bad typecode"));
98+
mp_raise_msg(&mp_type_ValueError, "bad typecode");
9999
}
100100
mp_obj_array_t *o = m_new_obj(mp_obj_array_t);
101101
#if MICROPY_PY_BUILTINS_BYTEARRAY && MICROPY_PY_ARRAY
@@ -395,7 +395,7 @@ STATIC mp_obj_t array_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value
395395
mp_obj_array_t *src_slice = MP_OBJ_TO_PTR(value);
396396
if (item_sz != mp_binary_get_size('@', src_slice->typecode & TYPECODE_MASK, NULL)) {
397397
compat_error:
398-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "lhs and rhs should be compatible"));
398+
mp_raise_msg(&mp_type_ValueError, "lhs and rhs should be compatible");
399399
}
400400
src_len = src_slice->len;
401401
src_items = src_slice->items;

py/objcomplex.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ mp_obj_t mp_obj_complex_binary_op(mp_uint_t op, mp_float_t lhs_real, mp_float_t
197197
case MP_BINARY_OP_INPLACE_TRUE_DIVIDE:
198198
if (rhs_imag == 0) {
199199
if (rhs_real == 0) {
200-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ZeroDivisionError, "complex division by zero"));
200+
mp_raise_msg(&mp_type_ZeroDivisionError, "complex division by zero");
201201
}
202202
lhs_real /= rhs_real;
203203
lhs_imag /= rhs_real;
@@ -226,7 +226,7 @@ mp_obj_t mp_obj_complex_binary_op(mp_uint_t op, mp_float_t lhs_real, mp_float_t
226226
lhs_real = 1;
227227
rhs_real = 0;
228228
} else {
229-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ZeroDivisionError, "0.0 to a complex power"));
229+
mp_raise_msg(&mp_type_ZeroDivisionError, "0.0 to a complex power");
230230
}
231231
} else {
232232
mp_float_t ln1 = MICROPY_FLOAT_C_FUN(log)(abs1);

py/objdict.c

+2-4
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ STATIC mp_obj_t dict_popitem(mp_obj_t self_in) {
343343
mp_uint_t cur = 0;
344344
mp_map_elem_t *next = dict_iter_next(self, &cur);
345345
if (next == NULL) {
346-
nlr_raise(mp_obj_new_exception_msg(&mp_type_KeyError, "popitem(): dictionary is empty"));
346+
mp_raise_msg(&mp_type_KeyError, "popitem(): dictionary is empty");
347347
}
348348
self->map.used--;
349349
mp_obj_t items[] = {next->key, next->value};
@@ -385,9 +385,7 @@ STATIC mp_obj_t dict_update(size_t n_args, const mp_obj_t *args, mp_map_t *kwarg
385385
if (key == MP_OBJ_STOP_ITERATION
386386
|| value == MP_OBJ_STOP_ITERATION
387387
|| stop != MP_OBJ_STOP_ITERATION) {
388-
nlr_raise(mp_obj_new_exception_msg(
389-
&mp_type_ValueError,
390-
"dictionary update sequence has the wrong length"));
388+
mp_raise_msg(&mp_type_ValueError, "dictionary update sequence has the wrong length");
391389
} else {
392390
mp_map_lookup(&self->map, key, MP_MAP_LOOKUP_ADD_IF_NOT_FOUND)->value = value;
393391
}

py/objfloat.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ mp_obj_t mp_obj_float_binary_op(mp_uint_t op, mp_float_t lhs_val, mp_obj_t rhs_i
198198
case MP_BINARY_OP_INPLACE_FLOOR_DIVIDE:
199199
if (rhs_val == 0) {
200200
zero_division_error:
201-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ZeroDivisionError, "division by zero"));
201+
mp_raise_msg(&mp_type_ZeroDivisionError, "division by zero");
202202
}
203203
// Python specs require that x == (x//y)*y + (x%y) so we must
204204
// call divmod to compute the correct floor division, which

py/objgenerator.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ mp_vm_return_kind_t mp_obj_gen_resume(mp_obj_t self_in, mp_obj_t send_value, mp_
105105
}
106106
if (self->code_state.sp == self->code_state.state - 1) {
107107
if (send_value != mp_const_none) {
108-
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, "can't send non-None value to a just-started generator"));
108+
mp_raise_msg(&mp_type_TypeError, "can't send non-None value to a just-started generator");
109109
}
110110
} else {
111111
*self->code_state.sp = send_value;
@@ -157,7 +157,7 @@ STATIC mp_obj_t gen_resume_and_raise(mp_obj_t self_in, mp_obj_t send_value, mp_o
157157

158158
case MP_VM_RETURN_YIELD:
159159
if (throw_value != MP_OBJ_NULL && mp_obj_is_subclass_fast(MP_OBJ_FROM_PTR(mp_obj_get_type(throw_value)), MP_OBJ_FROM_PTR(&mp_type_GeneratorExit))) {
160-
nlr_raise(mp_obj_new_exception_msg(&mp_type_RuntimeError, "generator ignored GeneratorExit"));
160+
mp_raise_msg(&mp_type_RuntimeError, "generator ignored GeneratorExit");
161161
}
162162
return ret;
163163

@@ -209,7 +209,7 @@ STATIC mp_obj_t gen_instance_close(mp_obj_t self_in) {
209209
mp_obj_t ret;
210210
switch (mp_obj_gen_resume(self_in, mp_const_none, MP_OBJ_FROM_PTR(&mp_const_GeneratorExit_obj), &ret)) {
211211
case MP_VM_RETURN_YIELD:
212-
nlr_raise(mp_obj_new_exception_msg(&mp_type_RuntimeError, "generator ignored GeneratorExit"));
212+
mp_raise_msg(&mp_type_RuntimeError, "generator ignored GeneratorExit");
213213

214214
// Swallow StopIteration & GeneratorExit (== successful close), and re-raise any other
215215
case MP_VM_RETURN_EXCEPTION:

0 commit comments

Comments
 (0)