py: Implement bool unary op; tidy up unary op dispatch.
diff --git a/py/objbool.c b/py/objbool.c
index 729ffb4..53b2bf8 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_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};