diff options
Diffstat (limited to 'gcc/objc')
-rw-r--r-- | gcc/objc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/objc/objc-act.c | 60 | ||||
-rw-r--r-- | gcc/objc/objc-act.h | 3 | ||||
-rw-r--r-- | gcc/objc/objc-gnu-runtime-abi-01.c | 36 | ||||
-rw-r--r-- | gcc/objc/objc-next-runtime-abi-02.c | 10 | ||||
-rw-r--r-- | gcc/objc/objc-runtime-hooks.h | 5 | ||||
-rw-r--r-- | gcc/objc/objc-runtime-shared-support.c | 5 |
7 files changed, 76 insertions, 52 deletions
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog index 81fff66..8e76292 100644 --- a/gcc/objc/ChangeLog +++ b/gcc/objc/ChangeLog @@ -1,5 +1,14 @@ 2011-01-19 Nicola Pero <nicola.pero@meta-innovation.com> + * objc-act.c: Updated comments. + * objc-next-runtime-abi-02.c: Same. + * objc-runtime-shared-support.c: Same. + * objc-runtime-hooks.h: Same. + * objc-act.h: Same. + * objc-gnu-runtime-abi-01.c: Same. + +2011-01-19 Nicola Pero <nicola.pero@meta-innovation.com> + * objc-gnu-runtime-abi-01.c (objc_generate_v1_gnu_metadata): Do not generate metadata if there is nothing to put into it. diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index d73f2c0..0e32c23 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -6553,6 +6553,7 @@ start_class (enum tree_code code, tree class_name, tree super_name, { tree name = TREE_PURPOSE (attribute); + /* TODO: Document what the objc_exception attribute is/does. */ /* We handle the 'deprecated' and (undocumented) 'objc_exception' attributes. */ if (is_attribute_p ("deprecated", name)) @@ -7505,10 +7506,6 @@ objc_gen_property_data (tree klass, tree class_methods) /* @dynamic property - nothing to check or synthesize. */ if (PROPERTY_DYNAMIC (x)) continue; - /* Add any property that is declared in the interface, but undeclared in the - implementation to thie implementation. These are the 'dynamic' properties. - - objc_v2_merge_dynamic_property ();*/ /* @synthesize property - need to synthesize the accessors. */ if (PROPERTY_IVAR_NAME (x)) @@ -7771,7 +7768,6 @@ objc_declare_protocols (tree names, tree attributes) add_protocol (protocol); PROTOCOL_DEFINED (protocol) = 0; PROTOCOL_FORWARD_DECL (protocol) = NULL_TREE; -/* PROTOCOL_V2_FORWARD_DECL (protocol) = NULL_TREE;*/ if (attributes) { @@ -7824,7 +7820,6 @@ start_protocol (enum tree_code code, tree name, tree list, tree attributes) add_protocol (protocol); PROTOCOL_DEFINED (protocol) = 1; PROTOCOL_FORWARD_DECL (protocol) = NULL_TREE; -/* PROTOCOL_V2_FORWARD_DECL (protocol) = NULL_TREE;*/ check_protocol_recursively (protocol, list); } @@ -8466,10 +8461,11 @@ void objc_clear_super_receiver (void) { if (objc_method_context - && UOBJC_SUPER_scope == objc_get_current_scope ()) { - UOBJC_SUPER_decl = 0; - UOBJC_SUPER_scope = 0; - } + && UOBJC_SUPER_scope == objc_get_current_scope ()) + { + UOBJC_SUPER_decl = 0; + UOBJC_SUPER_scope = 0; + } } void @@ -10357,26 +10353,32 @@ encode_field_decl (tree field_decl, int curtype, int format) encode_type (TREE_TYPE (field_decl), curtype, format); } -/* This routine encodes the attribute of the input PROPERTY according to following - formula: - -Property attributes are stored as a comma-delimited C string. The simple attributes -readonly and copies are encoded as single characters. The parametrized attributes, -getter=name, setter=name, and ivar=name, are encoded as single characters, followed -by an identifier. Property types are also encoded as a parametrized attribute. The -characters used to encode these attributes are defined by the following enumeration: - -enum PropertyAttributes { - kPropertyReadOnly = 'r', // property is read-only. - kPropertyCopies = 'c', // property is a copy of the value last assigned - kPropertyGetter = 'g', // followed by getter selector name - kPropertySetter = 's', // followed by setter selector name - kPropertyInstanceVariable = 'i' // followed by instance variable name - kPropertyType = 't' // followed by old-style type encoding. -}; - -*/ +/* This routine encodes the attribute of the input PROPERTY according + to following formula: + + Property attributes are stored as a comma-delimited C string. + Simple attributes such as readonly are encoded as single + character. The parametrized attributes, getter=name and + setter=name, are encoded as a single character followed by an + identifier. Property types are also encoded as a parametrized + attribute. The characters used to encode these attributes are + defined by the following enumeration: + + enum PropertyAttributes { + kPropertyReadOnly = 'R', + kPropertyBycopy = 'C', + kPropertyByref = '&', + kPropertyDynamic = 'D', + kPropertyGetter = 'G', + kPropertySetter = 'S', + kPropertyInstanceVariable = 'V', + kPropertyType = 't', + kPropertyWeak = 'W', + kPropertyStrong = 'S', + kPropertyNonAtomic = 'N' + }; + FIXME: Update the implementation to match. */ tree objc_v2_encode_prop_attr (tree property) { diff --git a/gcc/objc/objc-act.h b/gcc/objc/objc-act.h index f45b4ea..54f067f 100644 --- a/gcc/objc/objc-act.h +++ b/gcc/objc/objc-act.h @@ -165,6 +165,7 @@ typedef enum objc_property_assign_semantics { #define CLASS_PROTOCOL_LIST(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 4) #define TOTAL_CLASS_RAW_IVARS(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 5) +/* FIXME */ #define CLASS_HAS_EXCEPTION_ATTR(CLASS) ((CLASS)->type.lang_flag_0) #define PROTOCOL_NAME(CLASS) ((CLASS)->type.name) @@ -396,6 +397,7 @@ enum objc_tree_index OCTI_GET_PROPERTY_STRUCT_DECL, OCTI_SET_PROPERTY_STRUCT_DECL, + /* TODO: Add comment. */ /* "V1" stuff. */ OCTI_V1_PROP_LIST_TEMPL, OCTI_V1_PROP_NAME_ATTR_CHAIN, @@ -586,6 +588,7 @@ extern GTY(()) tree objc_global_trees[OCTI_MAX]; #define objc_setPropertyStruct_decl \ objc_global_trees[OCTI_SET_PROPERTY_STRUCT_DECL] +/* TODO: Add comment. */ /* V1 stuff. */ #define objc_prop_list_ptr objc_global_trees[OCTI_V1_PROP_LIST_TEMPL] #define prop_names_attr_chain objc_global_trees[OCTI_V1_PROP_NAME_ATTR_CHAIN] diff --git a/gcc/objc/objc-gnu-runtime-abi-01.c b/gcc/objc/objc-gnu-runtime-abi-01.c index fdf0480..e2a3ce7 100644 --- a/gcc/objc/objc-gnu-runtime-abi-01.c +++ b/gcc/objc/objc-gnu-runtime-abi-01.c @@ -1,4 +1,4 @@ -/* GNU Runtime (ABI-0/1) private. +/* GNU Runtime ABI version 8 Copyright (C) 2011 Free Software Foundation, Inc. Contributed by Iain Sandoe (split from objc-act.c) @@ -83,6 +83,7 @@ along with GCC; see the file COPYING3. If not see if (VERS) \ DECL_ATTRIBUTES (DECL) = build_tree_list ((VERS), (KIND)); +/* FIXME: Remove this macro, not needed. */ #ifndef TARGET_64BIT #define TARGET_64BIT 0 #endif @@ -143,6 +144,10 @@ objc_gnu_runtime_abi_01_init (objc_runtime_hooks *rthooks) flag_objc_sjlj_exceptions = 0; } + /* TODO: Complain if -fobjc-abi-version=N was used. */ + + /* TODO: Complain if -fobj-nilcheck was used. */ + rthooks->initialize = gnu_runtime_01_initialize; rthooks->default_constant_string_class_name = DEF_CONSTANT_STRING_CLASS_NAME; rthooks->tag_getclass = TAG_GETCLASS; @@ -573,7 +578,8 @@ gnu_runtime_abi_01_get_class_reference (tree ident) (IDENTIFIER_LENGTH (ident) + 1, IDENTIFIER_POINTER (ident))); -/* assemble_external (objc_get_class_decl);*/ + /* FIXME: Do we need this assemble_external() ? */ + /* assemble_external (objc_get_class_decl);*/ return build_function_call (input_location, objc_get_class_decl, params); } @@ -794,7 +800,7 @@ gnu_runtime_abi_01_get_protocol_reference (location_t loc, tree p) return expr; } -/* For ABI 0/1 and IVAR is just a fixed offset in the class struct. */ +/* For ABI 8 an IVAR is just a fixed offset in the class struct. */ static tree gnu_runtime_abi_01_build_ivar_ref (location_t loc ATTRIBUTE_UNUSED, @@ -837,7 +843,8 @@ gnu_runtime_abi_01_get_category_super_ref (location_t loc ATTRIBUTE_UNUSED, add_class_reference (super_name); super_class = (inst_meth ? objc_get_class_decl : objc_get_meta_class_decl); -/* assemble_external (super_class);*/ + /* FIXME: Do we need this assemble_external() ? */ + /* assemble_external (super_class);*/ super_name = my_build_string_pointer (IDENTIFIER_LENGTH (super_name) + 1, IDENTIFIER_POINTER (super_name)); /* super_class = get_{meta_}class("CLASS_SUPER_NAME"); */ @@ -1475,16 +1482,10 @@ generate_category (struct imp_entry *impent) long instance_size; struct objc_ivar_list *ivars; struct objc_method_list *methods; - if (flag_next_runtime) - struct objc_cache *cache; - else { - struct sarray *dtable; - struct objc_class *subclass_list; - struct objc_class *sibling_class; - } + struct sarray *dtable; + struct objc_class *subclass_list; + struct objc_class *sibling_class; struct objc_protocol_list *protocols; - if (flag_next_runtime) - void *sel_id; void *gc_object_type; }; */ @@ -1542,6 +1543,7 @@ build_shared_structure_initializer (tree type, tree isa, tree super, CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr); } + /* FIXME: Remove NeXT runtime code. */ if (flag_next_runtime) { ltyp = build_pointer_type (xref_tag (RECORD_TYPE, @@ -1573,6 +1575,7 @@ build_shared_structure_initializer (tree type, tree isa, tree super, CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, expr); } + /* FIXME: Remove NeXT runtime code. */ if (flag_next_runtime) /* sel_id = NULL */ CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (NULL_TREE, 0)); @@ -1864,6 +1867,7 @@ generate_static_references (void) char buf[BUFSIZE]; VEC(constructor_elt,gc) *decls = NULL; + /* FIXME: Remove NeXT runtime code. */ if (flag_next_runtime) gcc_unreachable (); @@ -1991,6 +1995,7 @@ build_objc_symtab_template (void) /* short cat_def_cnt; */ add_field_decl (short_integer_type_node, "cat_def_cnt", &chain); + /* FIXME: Remove. */ if (TARGET_64BIT) add_field_decl (integer_type_node, "_explicit_padder", &chain); @@ -2037,6 +2042,8 @@ init_objc_symtab (tree type) CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (short_integer_type_node, cat_count)); + + /* FIXME: Remove. */ if (TARGET_64BIT) CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, build_int_cst (integer_type_node, 0)); @@ -2044,8 +2051,11 @@ init_objc_symtab (tree type) /* cls_def = { ..., { &Foo, &Bar, ...}, ... } */ field = TYPE_FIELDS (type); + + /* FIXME: Remove. */ if (TARGET_64BIT) field = DECL_CHAIN (field); + field = DECL_CHAIN (DECL_CHAIN (DECL_CHAIN (DECL_CHAIN (field)))); CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init_def_list (TREE_TYPE (field))); diff --git a/gcc/objc/objc-next-runtime-abi-02.c b/gcc/objc/objc-next-runtime-abi-02.c index 46e5693..6bfa3a2 100644 --- a/gcc/objc/objc-next-runtime-abi-02.c +++ b/gcc/objc/objc-next-runtime-abi-02.c @@ -22,14 +22,8 @@ along with GCC; see the file COPYING3. If not see /* The NeXT ABI2 is used for m64 implementations on Darwin/OSX machines. - This version is intended to match (logically) output of Apple's 4.2.1 - compiler. - - References: - FSF GCC branches/apple/trunk. - objc4-371.2 Open Source release (Apple Computer). (objc-runtime-new.h) - gcc_42-5664 Apple Local modifications to GCC (Apple Computer). -*/ + This version is intended to match (logically) the output of Apple's + 4.2.1 compiler. */ #include "config.h" #include "system.h" diff --git a/gcc/objc/objc-runtime-hooks.h b/gcc/objc/objc-runtime-hooks.h index d071c8b..b325e75 100644 --- a/gcc/objc/objc-runtime-hooks.h +++ b/gcc/objc/objc-runtime-hooks.h @@ -25,7 +25,7 @@ along with GCC; see the file COPYING3. If not see /* Objective-C supports several runtime library variants: - "GNU" runtime selected by -fgnu-runtime (currently at API version 1). + "GNU" runtime selected by -fgnu-runtime (currently at ABI version 8). "NeXT" runtime (selected by -fnext-runtime) and installed on OSX/Darwin systems at API version 1 (for m32 code) and version 2 (for m64 code). @@ -33,8 +33,11 @@ along with GCC; see the file COPYING3. If not see and so on, and the purpose of this interface is to abstract such differences from the parser's perspective. */ +/* TODO: Do we want the initial underscore ? */ typedef struct _objc_runtime_hooks_r { + /* TODO: Expand comments in this file. */ + /* Initialize for this runtime. */ void (*initialize) (void); const char *default_constant_string_class_name; diff --git a/gcc/objc/objc-runtime-shared-support.c b/gcc/objc/objc-runtime-shared-support.c index dff1d46..8dca6cc 100644 --- a/gcc/objc/objc-runtime-shared-support.c +++ b/gcc/objc/objc-runtime-shared-support.c @@ -507,7 +507,10 @@ build_module_descriptor (long vers, tree attr) /* Create an instance of "_objc_module". */ UOBJC_MODULES_decl = start_var_decl (objc_module_template, - flag_next_runtime ? "_OBJC_Module" : "_OBJC_Module"); + /* FIXME - why the conditional + if the symbol is the + same. */ + flag_next_runtime ? "_OBJC_Module" : "_OBJC_Module"); /* This is the root of the metadata for defined classes and categories, it is referenced by the runtime and, therefore, needed. */ |