David Ayers wrote:

Manuel Guesdon wrote:

Hi David,

Thank you for the explanation.
At the begining my problem was with GSObjCIsKindOf wich wasn't returning YES when I didn't Log the class before (more
precisely now with your help, when the class has not received a message before).


GSObjCIsKindOf use class_get_super_class and that's why I've got the problem.

So I think there's a bug in GSObjCIsKindOf as it doesn't return the good result under this case.
Using GSObjCSuper doesn't seems t to be a solution as it call class_get_super_class


Is there a way to know if a class is initialized and force initialization in GSObjCSuper and GSObjCIsKindOf if it is not ?

Hmm. and class_superclass_of_class isn't public :-/, I don't have time right now, but I'll look into the runtime's as soon as I can, to see what we can do in GSObjCSuper to insure the reurn value is an intialized class. I've just posted a patch to make -base use many of our GSObjCRuntime functions. So if we can fix GSObjCSuper, the rest should fall into place.

I'm not sure if I really like this yet, but maybe it's just not a matter of liking but of correctness...
Try this:


Cheers,
David


Index: Headers/Additions/GNUstepBase/GSObjCRuntime.h
===================================================================
RCS file: 
/cvsroot/gnustep/gnustep/core/base/Headers/Additions/GNUstepBase/GSObjCRuntime.h,v
retrieving revision 1.2
diff -u -r1.2 GSObjCRuntime.h
--- Headers/Additions/GNUstepBase/GSObjCRuntime.h       24 Aug 2003 23:07:40 -0000     
 1.2
+++ Headers/Additions/GNUstepBase/GSObjCRuntime.h       25 Aug 2003 20:55:06 -0000
@@ -139,9 +139,21 @@
  * Returns the superclass of this.
  */
 GS_STATIC_INLINE Class
-GSObjCSuper(Class this)
+GSObjCSuper(Class class)
 {
-  return class_get_super_class(this);
+#ifndef NeXT_RUNTIME
+  if (class != 0 && CLS_ISRESOLV (class) == NO)
+    {
+      const char *name;
+      name = (const char *)class->super_class;
+      if (name == NULL)
+       {
+         return 0;
+       }
+      return objc_lookup_class (name);
+    }
+#endif
+  return class_get_super_class(class);
 }
 
 /**
_______________________________________________
Bug-gnustep mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/bug-gnustep

Reply via email to