summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-01-11 10:47:22 +0000
committerDamien George <damien.p.george@gmail.com>2014-01-11 10:47:22 +0000
commitbcbeea0a477ed977a668e67f6f5402260d26ceb9 (patch)
tree471d3aefbfacf2c8e6e8cc8af132495ffd2c4d36
parentcf11c961b4d602c8b77f7d67aa976cf3fbb026b5 (diff)
downloadmicropython-bcbeea0a477ed977a668e67f6f5402260d26ceb9.tar.gz
micropython-bcbeea0a477ed977a668e67f6f5402260d26ceb9.zip
py: Fix bug where == and != not handled for small_ints.
-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) {