From e8d74f4143e5ddb57f014bc078e6d76c2e4dc5bc Mon Sep 17 00:00:00 2001
From: kcook <kcook@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sun, 5 Oct 2003 02:49:20 +0000
Subject: [PATCH] * 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
---
 gcc/ChangeLog      |  4 ++++
 gcc/gengtype-lex.l | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e3201926c84a..4ec56291cea6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2003-10-04  Kelley Cook  <kelleycook@wideopenwest.com>
+
+	* gengtype-lex.l: Recognize typedef of functions without PARAMS macro.
+
 2003-10-04  Nathanael Nerode  <neroden@gcc.gnu.org>
         
 	* config/v850/v850-c.c, config/v850/v850-protos.h, config/v850/v850.c:
diff --git a/gcc/gengtype-lex.l b/gcc/gengtype-lex.l
index bbdf9913be48..5af585e1d2c5 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;
-- 
GitLab