typedef __SIZE_TYPE__ size_t; typedef const struct objc_selector { void *sel_id; } *SEL; typedef struct objc_object { } *id; typedef struct objc_class *Class; struct objc_class { struct sarray *dtable; }; typedef size_t sidx; struct soffset { unsigned int boffset:(sizeof (size_t) * 8) / 2; unsigned int eoffset:(sizeof (size_t) * 8) / 2; }; union sofftype { struct soffset off; sidx idx; }; struct sarray { size_t capacity; }; static __inline__ unsigned int soffset_decode (sidx indx) { union sofftype x; x.idx = indx; return x.off.eoffset + (x.off.boffset * (1 << 5)); } static __inline__ void * sarray_get_safe (struct sarray *array, sidx indx) { if (soffset_decode (indx) < array->capacity) return (void *)sarray_get (array, indx); } void * get_imp (Class class, SEL sel) { void *res = sarray_get_safe (class->dtable, (size_t) sel->sel_id); if (res == 0) { { res = get_imp (class, sel); } } }