* buildsym.c (start_subfile): If a .c file includes a .C file, set
authorJim Kingdon <jkingdon@engr.sgi.com>
Wed, 28 Jul 1993 00:22:08 +0000 (00:22 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Wed, 28 Jul 1993 00:22:08 +0000 (00:22 +0000)
the language of both of them to C++.

gdb/ChangeLog
gdb/buildsym.c

index b2fd729a5edeec2d85ff596397097a19096516de..27eeac7d33bb85ba0ed906466fe0fd95a32ef2a1 100644 (file)
@@ -1,5 +1,8 @@
 Tue Jul 27 12:07:38 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
 
+       * buildsym.c (start_subfile): If a .c file includes a .C file, set
+       the language of both of them to C++.
+
        * config/sparc/xm-sun4os4.h: Define MEM_FNS_DECLARED and include
        <memory.h>.
        Include <malloc.h> rather than declaring malloc functions ourself.
index 6c8c807062f447513dd65026282061179cb1dc1a..ba593ca0b3f7fc2f8e4ba56f71ed36e0df5b3017 100644 (file)
@@ -412,6 +412,37 @@ start_subfile (name, dirname)
     {
       subfile->language = subfile->next->language;
     }
+
+  /* cfront output is a C program, so in most ways it looks like a C
+     program.  But to demangle we need to set the language to C++.  We
+     can distinguish cfront code by the fact that it has #line
+     directives which specify a file name ending in .C.
+
+     So if the filename of this subfile ends in .C, then change the language
+     of any pending subfiles from C to C++.  .cc is also accepted, even
+     though I don't think cfront allows it.  */
+
+  if (subfile->name)
+    {
+      char *p;
+      struct subfile *s;
+
+      p = strrchr (subfile->name, '.');
+      if (p != NULL
+         && (p[1] == 'C' && p[2] == '\0'
+             || p[1] == 'c' && p[2] == 'c' && p[3] == '\0'))
+       for (s = subfiles; s != NULL; s = s->next)
+         if (s->language == language_c)
+           s->language = language_cplus;
+    }
+
+  /* And patch up this file if necessary.  */
+  if (subfile->language == language_c
+      && subfile->next != NULL
+      && subfile->next->language == language_cplus)
+    {
+      subfile->language = language_cplus;
+    }
 }
 
 /* For stabs readers, the first N_SO symbol is assumed to be the source