> fptr(self, cmd, args);
But fptr doesn't take a va_list - it takes the actual arguments.
But fptr doesn't take a va_list - it takes the actual arguments.
Anyway, I think I've said all I'm going to say here.
Obviously you could come up with other ways of passing arguments to obj-c methods which would make it possible to implement your message send function in pure C, but a message send function which passes the arguments as a va_list is not objc_msgSend(), and that says nothing about whether or not objc_msgSend() could be implemented for the design they did go with in pure C.