summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--py/emitnative.c2
-rw-r--r--py/nativeglue.c2
-rw-r--r--tests/micropython/viper_types.py26
-rw-r--r--tests/micropython/viper_types.py.exp8
4 files changed, 36 insertions, 2 deletions
diff --git a/py/emitnative.c b/py/emitnative.c
index da986dc5d9..cb6cc94d35 100644
--- a/py/emitnative.c
+++ b/py/emitnative.c
@@ -1356,7 +1356,7 @@ STATIC void emit_native_load_global(emit_t *emit, qstr qst, int kind) {
if (emit->do_viper_types) {
// check for builtin casting operators
int native_type = mp_native_type_from_qstr(qst);
- if (native_type >= MP_NATIVE_TYPE_INT) {
+ if (native_type >= MP_NATIVE_TYPE_BOOL) {
emit_post_push_imm(emit, VTYPE_BUILTIN_CAST, native_type);
return;
}
diff --git a/py/nativeglue.c b/py/nativeglue.c
index db54d12332..c810f31e60 100644
--- a/py/nativeglue.c
+++ b/py/nativeglue.c
@@ -60,7 +60,7 @@ mp_uint_t mp_native_from_obj(mp_obj_t obj, mp_uint_t type) {
DEBUG_printf("mp_native_from_obj(%p, " UINT_FMT ")\n", obj, type);
switch (type & 0xf) {
case MP_NATIVE_TYPE_OBJ: return (mp_uint_t)obj;
- case MP_NATIVE_TYPE_BOOL:
+ case MP_NATIVE_TYPE_BOOL: return mp_obj_is_true(obj);
case MP_NATIVE_TYPE_INT:
case MP_NATIVE_TYPE_UINT: return mp_obj_get_int_truncated(obj);
default: { // cast obj to a pointer
diff --git a/tests/micropython/viper_types.py b/tests/micropython/viper_types.py
new file mode 100644
index 0000000000..ae72c0cf30
--- /dev/null
+++ b/tests/micropython/viper_types.py
@@ -0,0 +1,26 @@
+# test various type conversions
+
+import micropython
+
+# converting incoming arg to bool
+@micropython.viper
+def f1(x:bool):
+ print(x)
+f1(0)
+f1(1)
+f1([])
+f1([1])
+
+# taking and returning a bool
+@micropython.viper
+def f2(x:bool) -> bool:
+ return x
+print(f2([]))
+print(f2([1]))
+
+# converting to bool within function
+@micropython.viper
+def f3(x) -> bool:
+ return bool(x)
+print(f3([]))
+print(f3(-1))
diff --git a/tests/micropython/viper_types.py.exp b/tests/micropython/viper_types.py.exp
new file mode 100644
index 0000000000..b7bef156ea
--- /dev/null
+++ b/tests/micropython/viper_types.py.exp
@@ -0,0 +1,8 @@
+False
+True
+False
+True
+False
+True
+False
+True