From patchwork Tue Dec 14 23:37:52 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicola Pero X-Patchwork-Id: 75586 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 5F4D0B6F14 for ; Wed, 15 Dec 2010 10:38:09 +1100 (EST) Received: (qmail 11114 invoked by alias); 14 Dec 2010 23:38:08 -0000 Received: (qmail 11018 invoked by uid 22791); 14 Dec 2010 23:38:06 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL, BAYES_00, TW_BJ, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from fencepost.gnu.org (HELO fencepost.gnu.org) (140.186.70.10) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 14 Dec 2010 23:37:57 +0000 Received: from eggs.gnu.org ([140.186.70.92]:53416) by fencepost.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.69) (envelope-from ) id 1PSeRN-00023R-6B for gcc-patches@gnu.org; Tue, 14 Dec 2010 18:37:53 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PSeRO-000826-1P for gcc-patches@gnu.org; Tue, 14 Dec 2010 18:37:55 -0500 Received: from smtp151.iad.emailsrvr.com ([207.97.245.151]:60816) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PSeRN-00081z-Re for gcc-patches@gnu.org; Tue, 14 Dec 2010 18:37:54 -0500 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp45.relay.iad1a.emailsrvr.com (SMTP Server) with ESMTP id 2616090187 for ; Tue, 14 Dec 2010 18:37:53 -0500 (EST) Received: from dynamic10.wm-web.iad.mlsrvr.com (dynamic10.wm-web.iad1a.rsapps.net [192.168.2.217]) by smtp45.relay.iad1a.emailsrvr.com (SMTP Server) with ESMTP id 13D789010F for ; Tue, 14 Dec 2010 18:37:52 -0500 (EST) Received: from meta-innovation.com (localhost [127.0.0.1]) by dynamic10.wm-web.iad.mlsrvr.com (Postfix) with ESMTP id E0E7F478807F for ; Tue, 14 Dec 2010 18:37:52 -0500 (EST) Received: by www2.webmail.us (Authenticated sender: nicola.pero@meta-innovation.com, from: nicola.pero@meta-innovation.com) with HTTP; Wed, 15 Dec 2010 00:37:52 +0100 (CET) Date: Wed, 15 Dec 2010 00:37:52 +0100 (CET) Subject: libobjc: deprecate more of Object From: "Nicola Pero" To: "gcc-patches@gnu.org" MIME-Version: 1.0 X-Type: plain Message-ID: <1292369872.919817235@192.168.2.227> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org 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 * 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. Index: ChangeLog =================================================================== --- ChangeLog (revision 167819) +++ ChangeLog (working copy) @@ -1,5 +1,13 @@ 2010-12-14 Nicola Pero + * 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 + * 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)) */