summaryrefslogtreecommitdiff
path: root/libobjc/objc-private
diff options
context:
space:
mode:
authornicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>2010-10-12 02:43:25 +0000
committernicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>2010-10-12 02:43:25 +0000
commite983fc72f816b0a770c81bf768b0c75d45feadf9 (patch)
tree1565198dee2ff7c323dd7ae7d47bcb976d011d43 /libobjc/objc-private
parentf9c4db38bb3400de0b809ed37f01b2949ea16558 (diff)
downloadgcc-e983fc72f816b0a770c81bf768b0c75d45feadf9.tar.gz
In libobjc/:
2010-10-12 Nicola Pero <nicola.pero@meta-innovation.com> * Makefile.in (C_SOURCE_FILES): Added protocols.c. * objc-private/protocols.h: New. * protocols.c: New. * init.c: Include objc-private/protocols.h. (__objc_exec_class): Call __objc_protocols_init on startup. (__objc_init_protocols): Call __objc_protocols_add_protocol. * objc-private/runtime.h: Use (struct objc_method_list *) instead of MethodList_t, and (struct objc_method *) instead of Method_t. * objc/deprecated/struct_objc_class.h: Define __objc_STRUCT_OBJC_CLASS_defined. * objc-private/module-abi-8.h (struct objc_method_description_list): New. (struct objc_class): Only define if __objc_STRUCT_OBJC_CLASS_defined is undefined. * objc/runtime.h (class_getName): New. (objc_getProtocol): New. (objc_copyProtocolList): New. (class_addProtocol): New. (class_conformsToProtocol): New. (class_copyProtocolList): New. (protocol_conformsToProtocol): New. (protocol_isEqual): New. (protocol_getName): New. (protocol_getMethodDescription): New. (protocol_copyMethodDescriptionList): New. (protocol_getProperty): New. (protocol_copyPropertyList): New. (protocol_copyProtocolList): New. * class.c (class_getName): New. * selector.c (sel_isEqual): New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165349 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libobjc/objc-private')
-rw-r--r--libobjc/objc-private/module-abi-8.h20
-rw-r--r--libobjc/objc-private/protocols.h46
-rw-r--r--libobjc/objc-private/runtime.h6
3 files changed, 69 insertions, 3 deletions
diff --git a/libobjc/objc-private/module-abi-8.h b/libobjc/objc-private/module-abi-8.h
index a20e3a3ae6e..120f5139d04 100644
--- a/libobjc/objc-private/module-abi-8.h
+++ b/libobjc/objc-private/module-abi-8.h
@@ -138,6 +138,24 @@ struct objc_method_list
structure. */
};
+/* Currently defined in Protocol.m (that definition should go away
+ once we include this file). */
+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;
@@ -155,6 +173,7 @@ 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. */
@@ -197,6 +216,7 @@ struct objc_class {
struct objc_protocol_list *protocols; /* Protocols conformed to */
void* gc_object_type;
};
+#endif /* __objc_STRUCT_OBJC_CLASS_defined */
/* 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
new file mode 100644
index 00000000000..49a2d92648f
--- /dev/null
+++ b/libobjc/objc-private/protocols.h
@@ -0,0 +1,46 @@
+/* GNU Objective C Runtime protocols - Private functions
+ Copyright (C) 2010 Free Software Foundation, Inc.
+ Contributed by Nicola Pero <nicola.pero@meta-innovation.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software
+Foundation; either version 3, or (at your option) any later version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef __objc_private_protocols_INCLUDE_GNU
+#define __objc_private_protocols_INCLUDE_GNU
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* This function needs to be called at startup by init.c. */
+void
+__objc_protocols_init (void);
+
+/* This function adds a protocol to the internal hashtable of
+ protocols by name, which allows objc_getProtocol(name) to be
+ implemented efficiently. */
+void
+__objc_protocols_add_protocol (const char *name, Protocol *object);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* not __objc_private_protocols_INCLUDE_GNU */
diff --git a/libobjc/objc-private/runtime.h b/libobjc/objc-private/runtime.h
index 690427ed5a3..3917c3ef3b0 100644
--- a/libobjc/objc-private/runtime.h
+++ b/libobjc/objc-private/runtime.h
@@ -58,18 +58,18 @@ extern void __objc_init_dispatch_tables(void); /* (objc-dispatch.c) */
extern void __objc_install_premature_dtable(Class); /* (objc-dispatch.c) */
extern void __objc_resolve_class_links(void); /* (objc-class.c) */
extern void __objc_register_selectors_from_class(Class); /* (objc-sel.c) */
-extern void __objc_register_selectors_from_list (MethodList_t); /* (selector.c) */
+extern void __objc_register_selectors_from_list (struct objc_method_list *); /* (selector.c) */
extern void __objc_update_dispatch_table_for_class (Class);/* (objc-msg.c) */
extern int __objc_init_thread_system(void); /* thread.c */
extern int __objc_fini_thread_system(void); /* thread.c */
extern void __objc_print_dtable_stats(void); /* sendmsg.c */
-extern void class_add_method_list(Class, MethodList_t);
+extern void class_add_method_list(Class, struct objc_method_list *);
/* Registering instance methods as class methods for root classes */
extern void __objc_register_instance_methods_to_class(Class);
-extern Method_t search_for_method_in_list(MethodList_t list, SEL op);
+extern struct objc_method * search_for_method_in_list(struct objc_method_list * list, SEL op);
/* True when class links has been resolved */
extern BOOL __objc_class_links_resolved;