summaryrefslogtreecommitdiffstatshomepage
path: root/py/runtime.c
diff options
context:
space:
mode:
Diffstat (limited to 'py/runtime.c')
-rw-r--r--py/runtime.c58
1 files changed, 29 insertions, 29 deletions
diff --git a/py/runtime.c b/py/runtime.c
index 53861f1e40..29571a44b8 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -467,6 +467,35 @@ mp_obj_t rt_binary_op(int op, mp_obj_t lhs, mp_obj_t rhs) {
// then fail
// note that list does not implement + or +=, so that inplace_concat is reached first for +=
+ // deal with == and != for all types
+ if (op == RT_COMPARE_OP_EQUAL || op == RT_COMPARE_OP_NOT_EQUAL) {
+ if (mp_obj_equal(lhs, rhs)) {
+ if (op == RT_COMPARE_OP_EQUAL) {
+ return mp_const_true;
+ } else {
+ return mp_const_false;
+ }
+ } else {
+ if (op == RT_COMPARE_OP_EQUAL) {
+ return mp_const_false;
+ } else {
+ return mp_const_true;
+ }
+ }
+ }
+
+ // deal with exception_match for all types
+ if (op == RT_COMPARE_OP_EXCEPTION_MATCH) {
+ // TODO properly! at the moment it just compares the exception identifier for equality
+ if (MP_OBJ_IS_TYPE(lhs, &exception_type) && MP_OBJ_IS_TYPE(rhs, &exception_type)) {
+ if (mp_obj_exception_get_type(lhs) == mp_obj_exception_get_type(rhs)) {
+ return mp_const_true;
+ } else {
+ return mp_const_false;
+ }
+ }
+ }
+
if (MP_OBJ_IS_SMALL_INT(lhs)) {
mp_small_int_t lhs_val = MP_OBJ_SMALL_INT_VALUE(lhs);
if (MP_OBJ_IS_SMALL_INT(rhs)) {
@@ -530,35 +559,6 @@ mp_obj_t rt_binary_op(int op, mp_obj_t lhs, mp_obj_t rhs) {
return mp_obj_complex_binary_op(op, lhs_val, 0, rhs);
}
} else {
- // deal with == and !=
- if (op == RT_COMPARE_OP_EQUAL || op == RT_COMPARE_OP_NOT_EQUAL) {
- if (mp_obj_equal(lhs, rhs)) {
- if (op == RT_COMPARE_OP_EQUAL) {
- return mp_const_true;
- } else {
- return mp_const_false;
- }
- } else {
- if (op == RT_COMPARE_OP_EQUAL) {
- return mp_const_false;
- } else {
- return mp_const_true;
- }
- }
- }
-
- // deal with exception_match
- if (op == RT_COMPARE_OP_EXCEPTION_MATCH) {
- // TODO properly! at the moment it just compares the exception identifier for equality
- if (MP_OBJ_IS_TYPE(lhs, &exception_type) && MP_OBJ_IS_TYPE(rhs, &exception_type)) {
- if (mp_obj_exception_get_type(lhs) == mp_obj_exception_get_type(rhs)) {
- return mp_const_true;
- } else {
- return mp_const_false;
- }
- }
- }
-
if (MP_OBJ_IS_OBJ(lhs)) {
mp_obj_base_t *o = lhs;
if (o->type->binary_op != NULL) {