Patchwork libobjc: deprecate more of Object

login
register
mail settings
Submitter Nicola Pero
Date Dec. 14, 2010, 11:37 p.m.
Message ID <1292369872.919817235@192.168.2.227>
Download mbox | patch
Permalink /patch/75586/
State New
Headers show

Comments

Nicola Pero - Dec. 14, 2010, 11:37 p.m.
This patch does another small cleanup of the libobjc API.

It moves most Object methods into the 'Deprecated' category.  The only
non-deprecated methods are -class and -isEqual:, which are the only same
ones that exist in the new Apple/NeXT runtime.

This doesn't change anything for this release, but it more clearly marks
our intention of removing all these methods in the next release when we'll
drop the old API.

Committed to trunk.

Thanks

2010-12-14  Nicola Pero  <nicola.pero@meta-innovation.com>

        * objc/Object.h: Moved all the methods, with the exception of
        -class and -isEqual:, into ...
        * objc/deprecated/Object.h: here.
        * Object.m: Moved all the methods, with the exception of -class
        and -isEqual: into the 'Deprecated' category.

Patch

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 167819)
+++ ChangeLog	(working copy)
@@ -1,5 +1,13 @@ 
 2010-12-14  Nicola Pero  <nicola.pero@meta-innovation.com>
 
+	* objc/Object.h: Moved all the methods, with the exception of
+	-class and -isEqual:, into ...
+	* objc/deprecated/Object.h: here.
+	* Object.m: Moved all the methods, with the exception of -class
+	and -isEqual: into the 'Deprecated' category.
+
+2010-12-14  Nicola Pero  <nicola.pero@meta-innovation.com>
+
 	* objects.c (object_copy): Do not #undef as we are no longer
 	including objc/objc-api.h.
 	* selector.c: Include objc/runtime.h and
Index: Object.m
===================================================================
--- Object.m	(revision 167819)
+++ Object.m	(working copy)
@@ -31,6 +31,22 @@  see the files COPYING3 and COPYING.RUNTIME respect
 
 @implementation Object
 
+- (Class)class
+{
+  return object_get_class (self);
+}
+
+- (BOOL)isEqual: (id)anObject
+{
+  return self == anObject;
+}
+
+@end
+
+/* The following methods were deprecated in GCC 4.6.0 and will be
+   removed in the next GCC release.  */
+@implementation Object (Deprecated)
+
 + initialize
 {
   return self;
@@ -76,11 +92,6 @@  see the files COPYING3 and COPYING.RUNTIME respect
   return [self copy];
 }
 
-- (Class)class
-{
-  return object_get_class(self);
-}
-
 - (Class)superClass
 {
   return object_get_super_class(self);
@@ -106,11 +117,6 @@  see the files COPYING3 and COPYING.RUNTIME respect
   return (size_t)self;
 }
 
-- (BOOL)isEqual:anObject
-{
-  return self==anObject;
-}
-
 - (int)compare:(id)anotherObject;
 {
   if ([self isEqual:anotherObject])
@@ -344,14 +350,7 @@  see the files COPYING3 and COPYING.RUNTIME respect
   class_set_version(self, aVersion);
   return self;
 }
-@end
 
-/* The following methods were deprecated in GCC 4.6.0 and will be
-   removed in the next GCC release.
-*/
-
-@implementation Object (Deprecated)
-
 + (int)streamVersion: (TypedStream*)aStream
 {
   if (aStream->mode == OBJC_READONLY)
Index: objc/Object.h
===================================================================
--- objc/Object.h	(revision 167819)
+++ objc/Object.h	(working copy)
@@ -33,103 +33,27 @@  see the files COPYING3 and COPYING.RUNTIME respect
 extern "C" {
 #endif
 
-/* The Object class is a minimal (but fully functional) root class
-   included with the runtime.
+/* The Object class is a very minimal root class included with the
+   runtime.  It is used as superclass for the two classes included
+   with the runtime, Protocol and NXConstantString.
 
-   It is mostly for testing the runtime; very handy in configure
-   tests, and when writing language/runtime testcases.
+   Because Objective-C allows multiple root classes, you can define
+   your own root class, different from Object.
 
-   Because Objective-C allows multiple root classes, a Foundation
-   library (such as GNUstep Base) is expected to provide its own root
-   class (typically called NSObject), fully integrated with the
-   library's own high-level features.  If you are using such a
-   Foundation library, you should most likely use its root class for
-   everything and ignore Object.
-*/
+   In particular, a Foundation library (such as GNUstep Base) is
+   expected to provide its own root class (typically called NSObject),
+   fully integrated with the library's own high-level features.  It is
+   expected that you should always use and interact with NSObject, and
+   mostly ignore Object.  */
 
-/*
-  All classes are derived from Object.  As such,
-  this is the overhead tacked onto those objects.
- */
+/* All classes are derived from Object.  As such, this is the overhead
+   tacked onto those objects.  */
 @interface Object
 {
-    Class	isa;	/* A pointer to the instance's class structure */
+  Class isa; /* A pointer to the instance's class structure.  */
 }
-
-        /* Initializing classes and instances */
-+ initialize;
-- init;
-
-        /* Creating, freeing, and copying instances */
-+ new;
-+ alloc;
-- free;
-- copy;
-- shallowCopy;
-- deepen;
-- deepCopy;
-
-        /* Identifying classes */
 - (Class)class;
-- (Class)superClass;
-- (MetaClass)metaClass;
-- (const char *)name;
-
-        /* Identifying and comparing objects */
-- self;
-- (unsigned int)hash;
-- (BOOL)isEqual:anObject;
-- (int)compare:(id)anotherObject;
-
-        /* Testing object type */
-- (BOOL)isMetaClass;
-- (BOOL)isClass;
-- (BOOL)isInstance;
-
-        /* Testing inheritance relationships */
-- (BOOL)isKindOf:(Class)aClassObject;
-- (BOOL)isMemberOf:(Class)aClassObject;
-- (BOOL)isKindOfClassNamed:(const char *)aClassName;
-- (BOOL)isMemberOfClassNamed:(const char *)aClassName;
-
-        /* Testing class functionality */
-+ (BOOL)instancesRespondTo:(SEL)aSel;
-- (BOOL)respondsTo:(SEL)aSel;
-
-	/* Testing protocol conformance */
-- (BOOL)conformsTo:(Protocol*)aProtocol;
-
-        /* Introspection */
-+ (IMP)instanceMethodFor:(SEL)aSel;
-- (IMP)methodFor:(SEL)aSel;
-+ (struct objc_method_description *)descriptionForInstanceMethod:(SEL)aSel;
-- (struct objc_method_description *)descriptionForMethod:(SEL)aSel;
-
-        /* Sending messages determined at run time */
-- perform:(SEL)aSel;
-- perform:(SEL)aSel with:anObject;
-- perform:(SEL)aSel with:anObject1 with:anObject2;
-
-        /* Forwarding */
-- (retval_t)forward:(SEL)aSel :(arglist_t)argFrame;
-- (retval_t)performv:(SEL)aSel :(arglist_t)argFrame;
-
-        /* Posing */
-+ poseAs:(Class)aClassObject;
-- (Class)transmuteClassTo:(Class)aClassObject;
-
-        /* Enforcing intentions */
-- subclassResponsibility:(SEL)aSel;
-- notImplemented:(SEL)aSel;
-- shouldNotImplement:(SEL)aSel;
-
-        /* Error handling */
-- doesNotRecognize:(SEL)aSel;
-- error:(const char *)aString, ...;
-
-        /* Archiving */
-+ (int)version;
-+ setVersion:(int)aVersion;
+- (BOOL)isEqual: (id)anObject;
 @end
 
 #include "deprecated/Object.h"
Index: objc/deprecated/Object.h
===================================================================
--- objc/deprecated/Object.h	(revision 167819)
+++ objc/deprecated/Object.h	(working copy)
@@ -1,8 +1,79 @@ 
+/* The following methods were deprecated in GCC 4.6.0 and will be
+   removed in the next GCC release.  */
 @interface Object (Deprecated)
+/* Initializing classes and instances */
++ initialize;
+- init;
 
-/* The following methods were deprecated in GCC 4.6.0 and will be
-   removed in the next GCC release.
-*/
+/* Creating, freeing, and copying instances */
++ new;
++ alloc;
+- free;
+- copy;
+- shallowCopy;
+- deepen;
+- deepCopy;
+
+/* Identifying classes */
+- (Class)superClass;
+- (MetaClass)metaClass;
+- (const char *)name;
+
+/* Identifying and comparing objects */
+- self;
+- (unsigned int)hash;
+- (int)compare:(id)anotherObject;
+
+/* Testing object type */
+- (BOOL)isMetaClass;
+- (BOOL)isClass;
+- (BOOL)isInstance;
+
+/* Testing inheritance relationships */
+- (BOOL)isKindOf:(Class)aClassObject;
+- (BOOL)isMemberOf:(Class)aClassObject;
+- (BOOL)isKindOfClassNamed:(const char *)aClassName;
+- (BOOL)isMemberOfClassNamed:(const char *)aClassName;
+
+/* Testing class functionality */
++ (BOOL)instancesRespondTo:(SEL)aSel;
+- (BOOL)respondsTo:(SEL)aSel;
+
+/* Testing protocol conformance */
+- (BOOL)conformsTo:(Protocol*)aProtocol;
+
+/* Introspection */
++ (IMP)instanceMethodFor:(SEL)aSel;
+- (IMP)methodFor:(SEL)aSel;
++ (struct objc_method_description *)descriptionForInstanceMethod:(SEL)aSel;
+- (struct objc_method_description *)descriptionForMethod:(SEL)aSel;
+
+/* Sending messages determined at run time */
+- perform:(SEL)aSel;
+- perform:(SEL)aSel with:anObject;
+- perform:(SEL)aSel with:anObject1 with:anObject2;
+
+/* Forwarding */
+- (retval_t)forward:(SEL)aSel :(arglist_t)argFrame;
+- (retval_t)performv:(SEL)aSel :(arglist_t)argFrame;
+
+/* Posing */
++ poseAs:(Class)aClassObject;
+- (Class)transmuteClassTo:(Class)aClassObject;
+
+/* Enforcing intentions */
+- subclassResponsibility:(SEL)aSel;
+- notImplemented:(SEL)aSel;
+- shouldNotImplement:(SEL)aSel;
+
+/* Error handling */
+- doesNotRecognize:(SEL)aSel;
+- error:(const char *)aString, ...;
+
+/* Archiving */
++ (int)version;
++ setVersion:(int)aVersion;
+
 + (int)streamVersion: (TypedStream*)aStream; /* __attribute__ ((deprecated)) */
 
 - read: (TypedStream*)aStream; /* __attribute__ ((deprecated)) */