diff options
author | Nicola Pero <nicola.pero@meta-innovation.com> | 2011-02-19 05:11:21 +0000 |
---|---|---|
committer | Nicola Pero <nicola@gcc.gnu.org> | 2011-02-19 05:11:21 +0000 |
commit | c2beaa0254cdfa9c4da5b9bc4177b07c893e207b (patch) | |
tree | 4f05a5be63689ea1bed8add55e68f8c0dbe4d8c2 /gcc/objc/objc-next-runtime-abi-01.c | |
parent | 54ba93231b4a4d8ca3007949c9d68b6a09440c26 (diff) | |
download | gcc-c2beaa0254cdfa9c4da5b9bc4177b07c893e207b.zip gcc-c2beaa0254cdfa9c4da5b9bc4177b07c893e207b.tar.gz gcc-c2beaa0254cdfa9c4da5b9bc4177b07c893e207b.tar.bz2 |
Updated comments
From-SVN: r170308
Diffstat (limited to 'gcc/objc/objc-next-runtime-abi-01.c')
-rw-r--r-- | gcc/objc/objc-next-runtime-abi-01.c | 112 |
1 files changed, 62 insertions, 50 deletions
diff --git a/gcc/objc/objc-next-runtime-abi-01.c b/gcc/objc/objc-next-runtime-abi-01.c index 2cfa862..3bab0a9 100644 --- a/gcc/objc/objc-next-runtime-abi-01.c +++ b/gcc/objc/objc-next-runtime-abi-01.c @@ -18,10 +18,10 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>. */ -/* This implements the original NeXT ABI (0) used for m32 code and indicated - by module version 6. It also implements the small number of additions made - for properties and optional protocol methods as ABI=1 - (module version 7). */ +/* This implements the original NeXT ABI (0) used for m32 code and + indicated by module version 6. It also implements the small number + of additions made for properties and optional protocol methods as + ABI=1 (module version 7). */ #include "config.h" #include "system.h" @@ -39,8 +39,9 @@ along with GCC; see the file COPYING3. If not see #include "c-family/c-objc.h" #include "objc-act.h" -/* When building Objective-C++, we are not linking against the C front-end - and so need to replicate the C tree-construction functions in some way. */ +/* When building Objective-C++, we are not linking against the C + front-end and so need to replicate the C tree-construction + functions in some way. */ #ifdef OBJCPLUS #define OBJCP_REMAP_FUNCTIONS #include "objcp-decl.h" @@ -85,9 +86,9 @@ along with GCC; see the file COPYING3. If not see #define TAG_MSGSEND_FAST "objc_msgSend_Fast" #define TAG_ASSIGNIVAR_FAST "objc_assign_ivar_Fast" -/* The version identifies which language generation and runtime - the module (file) was compiled for, and is recorded in the - module descriptor. */ +/* The version identifies which language generation and runtime the + module (file) was compiled for, and is recorded in the module + descriptor. */ #define OBJC_VERSION (flag_objc_abi >= 1 ? 7 : 6) #define UTAG_CLASS_EXT "_objc_class_ext" @@ -96,10 +97,10 @@ along with GCC; see the file COPYING3. If not see #define CLS_HAS_CXX_STRUCTORS 0x2000L -/* rt_trees identifiers - shared between NeXT implementations. These allow - the FE to tag meta-data in a manner that survives LTO and can be used when - the runtime requires that certain meta-data items appear in particular - named sections. */ +/* rt_trees identifiers - shared between NeXT implementations. These + allow the FE to tag meta-data in a manner that survives LTO and can + be used when the runtime requires that certain meta-data items + appear in particular named sections. */ #include "objc-next-metadata-tags.h" extern GTY(()) tree objc_rt_trees[OCTI_RT_META_MAX]; @@ -187,14 +188,15 @@ objc_next_runtime_abi_01_init (objc_runtime_hooks *rthooks) return true; } -/* We need a way to convey what kind of meta-data are represented by a given - variable, since each type is expected (by the runtime) to be found in a - specific named section. The solution must be usable with LTO. +/* We need a way to convey what kind of meta-data are represented by a + given variable, since each type is expected (by the runtime) to be + found in a specific named section. The solution must be usable + with LTO. - The scheme used for NeXT ABI 0/1 (partial matching of variable names) is not - satisfactory for LTO & ABI-2. We now tag ObjC meta-data with identification - attributes in the front end. The back-end may choose to act on these as it - requires. */ + The scheme used for NeXT ABI 0/1 (partial matching of variable + names) is not satisfactory for LTO & ABI-2. We now tag ObjC + meta-data with identification attributes in the front end. The + back-end may choose to act on these as it requires. */ static void next_runtime_abi_01_init_metadata_attributes (void) @@ -252,9 +254,10 @@ static void next_runtime_01_initialize (void) tree type; #ifdef OBJCPLUS - /* For all NeXT objc ABIs -fobjc-call-cxx-cdtors is on by default. */ - if (!global_options_set.x_flag_objc_call_cxx_cdtors) - global_options.x_flag_objc_call_cxx_cdtors = 1; + /* For all NeXT objc ABIs -fobjc-call-cxx-cdtors is on by + default. */ + if (!global_options_set.x_flag_objc_call_cxx_cdtors) + global_options.x_flag_objc_call_cxx_cdtors = 1; #endif /* Set up attributes to be attached to the meta-data so that they @@ -265,7 +268,8 @@ static void next_runtime_01_initialize (void) objc_prop_list_ptr = build_pointer_type (xref_tag (RECORD_TYPE, get_identifier ("_prop_list_t"))); - /* Declare type of selector-objects that represent an operation name. */ + /* Declare type of selector-objects that represent an operation + name. */ /* `struct objc_selector *' */ objc_selector_type = build_pointer_type (xref_tag (RECORD_TYPE, get_identifier (TAG_SELECTOR))); @@ -306,8 +310,8 @@ static void next_runtime_01_initialize (void) NULL, NULL_TREE); /* These can throw, because the function that gets called can throw - in Obj-C++, or could itself call something that can throw even - in Obj-C. */ + in Obj-C++, or could itself call something that can throw even in + Obj-C. */ TREE_NOTHROW (umsg_decl) = 0; TREE_NOTHROW (umsg_nonnil_decl) = 0; TREE_NOTHROW (umsg_stret_decl) = 0; @@ -357,7 +361,8 @@ static void next_runtime_01_initialize (void) objc_get_meta_class_decl = add_builtin_function (TAG_GETMETACLASS, type, 0, NOT_BUILT_IN, NULL, NULL_TREE); - /* This is the type of all of the following functions objc_copyStruct(). */ + /* This is the type of all of the following functions + objc_copyStruct(). */ type = build_function_type_list (void_type_node, ptr_type_node, const_ptr_type_node, @@ -368,7 +373,7 @@ static void next_runtime_01_initialize (void) /* Declare the following function: void objc_copyStruct (void *destination, const void *source, - ptrdiff_t size, BOOL is_atomic, BOOL has_strong); */ + ptrdiff_t size, BOOL is_atomic, BOOL has_strong); */ objc_copyStruct_decl = add_builtin_function ("objc_copyStruct", type, 0, NOT_BUILT_IN, NULL, NULL_TREE); @@ -385,7 +390,8 @@ static void next_runtime_01_initialize (void) /* --- templates --- */ -/* struct _objc_class { +/* struct _objc_class + { struct _objc_class *isa; struct _objc_class *super_class; char *name; @@ -403,10 +409,11 @@ static void next_runtime_01_initialize (void) void *sel_id; void *gc_object_type; #endif - }; */ + }; */ -/* The 'sel_id' & 'gc_object_type' fields are not used by the NeXT runtime. - We generate them for ABI==0 to maintain backward binary compatibility. */ +/* The 'sel_id' & 'gc_object_type' fields are not used by the NeXT + runtime. We generate them for ABI==0 to maintain backward binary + compatibility. */ static void build_v1_class_template (void) @@ -474,16 +481,17 @@ build_v1_class_template (void) objc_finish_struct (objc_class_template, decls); } -/* struct _objc_category { +/* struct _objc_category + { char *category_name; char *class_name; struct _objc_method_list *instance_methods; struct _objc_method_list *class_methods; struct _objc_protocol_list *protocols; - if ABI=1 + #if ABI=1 uint32_t size; // sizeof (struct _objc_category) struct _objc_property_list *instance_properties; // category's own @property decl. - END + #endif }; */ static void @@ -515,7 +523,7 @@ build_v1_category_template (void) /* struct _objc_property_list *instance_properties; This field describes a category's @property declarations. - Properties from inherited protocols are not included. */ + Properties from inherited protocols are not included. */ ptype = build_pointer_type (xref_tag (RECORD_TYPE, get_identifier (UTAG_PROPERTY_LIST))); add_field_decl (ptype, "instance_properties", &chain); @@ -523,20 +531,22 @@ build_v1_category_template (void) objc_finish_struct (objc_category_template, decls); } -/* Begin code generation for protocols... +/* Begin code generation for protocols... Modified for ObjC #1 extensions. */ -/* struct _objc_protocol { - IF ABI=1 +/* struct _objc_protocol + { + #if ABI=1 struct _objc_protocol_extension *isa; - ElSE + #else struct _objc_class *isa; - + #endif + char *protocol_name; struct _objc_protocol **protocol_list; struct _objc__method_prototype_list *instance_methods; struct _objc__method_prototype_list *class_methods; - }; */ + }; */ static void build_v1_protocol_template (void) @@ -550,7 +560,7 @@ build_v1_protocol_template (void) ptype = build_pointer_type (xref_tag (RECORD_TYPE, get_identifier (UTAG_PROTOCOL_EXT))); else - /* struct _objc_class *isa; */ + /* struct _objc_class *isa; */ ptype = build_pointer_type (xref_tag (RECORD_TYPE, get_identifier (UTAG_CLASS))); @@ -969,7 +979,7 @@ next_runtime_abi_01_get_category_super_ref (location_t loc ATTRIBUTE_UNUSED, /* assemble_external (super_class);*/ super_name = my_build_string_pointer (IDENTIFIER_LENGTH (super_name) + 1, IDENTIFIER_POINTER (super_name)); - /* super_class = objc_get{Meta}Class("CLASS_SUPER_NAME"); */ + /* super_class = objc_get{Meta}Class("CLASS_SUPER_NAME"); */ return build_function_call (input_location, super_class, build_tree_list (NULL_TREE, super_name)); @@ -1727,7 +1737,7 @@ build_v1_category_initializer (tree type, tree cat_name, tree class_name, return objc_build_constructor (type, v); } -/* static struct objc_category _OBJC_CATEGORY_<name> = { ... }; */ +/* static struct objc_category _OBJC_CATEGORY_<name> = { ... }; */ /* TODO: get rid of passing stuff around in globals. */ static void generate_v1_category (struct imp_entry *impent) @@ -1789,8 +1799,7 @@ generate_v1_category (struct imp_entry *impent) impent->class_decl = cat_decl; } -/* This routine builds the class extension used by v1 NeXT. -*/ +/* This routine builds the class extension used by v1 NeXT. */ static tree generate_objc_class_ext (tree property_list, tree context) @@ -1861,7 +1870,7 @@ generate_objc_class_ext (tree property_list, tree context) void *sel_id; void *gc_object_type; #endif - }; */ + }; */ static tree build_v1_shared_structure_initializer (tree type, tree isa, tree super, @@ -1984,7 +1993,7 @@ generate_ivars_list (tree chain, const char *name, tree attr) } /* static struct objc_class _OBJC_METACLASS_Foo={ ... }; - static struct objc_class _OBJC_CLASS_Foo={ ... }; */ + static struct objc_class _OBJC_CLASS_Foo={ ... }; */ static void generate_v1_class_structs (struct imp_entry *impent) @@ -2357,6 +2366,9 @@ objc_generate_v1_next_metadata (void) tree chain, attr; long vers; + /* FIXME: Make sure that we generate no metadata if there is nothing + to put into it. */ + if (objc_static_instances) gcc_unreachable (); /* Not for NeXT */ @@ -2590,7 +2602,7 @@ next_sjlj_build_enter_and_setjmp (struct objc_try_context **ctcp) /* Build: - DECL = objc_exception_extract(&_stack); */ + DECL = objc_exception_extract(&_stack); */ static tree next_sjlj_build_exc_extract (struct objc_try_context **ctcp, tree decl) |