aboutsummaryrefslogtreecommitdiff
path: root/py/objtype.c
diff options
context:
space:
mode:
authorDamien George2014-05-11 12:10:35 +0100
committerDamien George2014-05-11 12:10:35 +0100
commit18ceb7055b43d158e46ff6d0a0389bc3cd05e5d5 (patch)
treef3b1ad5d9c242a8aec5c0dc58b876e6f57529f05 /py/objtype.c
parenta7a1a38df43958a267410d333f495db56a8b0902 (diff)
parenteea01186547f0f1568ea1c8f002da4e33b7b0e46 (diff)
Merge branch 'master' of github.com:micropython/micropython
Diffstat (limited to 'py/objtype.c')
-rw-r--r--py/objtype.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/py/objtype.c b/py/objtype.c
index 345eee714..c579477db 100644
--- a/py/objtype.c
+++ b/py/objtype.c
@@ -333,6 +333,9 @@ STATIC void instance_convert_return_attr(mp_obj_t self, mp_obj_t member, mp_obj_
// return a bound method, with self being the type of this object
dest[0] = ((mp_obj_static_class_method_t*)member)->fun;
dest[1] = mp_obj_get_type(self);
+ } else if (MP_OBJ_IS_TYPE(member, &mp_type_type)) {
+ // Don't try to bind types
+ dest[0] = member;
} else if (mp_obj_is_callable(member)) {
// return a bound method, with self being this object
dest[0] = member;
@@ -842,6 +845,15 @@ STATIC mp_obj_t mp_builtin_isinstance(mp_obj_t object, mp_obj_t classinfo) {
MP_DEFINE_CONST_FUN_OBJ_2(mp_builtin_isinstance_obj, mp_builtin_isinstance);
+mp_obj_t mp_instance_cast_to_native_base(mp_const_obj_t self_in, mp_const_obj_t native_type) {
+ mp_obj_type_t *self_type = mp_obj_get_type(self_in);
+ if (!mp_obj_is_subclass_fast(self_type, native_type)) {
+ return MP_OBJ_NULL;
+ }
+ mp_obj_instance_t *self = (mp_obj_instance_t*)self_in;
+ return self->subobj[0];
+}
+
/******************************************************************************/
// staticmethod and classmethod types (probably should go in a different file)