/* Interface for the Object class for Objective-C.
- Copyright (C) 1993, 1994, 1995, 2009, 2010 Free Software Foundation, Inc.
+ Copyright (C) 1993-2020 Free Software Foundation, Inc.
This file is part of GCC.
#define __object_INCLUDE_GNU
#include "objc.h"
-#include "typedstream.h"
#ifdef __cplusplus
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"
-
#ifdef __cplusplus
}
#endif