summaryrefslogtreecommitdiff
path: root/gcc/gengtype-lex.l
diff options
context:
space:
mode:
authorkcook <kcook@138bc75d-0d04-0410-961f-82ee72b054a4>2003-10-05 02:49:20 +0000
committerkcook <kcook@138bc75d-0d04-0410-961f-82ee72b054a4>2003-10-05 02:49:20 +0000
commite8d74f4143e5ddb57f014bc078e6d76c2e4dc5bc (patch)
treef43c04b0e53f0298296fa1a0051cab9bbdeef052 /gcc/gengtype-lex.l
parentd437ce66daaa13f9bca99b856e33aa22098ab198 (diff)
downloadgcc-e8d74f4143e5ddb57f014bc078e6d76c2e4dc5bc.tar.gz
* gengtype-lex.l: Recognize typedef of functions without PARAMS macro.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72106 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gengtype-lex.l')
-rw-r--r--gcc/gengtype-lex.l33
1 files changed, 33 insertions, 0 deletions
diff --git a/gcc/gengtype-lex.l b/gcc/gengtype-lex.l
index bbdf9913be4..5af585e1d2c 100644
--- a/gcc/gengtype-lex.l
+++ b/gcc/gengtype-lex.l
@@ -132,6 +132,23 @@ ITYPE {IWORD}({WS}{IWORD})*
do_typedef (xmemdup (namestart, namelen, namelen+1), t, &lexer_line);
update_lineno (yytext, yyleng);
}
+
+[^[:alnum:]_]typedef{WS}{ID}{WS}{ID}{WS}"(" {
+ char *namestart;
+ size_t namelen;
+ struct type *t;
+
+ for (namestart = yytext + yyleng - 2; ISSPACE (*namestart); namestart--)
+ ;
+ for (namelen = 1; !ISSPACE (namestart[-namelen]); namelen++)
+ ;
+ namestart -= namelen - 1;
+
+ t = create_scalar_type ("function type", sizeof ("function type")-1);
+ do_typedef (xmemdup (namestart, namelen, namelen+1), t, &lexer_line);
+ update_lineno (yytext, yyleng);
+}
+
[^[:alnum:]_]typedef{WS}{ID}{WS}?"("{WS}?"*"{WS}?{ID}{WS}?")"{WS}?PARAMS {
char *namestart;
size_t namelen;
@@ -148,6 +165,22 @@ ITYPE {IWORD}({WS}{IWORD})*
update_lineno (yytext, yyleng);
}
+[^[:alnum:]_]typedef{WS}{ID}{WS}?"("{WS}?"*"{WS}?{ID}{WS}?")"{WS}?"(" {
+ char *namestart;
+ size_t namelen;
+ struct type *t;
+
+ for (namestart = yytext + yyleng - 2; !ISIDNUM (*namestart); namestart--)
+ ;
+ for (namelen = 1; ISIDNUM (namestart[-namelen]); namelen++)
+ ;
+ namestart -= namelen - 1;
+
+ t = create_scalar_type ("function type", sizeof ("function type")-1);
+ do_typedef (xmemdup (namestart, namelen, namelen+1), t, &lexer_line);
+ update_lineno (yytext, yyleng);
+}
+
[^[:alnum:]_](typedef{WS})?(struct|union){WS}{ID}{WS}/"GTY" {
char *tagstart;
size_t taglen;