diff options
author | Damien George <damien.p.george@gmail.com> | 2014-01-23 18:27:51 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-01-23 18:27:51 +0000 |
commit | 1e708fed188e3471cc7bed13635ba69b48bc8cf7 (patch) | |
tree | a8322082bbcf08272ae039843de237f0bf427134 /py/objbool.c | |
parent | b051e7d167ac00576e45a6a1de291b8ff6bcd6a3 (diff) |
py: Implement bool unary op; tidy up unary op dispatch.
Diffstat (limited to 'py/objbool.c')
-rw-r--r-- | py/objbool.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/py/objbool.c b/py/objbool.c index 729ffb4e6..53b2bf8ed 100644 --- a/py/objbool.c +++ b/py/objbool.c @@ -6,6 +6,7 @@ #include "mpconfig.h" #include "qstr.h" #include "obj.h" +#include "runtime0.h" #include "runtime.h" typedef struct _mp_obj_bool_t { @@ -32,11 +33,24 @@ static mp_obj_t bool_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp } } +static mp_obj_t bool_unary_op(int op, mp_obj_t o_in) { + machine_int_t value = ((mp_obj_bool_t*)o_in)->value; + switch (op) { + case RT_UNARY_OP_NOT: if (value) { return mp_const_false; } else { return mp_const_true; } + case RT_UNARY_OP_POSITIVE: return MP_OBJ_NEW_SMALL_INT(value); + case RT_UNARY_OP_NEGATIVE: return MP_OBJ_NEW_SMALL_INT(-value); + case RT_UNARY_OP_INVERT: + default: // no other cases + return MP_OBJ_NEW_SMALL_INT(~value); + } +} + const mp_obj_type_t bool_type = { { &mp_const_type }, "bool", .print = bool_print, .make_new = bool_make_new, + .unary_op = bool_unary_op, }; static const mp_obj_bool_t false_obj = {{&bool_type}, false}; |