Added ZeroDivisionError to float division.
This commit is contained in:
parent
a2f2f734ed
commit
300c8bd4c2
1
py/obj.h
1
py/obj.h
@ -201,6 +201,7 @@ extern const mp_obj_type_t mp_type_OverflowError;
|
|||||||
extern const mp_obj_type_t mp_type_OSError;
|
extern const mp_obj_type_t mp_type_OSError;
|
||||||
extern const mp_obj_type_t mp_type_NotImplementedError;
|
extern const mp_obj_type_t mp_type_NotImplementedError;
|
||||||
extern const mp_obj_type_t mp_type_StopIteration;
|
extern const mp_obj_type_t mp_type_StopIteration;
|
||||||
|
extern const mp_obj_type_t mp_type_ZeroDivisionError;
|
||||||
|
|
||||||
// Constant objects, globally accessible
|
// Constant objects, globally accessible
|
||||||
|
|
||||||
|
@ -93,6 +93,7 @@ MP_DEFINE_EXCEPTION(OverflowError, BaseException)
|
|||||||
MP_DEFINE_EXCEPTION(OSError, BaseException)
|
MP_DEFINE_EXCEPTION(OSError, BaseException)
|
||||||
MP_DEFINE_EXCEPTION(NotImplementedError, BaseException)
|
MP_DEFINE_EXCEPTION(NotImplementedError, BaseException)
|
||||||
MP_DEFINE_EXCEPTION(StopIteration, BaseException)
|
MP_DEFINE_EXCEPTION(StopIteration, BaseException)
|
||||||
|
MP_DEFINE_EXCEPTION(ZeroDivisionError, BaseException)
|
||||||
|
|
||||||
mp_obj_t mp_obj_new_exception(const mp_obj_type_t *exc_type) {
|
mp_obj_t mp_obj_new_exception(const mp_obj_type_t *exc_type) {
|
||||||
return mp_obj_new_exception_msg_varg(exc_type, NULL);
|
return mp_obj_new_exception_msg_varg(exc_type, NULL);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#include "nlr.h"
|
#include "nlr.h"
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
@ -105,8 +106,12 @@ mp_obj_t mp_obj_float_binary_op(int op, mp_float_t lhs_val, mp_obj_t rhs_in) {
|
|||||||
case RT_BINARY_OP_INPLACE_FLOOR_DIVIDE: val = lhs_val / rhs_val; break;
|
case RT_BINARY_OP_INPLACE_FLOOR_DIVIDE: val = lhs_val / rhs_val; break;
|
||||||
*/
|
*/
|
||||||
case RT_BINARY_OP_TRUE_DIVIDE:
|
case RT_BINARY_OP_TRUE_DIVIDE:
|
||||||
case RT_BINARY_OP_INPLACE_TRUE_DIVIDE: lhs_val /= rhs_val; break;
|
case RT_BINARY_OP_INPLACE_TRUE_DIVIDE:
|
||||||
|
lhs_val /= rhs_val;
|
||||||
|
if (isinf(lhs_val)){ // check for division by zero
|
||||||
|
nlr_jump(mp_obj_new_exception_msg(&mp_type_ZeroDivisionError, "float division by zero"));
|
||||||
|
}
|
||||||
|
break;
|
||||||
case RT_BINARY_OP_LESS: return MP_BOOL(lhs_val < rhs_val);
|
case RT_BINARY_OP_LESS: return MP_BOOL(lhs_val < rhs_val);
|
||||||
case RT_BINARY_OP_MORE: return MP_BOOL(lhs_val > rhs_val);
|
case RT_BINARY_OP_MORE: return MP_BOOL(lhs_val > rhs_val);
|
||||||
case RT_BINARY_OP_LESS_EQUAL: return MP_BOOL(lhs_val <= rhs_val);
|
case RT_BINARY_OP_LESS_EQUAL: return MP_BOOL(lhs_val <= rhs_val);
|
||||||
|
@ -47,6 +47,7 @@ Q(SyntaxError)
|
|||||||
Q(TypeError)
|
Q(TypeError)
|
||||||
Q(ValueError)
|
Q(ValueError)
|
||||||
Q(OverflowError)
|
Q(OverflowError)
|
||||||
|
Q(ZeroDivisionError)
|
||||||
|
|
||||||
Q(NoneType)
|
Q(NoneType)
|
||||||
|
|
||||||
|
@ -158,6 +158,7 @@ STATIC const mp_builtin_elem_t builtin_table[] = {
|
|||||||
{ MP_QSTR_OSError, (mp_obj_t)&mp_type_OSError },
|
{ MP_QSTR_OSError, (mp_obj_t)&mp_type_OSError },
|
||||||
{ MP_QSTR_NotImplementedError, (mp_obj_t)&mp_type_NotImplementedError },
|
{ MP_QSTR_NotImplementedError, (mp_obj_t)&mp_type_NotImplementedError },
|
||||||
{ MP_QSTR_StopIteration, (mp_obj_t)&mp_type_StopIteration },
|
{ MP_QSTR_StopIteration, (mp_obj_t)&mp_type_StopIteration },
|
||||||
|
{ MP_QSTR_ZeroDivisionError, (mp_obj_t)&mp_type_ZeroDivisionError },
|
||||||
|
|
||||||
// Extra builtins as defined by a port
|
// Extra builtins as defined by a port
|
||||||
MICROPY_EXTRA_BUILTINS
|
MICROPY_EXTRA_BUILTINS
|
||||||
|
Loading…
Reference in New Issue
Block a user