X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fgengtype-yacc.y;h=f6a9bac2e2e5bd2751cc0d5d6739ce80e74b41a7;hb=ac8a72dec9e57bd3380048ab0cef058c396cf550;hp=bb350b43e594884068a37cb093f9728810505a54;hpb=479838eca39e7be88bd203bc7a2e8d26d1f92594;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/gengtype-yacc.y b/gcc/gengtype-yacc.y index bb350b43e59..f6a9bac2e2e 100644 --- a/gcc/gengtype-yacc.y +++ b/gcc/gengtype-yacc.y @@ -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 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 PARAM_IS %token NUM %token PERCENTPERCENT "%%" @@ -55,7 +57,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA %type

struct_fields yacc_ids yacc_typematch %type type lasttype %type optionsopt options option optionseq optionseqopt -%type type_option +%type 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; + } + ; %%