cscope can't parse kernel/trace/trace_events.c (and some other files)
in the linux kernel tree because this file has

        #define do_for_each_event_file(tr, file)                        \
                list_for_each_entry(tr, &ftrace_trace_arrays, list) {   \
                        list_for_each_entry(file, &tr->events, list)

        #define do_for_each_event_file_safe(tr, file)                   \
                list_for_each_entry(tr, &ftrace_trace_arrays, list) {   \
                        struct trace_event_file *___n;                          
\
                        list_for_each_entry_safe(file, ___n, &tr->events, list)

        #define while_for_each_event_file()             \
                }

at the top and thus the 2nd '{' in do_for_each_event_file_safe() above
is not balanced.

Signed-off-by: Oleg Nesterov <o...@redhat.com>
---
 src/fscanner.l | 70 ++++++++++++++++++++++++++------------------------
 1 file changed, 37 insertions(+), 33 deletions(-)

diff --git a/src/fscanner.l b/src/fscanner.l
index 43880bf..46734ea 100644
--- a/src/fscanner.l
+++ b/src/fscanner.l
@@ -178,19 +178,21 @@ wsnl              [ \t\r\v\f\n]|{comment}
                }
 
 \{             {       /* count unmatched left braces for fcn def detection */
-                       ++braces;
-                       
-                       /* mark an untagged enum/struct/union so its beginning
-                          can be found */
-                       if (tagdef) {
-                               if (braces == 1) {
-                                       esudef = YES;
+                       if (ppdefine == NO) {
+                               ++braces;
+
+                               /* mark an untagged enum/struct/union so its 
beginning
+                                  can be found */
+                               if (tagdef) {
+                                       if (braces == 1) {
+                                               esudef = YES;
+                                       }
+                                       token = tagdef;
+                                       tagdef = '\0';
+                                       last = first;
+                                       my_yymore();
+                                       return(token);
                                }
-                               token = tagdef;
-                               tagdef = '\0';
-                               last = first;
-                               my_yymore();
-                               return(token);
                        }
                        goto more;
                        /* NOTREACHED */
@@ -326,28 +328,30 @@ wsnl              [ \t\r\v\f\n]|{comment}
                }
 
 \}             {
-                       /* could be the last enum member initializer */
-                       if (braces == initializerbraces) {
-                               initializerbraces = -1;
-                               initializer = NO;
-                       }
-                       if (--braces <= 0) {
-               endstate:
-                               braces = 0;
-                               classdef = NO;
-                       }
-                       if (braces == 0 || (braces == 1 && classdef == YES)) {
-
-                               /* if the end of an enum/struct/union 
definition */
-                               if (esudef == YES) {
-                                       esudef = NO;
+                       if (ppdefine == NO) {
+                               /* could be the last enum member initializer */
+                               if (braces == initializerbraces) {
+                                       initializerbraces = -1;
+                                       initializer = NO;
                                }
-                               /* if the end of the function */
-                               else if (fcndef == YES) {
-                                       fcndef = NO;
-                                       last = first;
-                                       my_yymore();
-                                       return(FCNEND);
+                               if (--braces <= 0) {
+                       endstate:
+                                       braces = 0;
+                                       classdef = NO;
+                               }
+                               if (braces == 0 || (braces == 1 && classdef == 
YES)) {
+
+                                       /* if the end of an enum/struct/union 
definition */
+                                       if (esudef == YES) {
+                                               esudef = NO;
+                                       }
+                                       /* if the end of the function */
+                                       else if (fcndef == YES) {
+                                               fcndef = NO;
+                                               last = first;
+                                               my_yymore();
+                                               return(FCNEND);
+                                       }
                                }
                        }
                        goto more;
-- 
2.25.1.362.g51ebf55




_______________________________________________
Cscope-devel mailing list
Cscope-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cscope-devel

Reply via email to