-[^[:alnum:]_]typedef{WS}(struct|union){WS}{ID}{WS}?[*[:space:]]{WS}?{ID}{WS}?";" {
- char *tagstart;
- size_t taglen;
- char *namestart;
- size_t namelen;
- int is_pointer = 0;
- struct type *t;
- int union_p;
-
- tagstart = yytext + strlen (" typedef ");
- while (ISSPACE (*tagstart))
- tagstart++;
- union_p = tagstart[0] == 'u';
- tagstart += strlen ("union ");
- while (ISSPACE (*tagstart))
- tagstart++;
- for (taglen = 1; ISIDNUM (tagstart[taglen]); taglen++)
- ;
- for (namestart = tagstart + taglen;
- ! ISIDNUM (*namestart);
- namestart++)
- if (*namestart == '*')
- is_pointer = 1;
- for (namelen = 1; ISIDNUM (namestart[namelen]); namelen++)
- ;
- t = find_structure (xmemdup (tagstart, taglen, taglen+1), union_p);
- if (is_pointer)
- t = create_pointer (t);
- do_typedef (xmemdup (namestart, namelen, namelen+1), t, &lexer_line);
- update_lineno (yytext, yyleng);
-}
-
-[^[:alnum:]_]typedef{WS}{ITYPE}{WS}{ID}{WS}?";" {
-
- char *namestart;
- size_t namelen;
- struct type *t;
- char *typestart;
- size_t typelen;
-
- for (namestart = yytext + yyleng - 2; ISSPACE (*namestart); namestart--)
- ;
- for (namelen = 1; !ISSPACE (namestart[-namelen]); namelen++)
- ;
- namestart -= namelen - 1;
- for (typestart = yytext + strlen (" typedef ");
- ISSPACE(*typestart);
- typestart++)
- ;
- for (typelen = namestart - typestart;
- ISSPACE(typestart[typelen-1]);
- typelen--)
- ;
-
- t = create_scalar_type (typestart, typelen);
- do_typedef (xmemdup (namestart, namelen, namelen+1), t, &lexer_line);
- update_lineno (yytext, yyleng);