summaryrefslogtreecommitdiffstatshomepage
path: root/py/obj.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-01-30 01:29:32 -0800
committerDamien George <damien.p.george@gmail.com>2014-01-30 01:29:32 -0800
commitb25711ea8fdc1588b5a69f7d0941de09b50fa28c (patch)
treedb7cd93c99583a858ef94b3dab95b882832da251 /py/obj.c
parentcdd2c62e07549e36dba00bc37d7ba7a4cd41ad50 (diff)
parentc1d9bbc3453454aceb28f51e72e4aeb8ef1c12eb (diff)
downloadmicropython-b25711ea8fdc1588b5a69f7d0941de09b50fa28c.tar.gz
micropython-b25711ea8fdc1588b5a69f7d0941de09b50fa28c.zip
Merge pull request #238 from pfalcon/bool_len
Implement __bool__ and __len__ via unary_op virtual method for all types.
Diffstat (limited to 'py/obj.c')
-rw-r--r--py/obj.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/py/obj.c b/py/obj.c
index ce555efa6d..983718004b 100644
--- a/py/obj.c
+++ b/py/obj.c
@@ -251,9 +251,15 @@ mp_obj_t mp_obj_len_maybe(mp_obj_t o_in) {
len = seq_len;
} else if (MP_OBJ_IS_TYPE(o_in, &dict_type)) {
len = mp_obj_dict_len(o_in);
- } else if (MP_OBJ_IS_TYPE(o_in, &array_type)) {
- len = mp_obj_array_len(o_in);
} else {
+ mp_obj_type_t *type = mp_obj_get_type(o_in);
+ if (type->unary_op != NULL) {
+ mp_obj_t result = type->unary_op(RT_UNARY_OP_LEN, o_in);
+ if (result != MP_OBJ_NULL) {
+ return result;
+ }
+ }
+
return MP_OBJ_NULL;
}
return MP_OBJ_NEW_SMALL_INT(len);