struct objc_method_description protocol_getMethodDescription(Protocol *p, SEL aSel, BOOL isRequiredMethod, BOOL isInstanceMethod) { struct objc_method_description d = {0,0}; struct objc_method_description_list *list = get_method_list(p, isRequiredMethod, isInstanceMethod); if (NULL == list) { return d; } // TODO: We could make this much more efficient if for (int i=0 ; i<list->count ; i++) { SEL s = sel_registerTypedName_np(list->methods[i].name, 0); if (sel_isEqual(s, aSel)) { d.name = s; d.types = list->methods[i].types; break; } } return d; }
Array Object::_get_method_list_bind() const { List<MethodInfo> ml; get_method_list(&ml); Array ret; for(List<MethodInfo>::Element *E=ml.front();E;E=E->next()) { Dictionary d; d["name"]=E->get().name; d["args"]=convert_property_list(&E->get().arguments); Array da; for(int i=0;i<E->get().default_arguments.size();i++) da.push_back(E->get().default_arguments[i]); d["default_args"]=da; d["flags"]=E->get().flags; d["id"]=E->get().id; Dictionary r; r["type"]=E->get().return_val.type; r["hint"]=E->get().return_val.hint; r["hint_string"]=E->get().return_val.hint_string; d["return_type"]=r; //va.push_back(d); ret.push_back(d); } return ret; }
Array Object::_get_method_list_bind() const { List<MethodInfo> ml; get_method_list(&ml); Array ret; for (List<MethodInfo>::Element *E = ml.front(); E; E = E->next()) { Dictionary d = E->get(); //va.push_back(d); ret.push_back(d); } return ret; }
struct objc_method_description *protocol_copyMethodDescriptionList(Protocol *p, BOOL isRequiredMethod, BOOL isInstanceMethod, unsigned int *count) { if ((NULL == p) || (NULL == count)){ return NULL; } struct objc_method_description_list *list = get_method_list(p, isRequiredMethod, isInstanceMethod); *count = 0; if (NULL == list || list->count == 0) { return NULL; } *count = list->count; struct objc_method_description *out = calloc(sizeof(struct objc_method_description), list->count); for (int i=0 ; i < (list->count) ; i++) { out[i].name = sel_registerTypedName_np(list->methods[i].name, list->methods[i].types); out[i].types = list->methods[i].types; } return out; }