diff options
| author | Dan Halbert <halbert@halwitz.org> | 2018-03-30 13:47:55 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-03-30 13:47:55 -0400 |
| commit | bee0d2edb44f2bfe9442749a4f15fff5572eab6b (patch) | |
| tree | aa539fa517ed004e304d89515cd689b3335ac665 /py | |
| parent | 676ed4e1994e704b998deab11e25701954cdac3b (diff) | |
| parent | ff06a455995322978dbd9ad9291154ebbdf0abb5 (diff) | |
Merge pull request #710 from jepler/assertion-failures-to-exceptions
Assertion failures to exceptions
Diffstat (limited to 'py')
| -rw-r--r-- | py/objint_mpz.c | 4 | ||||
| -rw-r--r-- | py/objtype.c | 17 |
2 files changed, 18 insertions, 3 deletions
diff --git a/py/objint_mpz.c b/py/objint_mpz.c index 7b5cb0b9d..808fae6e4 100644 --- a/py/objint_mpz.c +++ b/py/objint_mpz.c @@ -343,6 +343,10 @@ mp_obj_t mp_obj_int_pow3(mp_obj_t base, mp_obj_t exponent, mp_obj_t modulus) { mpz_t *rhs = mp_mpz_for_int(exponent, &r_temp); mpz_t *mod = mp_mpz_for_int(modulus, &m_temp); + if (mpz_is_zero(mod)) { + mp_raise_msg(&mp_type_ValueError, "pow() 3rd argument cannot be 0"); + } + mpz_pow3_inpl(&(res_p->mpz), lhs, rhs, mod); if (lhs == &l_temp) { mpz_deinit(lhs); } diff --git a/py/objtype.c b/py/objtype.c index 7262892bd..5b70e8e48 100644 --- a/py/objtype.c +++ b/py/objtype.c @@ -981,8 +981,14 @@ const mp_obj_type_t mp_type_type = { }; mp_obj_t mp_obj_new_type(qstr name, mp_obj_t bases_tuple, mp_obj_t locals_dict) { - assert(MP_OBJ_IS_TYPE(bases_tuple, &mp_type_tuple)); // MicroPython restriction, for now - assert(MP_OBJ_IS_TYPE(locals_dict, &mp_type_dict)); // MicroPython restriction, for now + if(!MP_OBJ_IS_TYPE(bases_tuple, &mp_type_tuple)) { + // MicroPython restriction, for now + mp_raise_TypeError("type() argument 2 must be tuple"); + } + if(!MP_OBJ_IS_TYPE(locals_dict, &mp_type_dict)) { + // MicroPython restriction, for now + mp_raise_TypeError("type() argument 3 must be dict"); + } // TODO might need to make a copy of locals_dict; at least that's how CPython does it @@ -991,7 +997,9 @@ mp_obj_t mp_obj_new_type(qstr name, mp_obj_t bases_tuple, mp_obj_t locals_dict) mp_obj_t *items; mp_obj_tuple_get(bases_tuple, &len, &items); for (size_t i = 0; i < len; i++) { - assert(MP_OBJ_IS_TYPE(items[i], &mp_type_type)); + if(!MP_OBJ_IS_TYPE(items[i], &mp_type_type)) { + mp_raise_TypeError("type is not an acceptable base type"); + } mp_obj_type_t *t = MP_OBJ_TO_PTR(items[i]); // TODO: Verify with CPy, tested on function type if (t->make_new == NULL) { @@ -1077,6 +1085,9 @@ STATIC mp_obj_t super_make_new(const mp_obj_type_t *type_in, size_t n_args, size // 0 arguments are turned into 2 in the compiler // 1 argument is not yet implemented mp_arg_check_num(n_args, n_kw, 2, 2, false); + if(!MP_OBJ_IS_TYPE(args[0], &mp_type_type)) { + mp_raise_TypeError("first argument to super() must be type"); + } mp_obj_super_t *o = m_new_obj(mp_obj_super_t); *o = (mp_obj_super_t){{type_in}, args[0], args[1]}; return MP_OBJ_FROM_PTR(o); |
