Imported selector table code frm the Étoilé runtime. We can now make dispatch type dependent with a -D switch. Not enabled yet, but it will be enabled in a warning mode soon - I consider preferable to the existing GNU and Apple solution of corrupting the stack.
The protocols table and the class table will now grow as required. Protocols are now added to the protocols table as they are created, so you should get something sensible and introspectable back when you look up a protocol by name.
+load will not be sent until both NSObject and NSConstantString have been seen.
NSObject will be set as the superclass for all metaclasses, not Object.
This is in line with Cocoa and should make it a bit easier for people porting code who have categories on NSObject and are confused that they don't work as expected.
Object and NXConstantString are now deprecated. They're staying here because I use them for producing reduced test cases for the runtime and compiler, but they shouldn't be used. I will probably remove them from the default build soon.
- nil_method now returns 0, not receiver.
- Metaclasses actually get their dtables installed with the new ABI. For some reason this wasn't being done, so class messages didn't work with the new ABI. Now they do and (at least some) nontrivial programs work.
- Undid commenting out of the code setting the fast ivar access pointers. I can't remember why this was commented out, but it seems not to break anything. I have an LLVM pass that makes compiled code access these pointers, but it's not committed yet.