In gcc/: 2011-04-14 Nicola Pero <nicola.pero@meta-innovation.com>
authorNicola Pero <nicola.pero@meta-innovation.com>
Thu, 14 Apr 2011 12:12:55 +0000 (12:12 +0000)
committerNicola Pero <nicola@gcc.gnu.org>
Thu, 14 Apr 2011 12:12:55 +0000 (12:12 +0000)
In gcc/:
2011-04-14  Nicola Pero  <nicola.pero@meta-innovation.com>

* c-parser.c (c_parser_objc_class_declaration): Updated call to
objc_declare_class.

In gcc/c-family/:
2011-04-14  Nicola Pero  <nicola.pero@meta-innovation.com>

* stub-objc.c (objc_declare_class): Updated argument name.

In gcc/cp/:
2011-04-14  Nicola Pero  <nicola.pero@meta-innovation.com>

* parser.c (cp_parser_objc_class_declaration): Updated for change
in objc_declare_class().

In gcc/objc/:
2011-04-14  Nicola Pero  <nicola.pero@meta-innovation.com>

* objc-act.c (objc_declare_class): Changed to take a single
identifier as argument instead of a tree list.  This means callers
don't have to build temporary tree lists to call this function.
(synth_module_prologue): Updated calls to objc_declare_class.

From-SVN: r172425

gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/stub-objc.c
gcc/c-parser.c
gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/objc/ChangeLog
gcc/objc/objc-act.c

index 6165fdd21e4684551cde23239a1e14eba472cc92..d6ce73141513848c1ce36d2ca4bb8916feb593b9 100644 (file)
@@ -1,3 +1,8 @@
+2011-04-14  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       * c-parser.c (c_parser_objc_class_declaration): Updated call to
+       objc_declare_class.
+
 2011-04-14  Richard Guenther  <rguenther@suse.de>
 
        * tree.h (get_object_alignment_1): Declare.
index fb9d99d6bc0834369364b3e01debf2e041d3f196..4b474748f5092e7c8534f8fdec158e1c2bd8df6b 100644 (file)
@@ -1,3 +1,7 @@
+2011-04-14  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       * stub-objc.c (objc_declare_class): Updated argument name.
+
 2011-04-12  Nathan Froyd  <froydnj@codesourcery.com>
 
        * c-common.h (c_common_init_ts): Declare.
index 16f293170a4a85c42f0b0e00f7c1121211eb5984..683472126f769081ef843083e3960745dfabcdb7 100644 (file)
@@ -110,7 +110,7 @@ objc_declare_alias (tree ARG_UNUSED (alias), tree ARG_UNUSED (orig))
 }
 
 void
-objc_declare_class (tree ARG_UNUSED (list))
+objc_declare_class (tree ARG_UNUSED (identifier))
 {
 }
 
index 0aefa421a1cbf204de1775247096fe4c371e1af2..8000b755af5a013667cf33d88160c425b9ba4b8c 100644 (file)
@@ -6994,7 +6994,6 @@ c_parser_objc_class_instance_variables (c_parser *parser)
 static void
 c_parser_objc_class_declaration (c_parser *parser)
 {
-  tree list = NULL_TREE;
   gcc_assert (c_parser_next_token_is_keyword (parser, RID_AT_CLASS));
   c_parser_consume_token (parser);
   /* Any identifiers, including those declared as type names, are OK
@@ -7010,7 +7009,7 @@ c_parser_objc_class_declaration (c_parser *parser)
          return;
        }
       id = c_parser_peek_token (parser)->value;
-      list = chainon (list, build_tree_list (NULL_TREE, id));
+      objc_declare_class (id);
       c_parser_consume_token (parser);
       if (c_parser_next_token_is (parser, CPP_COMMA))
        c_parser_consume_token (parser);
@@ -7018,7 +7017,6 @@ c_parser_objc_class_declaration (c_parser *parser)
        break;
     }
   c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");
-  objc_declare_class (list);
 }
 
 /* Parse an objc-alias-declaration.
index 271da0c854ccbb3e29f97b2eb07dfe865a259eac..37b107191d5fc8223738e1a72433ef6e35912a1e 100644 (file)
@@ -1,3 +1,8 @@
+2011-04-14  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       * parser.c (cp_parser_objc_class_declaration): Updated for change
+       in objc_declare_class().
+
 2011-04-14  Nathan Froyd  <froydnj@codesourcery.com>
 
        * decl.c (poplevel): Use block_chainon.
index 051c1c8258e724fd7f05b76f41648872dbbb7a80..17f5850f894909596d45ef0be776d638ef66dfcd 100644 (file)
@@ -21615,7 +21615,21 @@ static void
 cp_parser_objc_class_declaration (cp_parser* parser)
 {
   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
-  objc_declare_class (cp_parser_objc_identifier_list (parser));
+  while (true)
+    {
+      tree id;
+      
+      id = cp_parser_identifier (parser);
+      if (id == error_mark_node)
+       break;
+      
+      objc_declare_class (id);
+
+      if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
+       cp_lexer_consume_token (parser->lexer);
+      else
+       break;
+    }
   cp_parser_consume_semicolon_at_end_of_statement (parser);
 }
 
index c2f67694cff49a4364c6db3ba9ed947891fe181e..f39cb0a582cefaed3e525f80f3a036dd36438d43 100644 (file)
@@ -1,3 +1,10 @@
+2011-04-14  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       * objc-act.c (objc_declare_class): Changed to take a single
+       identifier as argument instead of a tree list.  This means callers
+       don't have to build temporary tree lists to call this function.
+       (synth_module_prologue): Updated calls to objc_declare_class.
+       
 2011-04-13  Nicola Pero  <nicola.pero@meta-innovation.com>
 
        * objc-act.c (build_keyword_selector): Use get_identifier_with_length
index 419462131af90ce94784fc012337c24b5e85a0c1..c68f628466c7b6b98fd93f75fd260371222f529b 100644 (file)
@@ -2953,7 +2953,7 @@ synth_module_prologue (void)
 
   /* Forward-declare '@interface Protocol'.  */
   type = get_identifier (PROTOCOL_OBJECT_CLASS_NAME);
-  objc_declare_class (tree_cons (NULL_TREE, type, NULL_TREE));
+  objc_declare_class (type);
   objc_protocol_type = build_pointer_type (xref_tag (RECORD_TYPE, type));
 
   /* Declare receiver type used for dispatching messages to 'super'.  */
@@ -2985,7 +2985,7 @@ synth_module_prologue (void)
   if (!constant_string_class_name)
     constant_string_class_name = runtime.default_constant_string_class_name;
   constant_string_id = get_identifier (constant_string_class_name);
-  objc_declare_class (tree_cons (NULL_TREE, constant_string_id, NULL_TREE));
+  objc_declare_class (constant_string_id);
 
   /* Pre-build the following entities - for speed/convenience.  */
   self_id = get_identifier ("self");
@@ -3360,48 +3360,42 @@ objc_declare_alias (tree alias_ident, tree class_ident)
 }
 
 void
-objc_declare_class (tree ident_list)
+objc_declare_class (tree identifier)
 {
-  tree list;
 #ifdef OBJCPLUS
   if (current_namespace != global_namespace) {
     error ("Objective-C declarations may only appear in global scope");
   }
 #endif /* OBJCPLUS */
 
-  for (list = ident_list; list; list = TREE_CHAIN (list))
+  if (! objc_is_class_name (identifier))
     {
-      tree ident = TREE_VALUE (list);
-
-      if (! objc_is_class_name (ident))
+      tree record = lookup_name (identifier), type = record;
+      
+      if (record)
        {
-         tree record = lookup_name (ident), type = record;
-
-         if (record)
+         if (TREE_CODE (record) == TYPE_DECL)
+           type = DECL_ORIGINAL_TYPE (record)
+             ? DECL_ORIGINAL_TYPE (record)
+             : TREE_TYPE (record);
+         
+         if (!TYPE_HAS_OBJC_INFO (type)
+             || !TYPE_OBJC_INTERFACE (type))
            {
-             if (TREE_CODE (record) == TYPE_DECL)
-               type = DECL_ORIGINAL_TYPE (record)
-                                       ? DECL_ORIGINAL_TYPE (record)
-                                       : TREE_TYPE (record);
-
-             if (!TYPE_HAS_OBJC_INFO (type)
-                 || !TYPE_OBJC_INTERFACE (type))
-               {
-                 error ("%qE redeclared as different kind of symbol",
-                        ident);
-                 error ("previous declaration of %q+D",
-                        record);
-               }
+             error ("%qE redeclared as different kind of symbol",
+                    identifier);
+             error ("previous declaration of %q+D",
+                    record);
            }
-
-         record = xref_tag (RECORD_TYPE, ident);
-         INIT_TYPE_OBJC_INFO (record);
-         /* In the case of a @class declaration, we store the ident
-            in the TYPE_OBJC_INTERFACE.  If later an @interface is
-            found, we'll replace the ident with the interface.  */
-         TYPE_OBJC_INTERFACE (record) = ident;
-         hash_class_name_enter (cls_name_hash_list, ident, NULL_TREE);
        }
+      
+      record = xref_tag (RECORD_TYPE, identifier);
+      INIT_TYPE_OBJC_INFO (record);
+      /* In the case of a @class declaration, we store the ident in
+        the TYPE_OBJC_INTERFACE.  If later an @interface is found,
+        we'll replace the ident with the interface.  */
+      TYPE_OBJC_INTERFACE (record) = identifier;
+      hash_class_name_enter (cls_name_hash_list, identifier, NULL_TREE);
     }
 }