objtype: Refactor dealing with native sub-objects for clarity.

This commit is contained in:
Paul Sokolovsky 2015-03-16 13:58:08 +02:00
parent f0dc0d50e3
commit 3cb766344d

View File

@ -135,10 +135,13 @@ STATIC void mp_obj_class_lookup(struct class_lookup_data *lookup, const mp_obj_
// not type where we found a class method. // not type where we found a class method.
const mp_obj_type_t *org_type = (const mp_obj_type_t*)lookup->obj; const mp_obj_type_t *org_type = (const mp_obj_type_t*)lookup->obj;
instance_convert_return_attr(NULL, org_type, elem->value, lookup->dest); instance_convert_return_attr(NULL, org_type, elem->value, lookup->dest);
} else if (lookup->obj != MP_OBJ_NULL && is_native_type(type) && type != &mp_type_object /* object is not a real type */) {
instance_convert_return_attr(lookup->obj->subobj[0], type, elem->value, lookup->dest);
} else { } else {
instance_convert_return_attr(lookup->obj, type, elem->value, lookup->dest); mp_obj_instance_t *obj = lookup->obj;
if (obj != MP_OBJ_NULL && is_native_type(type) && type != &mp_type_object /* object is not a real type */) {
// If we're dealing with native base class, then it applies to native sub-object
obj = obj->subobj[0];
}
instance_convert_return_attr(obj, type, elem->value, lookup->dest);
} }
#if DEBUG_PRINT #if DEBUG_PRINT
printf("mp_obj_class_lookup: Returning: "); printf("mp_obj_class_lookup: Returning: ");