Skip to content
Snippets Groups Projects
Commit 300c8bd4 authored by Rachel Dowdall's avatar Rachel Dowdall
Browse files

Added ZeroDivisionError to float division.

parent a2f2f734
No related branches found
No related tags found
No related merge requests found
...@@ -201,6 +201,7 @@ extern const mp_obj_type_t mp_type_OverflowError; ...@@ -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) ...@@ -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);
......
#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) { ...@@ -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) ...@@ -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[] = { ...@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment