Move cpp_reader's line_maps field to a shared global.
authorPer Bothner <per@bothner.com>
Tue, 20 Jan 2004 05:30:18 +0000 (21:30 -0800)
committerPer Bothner <bothner@gcc.gnu.org>
Tue, 20 Jan 2004 05:30:18 +0000 (21:30 -0800)
* cpphash.h (cpp_reader):  Rename line_maps field to line_table
and change the type to a pointer rather than a struct.
* cppinit.c (cpp_push_main_field):  Adjust accordingly.
* cpplib.c (do_include_common, _cpp_do_file_change, cpp_get_callbacks):
Likewise.
* cppfiles.c (validate_pch):  Likewise.
* cppmacro.c (_cpp_warn_if_unused_macro, _cpp_builtin_macro_text):
Likewise.
* cpperror.c (print_location):  Likewise.
* cpplib.h (cpp_create_reader):  New line_maps pointer parameter.
* cppinit.c (cpp_create_reader):  Handle new parameter.
(cpp_destroy):  Don't free line_maps - that's no longer our job.
* input.h (line_table):  New variable.
* toplev.c (line_table):  Declare variable.
(general_init):  Initialize line_table.
* c-opts.c (c_common_init_options):  Pass line_table to
cpp_create_reader.
* fix-header.c (read_scan_file):  New local variable line_table.
Initialize, and pass it to cpp_create_reader.
* Makefile.in (LIBS, LIBDEPS):  Add libcpp.a.
(C_AND_OBJC_OBJS, fix-header):  Remove redundant libcpp.a.

From-SVN: r76198

12 files changed:
gcc/ChangeLog
gcc/Makefile.in
gcc/c-opts.c
gcc/cpperror.c
gcc/cpphash.h
gcc/cppinit.c
gcc/cpplib.c
gcc/cpplib.h
gcc/cppmacro.c
gcc/fix-header.c
gcc/input.h
gcc/toplev.c

index c2ae7ab..7dc7aee 100644 (file)
@@ -1,4 +1,29 @@
-2003-01-20  Per Bothner  <pbothner@apple.com>
+2004-01-19  Per Bothner  <per@bothner.com>
+
+       Move cpp_reader's line_maps field to a shared global.
+       * cpphash.h (cpp_reader):  Rename line_maps field to line_table
+       and change the type to a pointer rather than a struct.
+       * cppinit.c (cpp_push_main_field):  Adjust accordingly.
+       * cpplib.c (do_include_common, _cpp_do_file_change, cpp_get_callbacks):
+       Likewise.
+       * cppfiles.c (validate_pch):  Likewise.
+       * cppmacro.c (_cpp_warn_if_unused_macro, _cpp_builtin_macro_text):
+       Likewise.
+       * cpperror.c (print_location):  Likewise.
+       * cpplib.h (cpp_create_reader):  New line_maps pointer parameter.
+       * cppinit.c (cpp_create_reader):  Handle new parameter.
+       (cpp_destroy):  Don't free line_maps - that's no longer our job.
+       * input.h (line_table):  New variable.
+       * toplev.c (line_table):  Declare variable.
+       (general_init):  Initialize line_table.
+       * c-opts.c (c_common_init_options):  Pass line_table to
+       cpp_create_reader.
+       * fix-header.c (read_scan_file):  New local variable line_table.
+       Initialize, and pass it to cpp_create_reader.
+       * Makefile.in (LIBS, LIBDEPS):  Add libcpp.a.
+       (C_AND_OBJC_OBJS, fix-header):  Remove redundant libcpp.a.
+
+2004-01-19  Per Bothner  <per@bothner.com>
 
        Implement a cache for linemap_lookup.
        * line-map.h (struct_line_maps):  Add cache field.
index 3623f4c..a48a4f5 100644 (file)
@@ -714,7 +714,7 @@ LIBIBERTY = ../libiberty/libiberty.a
 BUILD_LIBIBERTY = @FORBUILD@/libiberty/libiberty.a
 
 # Dependencies on the intl and portability libraries.
-LIBDEPS= $(LIBIBERTY) $(LIBINTL_DEP) $(LIBICONV_DEP)
+LIBDEPS= $(LIBIBERTY) $(LIBINTL_DEP) $(LIBICONV_DEP) libcpp.a
 
 # Likewise, for use in the tools that must run on this machine
 # even if we are cross-building GCC.
@@ -722,7 +722,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY)
 
 # How to link with both our special library facilities
 # and the system's installed libraries.
-LIBS = @LIBS@ $(LIBIBERTY) $(LIBINTL) $(LIBICONV)
+LIBS = @LIBS@ libcpp.a $(LIBIBERTY) $(LIBINTL) $(LIBICONV)
 
 # Any system libraries needed just for GNAT.
 SYSLIBS = @GNAT_LIBEXC@
@@ -839,7 +839,7 @@ CXX_TARGET_OBJS=@cxx_target_objs@
 C_AND_OBJC_OBJS = attribs.o c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o \
   c-convert.o c-aux-info.o c-common.o c-opts.o c-format.o c-semantics.o \
   c-incpath.o cppdefault.o c-ppoutput.o c-cppbuiltin.o prefix.o \
-  c-objc-common.o c-dump.o c-pch.o libcpp.a $(C_TARGET_OBJS)
+  c-objc-common.o c-dump.o c-pch.o $(C_TARGET_OBJS)
 
 # Language-specific object files for C.
 C_OBJS = c-parse.o c-lang.o c-pretty-print.o stub-objc.o $(C_AND_OBJC_OBJS)
@@ -2571,7 +2571,7 @@ xsys-protos.h: $(GCC_PASSES) $(srcdir)/sys-protos.h deduced.h gen-protos$(build_
 fix-header$(build_exeext): fix-header.o scan-decls.o scan.o xsys-protos.h \
            c-incpath.o cppdefault.o prefix.o $(LIBDEPS) libcpp.a
        $(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ fix-header.o \
-       c-incpath.o cppdefault.o scan-decls.o prefix.o scan.o libcpp.a $(LIBS)
+       c-incpath.o cppdefault.o scan-decls.o prefix.o scan.o $(LIBS)
 
 fix-header.o: fix-header.c $(OBSTACK_H) scan.h \
        xsys-protos.h $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) $(CPPLIB_H)
index 59bce76..77d6688 100644 (file)
@@ -203,7 +203,7 @@ c_common_init_options (unsigned int argc, const char **argv ATTRIBUTE_UNUSED)
     }
 
   parse_in = cpp_create_reader (c_dialect_cxx () ? CLK_GNUCXX: CLK_GNUC89,
-                               ident_hash);
+                               ident_hash, &line_table);
 
   cpp_opts = cpp_get_options (parse_in);
   cpp_opts->dollars_in_ident = DOLLARS_IN_IDENTIFIERS;
index 61763cc..268d4ee 100644 (file)
@@ -45,8 +45,8 @@ print_location (cpp_reader *pfile, fileline line, unsigned int col)
       const struct line_map *map;
       unsigned int lin;
 
-      map = linemap_lookup (&pfile->line_maps, line);
-      linemap_print_containing_files (&pfile->line_maps, map);
+      map = linemap_lookup (pfile->line_table, line);
+      linemap_print_containing_files (pfile->line_table, map);
 
       lin = SOURCE_LINE (map, line);
       if (col == 0)
index ddac566..a63121d 100644 (file)
@@ -334,7 +334,7 @@ struct cpp_reader
   struct lexer_state state;
 
   /* Source line tracking.  */
-  struct line_maps line_maps;
+  struct line_maps *line_table;
   const struct line_map *map;
   fileline line;
 
index 629da27..b001c71 100644 (file)
@@ -124,7 +124,8 @@ init_library (void)
 
 /* Initialize a cpp_reader structure.  */
 cpp_reader *
-cpp_create_reader (enum c_lang lang, hash_table *table)
+cpp_create_reader (enum c_lang lang, hash_table *table,
+                  struct line_maps *line_table)
 {
   cpp_reader *pfile;
 
@@ -172,7 +173,7 @@ cpp_create_reader (enum c_lang lang, hash_table *table)
 
   /* Initialize the line map.  Start at logical line 1, so we can use
      a line number of zero for special states.  */
-  linemap_init (&pfile->line_maps);
+  pfile->line_table = line_table;
   pfile->line = 1;
 
   /* Initialize lexer state.  */
@@ -262,7 +263,6 @@ cpp_destroy (cpp_reader *pfile)
       free (context);
     }
 
-  linemap_free (&pfile->line_maps);
   free (pfile);
 }
 
@@ -501,7 +501,7 @@ cpp_push_main_file (cpp_reader *pfile)
   /* Set this here so the client can change the option if it wishes,
      and after stacking the main file so we don't trace the main
      file.  */
-  pfile->line_maps.trace_includes = CPP_OPTION (pfile, print_include_names);
+  pfile->line_table->trace_includes = CPP_OPTION (pfile, print_include_names);
 }
 
 /* For preprocessed files, if the first tokens are of the form # NUM.
index feb8717..0d1ab9a 100644 (file)
@@ -681,7 +681,7 @@ do_include_common (cpp_reader *pfile, enum include_type type)
     return;
 
   /* Prevent #include recursion.  */
-  if (pfile->line_maps.depth >= CPP_STACK_MAX)
+  if (pfile->line_table->depth >= CPP_STACK_MAX)
     cpp_error (pfile, CPP_DL_ERROR, "#include nested too deeply");
   else
     {
@@ -900,7 +900,7 @@ _cpp_do_file_change (cpp_reader *pfile, enum lc_reason reason,
                     const char *to_file, unsigned int file_line,
                     unsigned int sysp)
 {
-  pfile->map = linemap_add (&pfile->line_maps, reason, sysp,
+  pfile->map = linemap_add (pfile->line_table, reason, sysp,
                            pfile->line, to_file, file_line);
 
   if (pfile->cb.file_change)
@@ -1907,7 +1907,7 @@ cpp_get_callbacks (cpp_reader *pfile)
 const struct line_maps *
 cpp_get_line_maps (cpp_reader *pfile)
 {
-  return &pfile->line_maps;
+  return pfile->line_table;
 }
 
 /* Copy the given callbacks structure to our own.  */
index f7e12d2..9b91624 100644 (file)
@@ -510,7 +510,8 @@ struct cpp_hashnode GTY(())
    pointer.  Otherwise you should pass in an initialized hash table
    that cpplib will share; this technique is used by the C front
    ends.  */
-extern cpp_reader *cpp_create_reader (enum c_lang, struct ht *);
+extern cpp_reader *cpp_create_reader (enum c_lang, struct ht *,
+                                     struct line_maps *);
 
 /* Call this to change the selected language standard (e.g. because of
    command line options).  */
index efae0f0..158d926 100644 (file)
@@ -80,7 +80,7 @@ _cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
       cpp_macro *macro = node->value.macro;
 
       if (!macro->used
-         && MAIN_FILE_P (linemap_lookup (&pfile->line_maps, macro->line)))
+         && MAIN_FILE_P (linemap_lookup (pfile->line_table, macro->line)))
        cpp_error_with_line (pfile, CPP_DL_WARNING, macro->line, 0,
                             "macro \"%s\" is not used", NODE_NAME (node));
     }
@@ -136,7 +136,7 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
 
        if (node->value.builtin == BT_BASE_FILE)
          while (! MAIN_FILE_P (map))
-           map = INCLUDED_FROM (&pfile->line_maps, map);
+           map = INCLUDED_FROM (pfile->line_table, map);
 
        name = map->to_file;
        len = strlen (name);
@@ -153,7 +153,7 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
       /* The line map depth counts the primary source as level 1, but
         historically __INCLUDE_DEPTH__ has called the primary source
         level 0.  */
-      number = pfile->line_maps.depth - 1;
+      number = pfile->line_table->depth - 1;
       break;
 
     case BT_SPECLINE:
index ad23793..282c516 100644 (file)
@@ -590,10 +590,12 @@ read_scan_file (char *in_fname, int argc, char **argv)
   struct fn_decl *fn;
   int i, strings_processed;
   struct symbol_list *cur_symbols;
+  struct line_maps line_table;
 
   obstack_init (&scan_file_obstack);
 
-  scan_in = cpp_create_reader (CLK_GNUC89, NULL);
+  linemap_init (&line_table);
+  scan_in = cpp_create_reader (CLK_GNUC89, NULL, &line_table);
   cb = cpp_get_callbacks (scan_in);
   cb->file_change = cb_file_change;
 
index ff014f6..3e00496 100644 (file)
@@ -22,6 +22,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #ifndef GCC_INPUT_H
 #define GCC_INPUT_H
 
+#include "line-map.h"
+
+extern struct line_maps line_table;
+
 /* The data structure used to record a location in a translation unit.  */
 /* Long-term, we want to get rid of this and typedef fileline location_t.  */
 struct location_s GTY (())
index 0a2d607..4769c82 100644 (file)
@@ -189,6 +189,8 @@ const char *main_input_filename;
 
 location_t input_location;
 
+struct line_maps line_table;
+
 /* Nonzero if it is unsafe to create any new pseudo registers.  */
 int no_new_pseudos;
 
@@ -4228,6 +4230,7 @@ general_init (const char *argv0)
      table.  */
   init_ggc ();
   init_stringpool ();
+  linemap_init (&line_table);
   init_ttree ();
 
   /* Initialize register usage now so switches may override.  */