py/emitnative: Raise ViperTypeError for unsupported unary ops.
diff --git a/py/emitnative.c b/py/emitnative.c
index 43dbcf0..7c87b03 100644
--- a/py/emitnative.c
+++ b/py/emitnative.c
@@ -1974,14 +1974,19 @@
 STATIC void emit_native_unary_op(emit_t *emit, mp_unary_op_t op) {
     vtype_kind_t vtype;
     emit_pre_pop_reg(emit, &vtype, REG_ARG_2);
-    assert(vtype == VTYPE_PYOBJ);
-    if (op == MP_UNARY_OP_NOT) {
-        // we need to synthesise this operation by converting to bool first
-        emit_call_with_imm_arg(emit, MP_F_UNARY_OP, MP_UNARY_OP_BOOL, REG_ARG_1);
-        ASM_MOV_REG_REG(emit->as, REG_ARG_2, REG_RET);
+    if (vtype == VTYPE_PYOBJ) {
+        if (op == MP_UNARY_OP_NOT) {
+            // we need to synthesise this operation by converting to bool first
+            emit_call_with_imm_arg(emit, MP_F_UNARY_OP, MP_UNARY_OP_BOOL, REG_ARG_1);
+            ASM_MOV_REG_REG(emit->as, REG_ARG_2, REG_RET);
+        }
+        emit_call_with_imm_arg(emit, MP_F_UNARY_OP, op, REG_ARG_1);
+        emit_post_push_reg(emit, VTYPE_PYOBJ, REG_RET);
+    } else {
+        adjust_stack(emit, 1);
+        EMIT_NATIVE_VIPER_TYPE_ERROR(emit,
+            "unary op %q not implemented", mp_unary_op_method_name[op]);
     }
-    emit_call_with_imm_arg(emit, MP_F_UNARY_OP, op, REG_ARG_1);
-    emit_post_push_reg(emit, VTYPE_PYOBJ, REG_RET);
 }
 
 STATIC void emit_native_binary_op(emit_t *emit, mp_binary_op_t op) {