BOOLEAN type_info_is_resolved(Type_Info_Handle tih) { TypeDesc* td = (TypeDesc*)tih; switch (td->get_kind()) { case K_Vector: if (td->get_element_type()->is_primitive()) { return true; } return type_info_is_resolved(td->get_element_type()); case K_Object: return td->is_loaded(); default: LDIE(73, "Unexpected kind"); return 0; } }
U_32 type_info_get_num_array_dimensions(Type_Info_Handle tih) { TypeDesc* td = (TypeDesc*)tih; if (td->get_kind() == K_Vector) { const String* name = td->get_type_name(); U_32 res = 0; if (name == NULL) { res = 1 + type_info_get_num_array_dimensions(td->get_element_type()); } else { res = countLeadingChars(name->bytes, '['); } assert(res<=255); return res; } return 0; }
Type_Info_Handle type_info_get_type_info(Type_Info_Handle tih) { TypeDesc* td = (TypeDesc*)tih; assert(td); switch (td->get_kind()) { case K_Vector: case K_Array: return td->get_element_type(); case K_ManagedPointer: case K_UnmanagedPointer: return td->get_pointed_to_type(); default: LDIE(73, "Unexpected kind"); return 0; } } //type_info_get_type_info