OSDN Git Service

PR optimization/13424 (hppa), bootstrap/14462, c/14828
[pf3gnuchains/gcc-fork.git] / gcc / gengtype-yacc.y
index bb350b4..f6a9bac 100644 (file)
@@ -20,8 +20,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 02111-1307, USA.  */
 
 %{
-#include "hconfig.h"
+#include "bconfig.h"
 #include "system.h"
+#include "coretypes.h"
+#include "tm.h"
 #include "gengtype.h"
 #define YYERROR_VERBOSE
 %}
@@ -37,11 +39,11 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 %token <t>ENT_STRUCT
 %token ENT_EXTERNSTATIC
 %token ENT_YACCUNION
-%token GTY_TOKEN "GTY"
-%token UNION "union"
-%token STRUCT "struct"
-%token ENUM "enum"
-%token ALIAS "ptr_alias"
+%token GTY_TOKEN
+%token UNION
+%token STRUCT
+%token ENUM
+%token ALIAS
 %token <s>PARAM_IS
 %token NUM
 %token PERCENTPERCENT "%%"
@@ -55,7 +57,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 %type <p> struct_fields yacc_ids yacc_typematch
 %type <t> type lasttype
 %type <o> optionsopt options option optionseq optionseqopt
-%type <s> type_option
+%type <s> type_option stringseq
 
 %%
 
@@ -266,20 +268,12 @@ type_option : ALIAS
                { $$ = $1; }
              ;
 
-option:        type_option '(' type ')'
-          {
-            options_p o = xmalloc (sizeof (*o));
-            o->name = $1;
-            o->info = adjust_field_type ($3, NULL);
-            $$ = o;
-          }
-       | ID '(' STRING ')'
-          {
-            options_p o = xmalloc (sizeof (*o));
-            o->name = $1;
-            o->info = (void *)$3;
-            $$ = o;
-          }
+option:   ID
+           { $$ = create_option ($1, (void *)""); }
+        | ID '(' stringseq ')'
+            { $$ = create_option ($1, (void *)$3); }
+       | type_option '(' type ')'
+           { $$ = create_option ($1, adjust_field_type ($3, NULL)); }
        ;
 
 optionseq: option
@@ -297,4 +291,17 @@ optionseq: option
 optionseqopt: { $$ = NULL; }
              | optionseq { $$ = $1; }
              ;
+
+stringseq: STRING
+            { $$ = $1; }
+          | stringseq STRING
+            {
+              size_t l1 = strlen ($1);
+              size_t l2 = strlen ($2);
+              char *s = xrealloc ((char *)$1, l1 + l2 + 1);
+              memcpy (s + l1, $2, l2 + 1);
+              free ((void *)$2);
+              $$ = s;
+            }
+          ;
 %%