diff options
author | nicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-10-12 02:43:25 +0000 |
---|---|---|
committer | nicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-10-12 02:43:25 +0000 |
commit | e983fc72f816b0a770c81bf768b0c75d45feadf9 (patch) | |
tree | 1565198dee2ff7c323dd7ae7d47bcb976d011d43 /libobjc/objc-private | |
parent | f9c4db38bb3400de0b809ed37f01b2949ea16558 (diff) | |
download | gcc-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.h | 20 | ||||
-rw-r--r-- | libobjc/objc-private/protocols.h | 46 | ||||
-rw-r--r-- | libobjc/objc-private/runtime.h | 6 |
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; |