1 #import <objc/runtime.h>
3 IMP
method_getImplementation(Method method
) {
4 return method
->method_imp
;
7 SEL
method_getName(Method method
) {
8 return method
->method_name
;
11 unsigned method_getNumberOfArguments(Method method
) {
13 const char *name
= sel_getName(method
->method_name
);
15 for(; *name
!= '\0'; name
++)
22 void method_getReturnType(Method method
, char *type
, size_t typeCapacity
) {
26 void method_getArgumentType(Method method
, unsigned int index
, char *type
, size_t typeCapacity
) {
30 char *method_copyReturnType(Method method
) {
35 char *method_copyArgumentType(Method method
, unsigned int index
) {
40 const char *method_getTypeEncoding(Method method
) {
41 return (method
== NULL
) ? NULL
: method
->method_types
;
44 IMP
method_setImplementation(Method method
, IMP imp
) {
45 IMP result
= method
->method_imp
;
46 method
->method_imp
= imp
;
50 void method_exchangeImplementations(Method method
, Method other
) {
51 // FIXME: needs to be atomic
52 IMP tmp
= method
->method_imp
;
54 method
->method_imp
= other
->method_imp
;
55 other
->method_imp
= tmp
;