[Openmcl-devel] something is not quite right in cocoa land
alex crain
alexcrain at mail.widgetworks.com
Fri Jun 10 12:41:37 PDT 2005
On Jun 8, 2005, at 11:13 PM, Gary Byers wrote:
> If the class involved is declared, the current mechanism is about the
> same as the old mechanism: we have search trees which contain all
> known (declared) ObjC classes and metaclasses; for a given pointer:
>
> 1) if the pointer is found in the metaclass tree, it's that
> metaclass
> 2) if the pointer is found in the class tree, it's that class
> 3) if we think that it's safe to indirect through the first word in
> the pointer (the "isa" field) and that first word is found in the
> class tree, the pointer is an instance of that class.
>
> This mostly happens in the function RECOGNIZE-OBJC-OBJECT.
>
> When we start up/restart a saved images, we enumerate all foreign
> classes. (We should also ensure that this happens whenever someone
> loads an auxiliary ObjC library.)
>
> If the class is declared, it gets added to the search trees; this is
> how things have worked for a long time.
>
> If the class is undeclared, it gets added to another search tree
> (one used to track "private ObjC classes"; I don't remember its name
> offhand.) The datum associated with each class in the private class
> tree is a little structure that's supposed to contain information
> about the nearest declared superclass. That information isn't
> filled out yet; the code that enumerates all classes should make
> a pass over the private class tree and fill in that information.
>
> Once that information's available, case 3 above gets extended;
>
> 3b) if the pointer's "isa" field is found in the private class
> tree, the pointer is an instance of the public class associated
> with that private class. We may or may not want to define some
> extra pointer type bits so that we can recognize that the
> instance
> isn't a "true" or "direct" instance, but I think that we can
> almost always ignore this distinction.
So if I'm tracking this right, an undeclared objc class is not an
instance of a class
but rather and instance of PRIVATE-OBJC-CLASS-INFO. This isn't a problem
because the only thing that need to understand undeclared classes
would be
SEND, %SEND, PRINT-OBJECT and a few assorted things that call OBJC-
CLASS-OF.
CLASS-OF and TYPE-OF are going to need to return the nearest declared
superclass
in order to be consistent but that seems reasonable enough since any
slots/methods in
an undeclared type are effectively private.
There are several places in the code where we can safely assume that
a macptr is
a objc instance or class: methods that return :ID and ALLOCATE-
INSTANCE come to mind.
If we insert code in the method returns that will register objects on
the fly then we should
catch all the cases.
Did I miss anything?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.clozure.com/pipermail/openmcl-devel/attachments/20050610/b1b02f89/attachment.htm>
More information about the Openmcl-devel
mailing list