aboutsummaryrefslogtreecommitdiff
path: root/libobjc/objc-private
diff options
context:
space:
mode:
authornicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>2011-06-07 19:37:35 +0000
committernicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>2011-06-07 19:37:35 +0000
commit72c46466254abea849018bd045b531b677bffb8d (patch)
treed40a3876f7d42510a372e2033d14443ddb800f2a /libobjc/objc-private
parent901a9d428e1f22c1e70415ae2d992a2247a7a714 (diff)
In libobjc/:
2011-06-07 Nicola Pero <nicola.pero@meta-innovation.com> Removed the Traditional Objective-C runtime public API. * Makefile.in (OBJC_DEPRECATED_H): Variable removed. (install-headers): Do not create the objc/deprecated directory and do not install the deprecated headers. (OBJC_H): Removed encoding.h and objc-api.h. * Object.m: Removed all methods with the exception of -class and -isEqual:. Updated includes. ([-class]): Use Modern API. * objc/Object.h: Do not include deprecated/Object.h. * objc/deprecated/Object.h: Removed. * linking.m (__objc_linking): Call [Object class] instead of [Object name]. * Protocol.m: Removed all methods with the exception of -isEqual:. Updated includes. * objc/Protocol.h: Do not include deprecated/Protocol.h. * objc/deprecated/Protocol.h: Removed. * objc/deprecated/struct_objc_symtab.h: Removed. * objc/deprecated/struct_objc_module.h: Removed. * objc/deprecated/struct_objc_ivar.h: Removed. * objc/deprecated/struct_objc_ivar_list.h: Removed. * objc/deprecated/struct_objc_method.h: Removed. * objc/deprecated/struct_objc_method_list.h: Removed. * objc/deprecated/struct_objc_protocol_list.h: Removed. * objc/deprecated/struct_objc_category.h: Removed. * objc/deprecated/MetaClass.h: Removed. * objc/deprecated/objc_msg_sendv.h: Removed. * objc/deprecated/README: Removed. * objc/deprecated/struct_objc_class.h: Removed. * objc/deprecated/struct_objc_protocol.h: Removed. * objc/deprecated/struct_objc_selector.h: Removed. * objc/encoding.h: Removed. * objc/message.h (struct objc_super): Removed the definition for the Traditional Objective-C runtime API. * objc/objc.h: Do not include objc/objc-decls.h. deprecated/struct_objc_selector.h, deprecated/MetaClass.h, deprecated/struct_objc_class.h, deprecated/struct_objc_protocol.h and deprecated/objc_msg_sendv.h. Uncommented new definition of Protocol *. * objc/objc-api.h: Removed. * objc/runtime.h: Updated comments. Removed check to detect concurrent usage of Traditional and Modern APIs. * objc-private/module-abi-8.h: Always define struct objc_class and struct objc_protocol. (struct objc_protocol_list): Changed type of 'list' argument from 'Protocol *' to 'struct objc_protocol *'. (class_get_instance_size): Added. * objc-private/protocols.h (__objc_protocols_add_protocol): Take a 'struct objc_protocol *' as argument, not a 'Protocol *'. * objc-private/runtime.h: Updated comments. * objc-private/selector.h (struct objc_selector, sel_eq): Added. * class.c: Include objc-private/selector.h. (objc_get_meta_class): Return a Class instead of a MetaClass. * encoding.c (method_get_next_argument): Removed. (method_get_first_argument): Removed. (method_get_nth_argument): Removed. * gc.c: Include objc/runtime.h instead of objc/encoding.h. Include objc-private/module-abi-8.h and ctype.h. * protocols.c (__objc_protocols_add_protocol): Take a 'struct objc_protocl *' as argument, not a 'Protocol *'. (class_addProtocol): Added casts to 'struct objc_protocol *' and 'Protocol *'. (class_copyProtocolList): Likewise. (protocol_conformsToProtocol): Likewise. (protocol_copyProtocolList): Likewise. * sarray.c: Include objc-private/module-abi-8.h. * sendmsg.c (method_get_next_argument): Removed. (method_get_first_argument): Removed. (method_get_nth_argument): Removed. (objc_msg_sendv): Removed. (arglist_t, retval_t): New. (class_get_class_method): Take a 'Class', not 'MetaClass', argument. * thr.c: Include module-abi-8.h. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174765 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libobjc/objc-private')
-rw-r--r--libobjc/objc-private/module-abi-8.h25
-rw-r--r--libobjc/objc-private/protocols.h2
-rw-r--r--libobjc/objc-private/runtime.h5
-rw-r--r--libobjc/objc-private/selector.h19
4 files changed, 33 insertions, 18 deletions
diff --git a/libobjc/objc-private/module-abi-8.h b/libobjc/objc-private/module-abi-8.h
index 0c9574bb499..40934521199 100644
--- a/libobjc/objc-private/module-abi-8.h
+++ b/libobjc/objc-private/module-abi-8.h
@@ -149,34 +149,30 @@ struct objc_method_list
structure. */
};
-/* Currently defined in Protocol.m (that definition should go away
- once we include this file). Note that a 'struct
- objc_method_description' as embedded inside a Protocol uses the
- same trick as a 'struct objc_method': the method_name is a 'char *'
- according to the compiler, who puts the method name as a string in
- there. At runtime, the selectors need to be registered, and the
- method_name then becomes a SEL. */
+/* Note that a 'struct objc_method_description' as embedded inside a
+ Protocol uses the same trick as a 'struct objc_method': the
+ method_name is a 'char *' according to the compiler, who puts the
+ method name as a string in there. At runtime, the selectors need
+ to be registered, and the method_name then becomes a SEL. */
struct objc_method_description_list
{
int count;
struct objc_method_description list[1];
};
-/* Currently defined by objc/objc.h. */
-/*
struct objc_protocol {
struct objc_class* class_pointer;
char *protocol_name;
struct objc_protocol_list *protocol_list;
struct objc_method_description_list *instance_methods, *class_methods;
};
-*/
+
struct objc_protocol_list
{
struct objc_protocol_list *next;
size_t count;
- Protocol *list[1];
+ struct objc_protocol *list[1];
};
/*
@@ -189,7 +185,6 @@ struct objc_protocol_list
some members change type. The compiler generates "char* const" and
places a string in the following member variables: super_class.
*/
-#ifndef __objc_STRUCT_OBJC_CLASS_defined
struct objc_class {
struct objc_class* class_pointer; /* Pointer to the class's meta
class. */
@@ -232,7 +227,6 @@ struct objc_class {
struct objc_protocol_list *protocols; /* Protocols conformed to */
void* gc_object_type;
};
-#endif /* __objc_STRUCT_OBJC_CLASS_defined */
/* This is used to assure consistent access to the info field of
classes. */
@@ -283,6 +277,11 @@ struct objc_class {
(cls)->info >>= (HOST_BITS_PER_LONG/2); \
__CLS_SETINFO(cls, (((unsigned long)num) << (HOST_BITS_PER_LONG/2))); })
+static inline long
+class_get_instance_size(Class _class)
+{
+ return CLS_ISCLASS(_class)?_class->instance_size:0;
+}
/* The compiler generates one of these structures for each category.
A class may have many categories and contain both instance and
diff --git a/libobjc/objc-private/protocols.h b/libobjc/objc-private/protocols.h
index 87f8fc8487c..3219ff28935 100644
--- a/libobjc/objc-private/protocols.h
+++ b/libobjc/objc-private/protocols.h
@@ -33,6 +33,6 @@ __objc_protocols_init (void);
protocols by name, which allows objc_getProtocol(name) to be
implemented efficiently. */
void
-__objc_protocols_add_protocol (const char *name, Protocol *object);
+__objc_protocols_add_protocol (const char *name, struct objc_protocol *object);
#endif /* not __objc_private_protocols_INCLUDE_GNU */
diff --git a/libobjc/objc-private/runtime.h b/libobjc/objc-private/runtime.h
index 5406294f2c3..bd11392ebec 100644
--- a/libobjc/objc-private/runtime.h
+++ b/libobjc/objc-private/runtime.h
@@ -32,10 +32,7 @@ The original list was:
#include "objc/hash.h"
#include "objc/objc-list.h"
-but can almost certainly be shrinked down.
-
-Note that you can use this file both with objc/objc-api.h and with
-objc/runtime.h. */
+but can almost certainly be shrinked down. */
#ifndef __objc_private_runtime_INCLUDE_GNU
#define __objc_private_runtime_INCLUDE_GNU
diff --git a/libobjc/objc-private/selector.h b/libobjc/objc-private/selector.h
index 490e17105a5..1832a79a72e 100644
--- a/libobjc/objc-private/selector.h
+++ b/libobjc/objc-private/selector.h
@@ -28,6 +28,25 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* Private runtime functions that may go away or be rewritten or
replaced. */
+/*
+** Definition of a selector. Selectors themselves are not unique, but
+** the sel_id is a unique identifier.
+*/
+struct objc_selector
+{
+ void *sel_id;
+ const char *sel_types;
+};
+
+inline static BOOL
+sel_eq (SEL s1, SEL s2)
+{
+ if (s1 == 0 || s2 == 0)
+ return s1 == s2;
+ else
+ return s1->sel_id == s2->sel_id;
+}
+
/* Number of selectors stored in each of the selector tables. */
extern unsigned int __objc_selector_max_index;