79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
dtable = objc_sparsearray_copy(cls->superclass->dtable);
else
dtable = objc_sparsearray_new();
for (ml = cls->methodlist; ml != NULL; ml = ml->next)
for (i = 0; i < ml->count; i++)
objc_sparsearray_set(dtable,
(uintptr_t)ml->methods[i].name, ml->methods[i].imp);
if ((cats = objc_categories_for_class(cls)) != NULL) {
for (i = 0; cats[i] != NULL; i++) {
unsigned int j;
ml = (cls->info & OBJC_CLASS_INFO_CLASS ?
cats[i]->instance_methods : cats[i]->class_methods);
for (; ml != NULL; ml = ml->next)
for (j = 0; j < ml->count; j++)
objc_sparsearray_set(dtable,
(uintptr_t)ml->methods[j].name,
ml->methods[j].imp);
}
}
if (cls->dtable != NULL)
objc_sparsearray_free_when_singlethreaded(cls->dtable);
|
|
|
|
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
dtable = objc_sparsearray_copy(cls->superclass->dtable);
else
dtable = objc_sparsearray_new();
for (ml = cls->methodlist; ml != NULL; ml = ml->next)
for (i = 0; i < ml->count; i++)
objc_sparsearray_set(dtable,
(uint32_t)ml->methods[i].name, ml->methods[i].imp);
if ((cats = objc_categories_for_class(cls)) != NULL) {
for (i = 0; cats[i] != NULL; i++) {
unsigned int j;
ml = (cls->info & OBJC_CLASS_INFO_CLASS ?
cats[i]->instance_methods : cats[i]->class_methods);
for (; ml != NULL; ml = ml->next)
for (j = 0; j < ml->count; j++)
objc_sparsearray_set(dtable,
(uint32_t)ml->methods[j].name,
ml->methods[j].imp);
}
}
if (cls->dtable != NULL)
objc_sparsearray_free_when_singlethreaded(cls->dtable);
|
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
|
{
return cls->instance_size;
}
IMP
objc_get_class_method(Class cls, SEL sel)
{
return objc_sparsearray_get(cls->isa->dtable, sel->uid);
}
IMP
objc_get_instance_method(Class cls, SEL sel)
{
return objc_sparsearray_get(cls->dtable, sel->uid);
}
const char*
objc_get_type_encoding(Class cls, SEL sel)
{
struct objc_abi_method_list *ml;
struct objc_abi_category **cats;
|
|
|
|
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
|
{
return cls->instance_size;
}
IMP
objc_get_class_method(Class cls, SEL sel)
{
return objc_sparsearray_get(cls->isa->dtable, (uint32_t)sel->uid);
}
IMP
objc_get_instance_method(Class cls, SEL sel)
{
return objc_sparsearray_get(cls->dtable, (uint32_t)sel->uid);
}
const char*
objc_get_type_encoding(Class cls, SEL sel)
{
struct objc_abi_method_list *ml;
struct objc_abi_category **cats;
|