Hi everyone, I've done a bit of new year's hacking on cl-objc and made some real progress. You can now use cl-objc to read classes, methods and meta classes. Examples include:
OBJC-CFFI> (loop for class in (get-class-list) collect (list class (get-class-methods class))) ((#<ObjC-Class List> ((#<ObjC-Method appendList:> #<ObjC-Method makeObjectsPerform:with:> #<ObjC-Method makeObjectsPerform:> #<ObjC-Method replaceObjectAt:with:> #<ObjC-Method replaceObject:with:> #<ObjC-Method empty> #<ObjC-Method removeLastObject> #<ObjC-Method removeObject:> #<ObjC-Method removeObjectAt:> #<ObjC-Method addObjectIfAbsent:> #<ObjC-Method addObject:> #<ObjC-Method insertObject:at:> #<ObjC-Method setAvailableCapacity:> #<ObjC-Method lastObject> #<ObjC-Method indexOf:> #<ObjC-Method objectAt:> #<ObjC-Method count> #<ObjC-Method capacity> #<ObjC-Method isEqual:> #<ObjC-Method copyFromZone:> #<ObjC-Method freeObjects> #<ObjC-Method free> #<ObjC-Method init> #<ObjC-Method initCount:>))) (#<ObjC-Class Protocol> ((#<ObjC-Method hash> #<ObjC-Method isEqual:> #<ObjC-Method name> #<ObjC-Method descriptionForClassMethod:> #<ObjC-Method descriptionForInstanceMethod:> #<ObjC-Method conformsTo:>))) (#<ObjC-Class Object> ((#<ObjC-Method shouldNotImplement:> #<ObjC-Method findClass:> #<ObjC-Method methodDescFor:> #<ObjC-Method isMemberOfGivenName:> #<ObjC-Method isKindOfGivenName:> #<ObjC-Method superClass> #<ObjC-Method descriptionForMethod:> #<ObjC-Method conformsTo:> #<ObjC-Method performv::> #<ObjC-Method methodArgSize:> #<ObjC-Method forward::> #<ObjC-Method read:> #<ObjC-Method write:> #<ObjC-Method printForDebugger:> #<ObjC-Method error:> #<ObjC-Method doesNotRecognize:> #<ObjC-Method notImplemented:> #<ObjC-Method subclassResponsibility:> #<ObjC-Method perform:with:with:> #<ObjC-Method perform:with:> #<ObjC-Method perform:> #<ObjC-Method methodFor:> #<ObjC-Method copyFromZone:> #<ObjC-Method copy> #<ObjC-Method respondsTo:> #<ObjC-Method isMemberOfClassNamed:> #<ObjC-Method isKindOfClassNamed:> #<ObjC-Method isMemberOf:> #<ObjC-Method isKindOf:> #<ObjC-Method superclass> #<ObjC-Method zone> #<ObjC-Method class> #<ObjC-Method self> #<ObjC-Method free> #<ObjC-Method isEqual:> #<ObjC-Method hash> #<ObjC-Method name> #<ObjC-Method init> #<ObjC-Method awake>))) (#<ObjC-Class NSResurrectedObject> ((#<ObjC-Method finalize> #<ObjC-Method forward::> #<ObjC-Method class>))) (#<ObjC-Class NSDeallocatedObject> ((#<ObjC-Method forward::> #<ObjC-Method isKindOfClass:> #<ObjC-Method class>)))) OBJC-CFFI> OBJC-CFFI> (method-get-number-of-arguments (class-get-instance-method "Object" "init")) 2 OBJC-CFFI> (method-get-size-of-arguments (class-get-instance-method "Object" "init")) 8
OBJC-CFFI> (class-get-class-method "Object" "alloc") #<ObjC-Method alloc> OBJC-CFFI> (describe *) #<ObjC-Method alloc> is an Objective C method named "alloc". Type defintion @8@0:4 Implementation pointer #.(SB-SYS:INT-SAP #X90A59106) *objc_method #.(SB-SYS:INT-SAP #X00301754)
Anyway, if anyone would like to contribute bugs/documentation/advice/code please feel welcome. I'd also be interested to know how well the code runs on implementations other than sbcl/macosx/x86-32.
Happy new year,