location_get_source_line takes an expanded_location, but the column
is irrelevant; it just needs a filename and line number.

This change is used by, but independent of, the new implementation of
diagnostic_show_locus later in the kit, so am breaking this out early.

gcc/ChangeLog:
        * input.h (location_get_source_line): Drop "expanded_location"
        param in favor of a file and line number.
        * input.c (location_get_source_line): Likewise.
        (dump_location_info): Update for change in signature of
        location_get_source_line.
        * diagnostic.c (diagnostic_print_caret_line): Likewise.

gcc/c-family/ChangeLog:
        * c-format.c (location_from_offset): Update for change in
        signature of location_get_source_line.
        * c-indentation.c (get_visual_column): Likewise.
        (line_contains_hash_if): Likewise.
---
 gcc/c-family/c-format.c      |  2 +-
 gcc/c-family/c-indentation.c | 10 +++-------
 gcc/diagnostic.c             |  3 ++-
 gcc/input.c                  | 14 ++++++++------
 gcc/input.h                  |  2 +-
 5 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/gcc/c-family/c-format.c b/gcc/c-family/c-format.c
index 2940f92..ab58076 100644
--- a/gcc/c-family/c-format.c
+++ b/gcc/c-family/c-format.c
@@ -132,7 +132,7 @@ location_from_offset (location_t loc, int offset)
 
   expanded_location s = expand_location_to_spelling_point (loc);
   int line_width;
-  const char *line = location_get_source_line (s, &line_width);
+  const char *line = location_get_source_line (s.file, s.line, &line_width);
   if (line == NULL)
     return loc;
   line += s.column - 1 ;
diff --git a/gcc/c-family/c-indentation.c b/gcc/c-family/c-indentation.c
index fdfe0a9..dd35223 100644
--- a/gcc/c-family/c-indentation.c
+++ b/gcc/c-family/c-indentation.c
@@ -45,7 +45,8 @@ get_visual_column (expanded_location exploc,
                   unsigned int *first_nws = NULL)
 {
   int line_len;
-  const char *line = location_get_source_line (exploc, &line_len);
+  const char *line = location_get_source_line (exploc.file, exploc.line,
+                                              &line_len);
   if (!line)
     return false;
   unsigned int vis_column = 0;
@@ -84,13 +85,8 @@ get_visual_column (expanded_location exploc,
 static bool
 line_contains_hash_if (const char *file, int line_num)
 {
-  expanded_location exploc;
-  exploc.file = file;
-  exploc.line = line_num;
-  exploc.column = 1;
-
   int line_len;
-  const char *line = location_get_source_line (exploc, &line_len);
+  const char *line = location_get_source_line (file, line_num, &line_len);
   if (!line)
     return false;
 
diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c
index 01a8e35..74a40bb 100644
--- a/gcc/diagnostic.c
+++ b/gcc/diagnostic.c
@@ -378,7 +378,8 @@ diagnostic_print_caret_line (diagnostic_context * context,
   
   int cmax = MAX (xloc1.column, xloc2.column);
   int line_width;
-  const char *line = location_get_source_line (xloc1, &line_width);
+  const char *line = location_get_source_line (xloc1.file, xloc1.line,
+                                              &line_width);
   if (line == NULL || cmax > line_width)
     return;
 
diff --git a/gcc/input.c b/gcc/input.c
index 59cab5c..e7302a4 100644
--- a/gcc/input.c
+++ b/gcc/input.c
@@ -684,27 +684,27 @@ read_line_num (fcache *c, size_t line_num,
   return read_next_line (c, line, line_len);
 }
 
-/* Return the physical source line that corresponds to xloc in a
+/* Return the physical source line that corresponds to FILE_PATH/LINE in a
    buffer that is statically allocated.  The newline is replaced by
    the null character.  Note that the line can contain several null
    characters, so LINE_LEN, if non-null, points to the actual length
    of the line.  */
 
 const char *
-location_get_source_line (expanded_location xloc,
+location_get_source_line (const char *file_path, int line,
                          int *line_len)
 {
   static char *buffer;
   static ssize_t len;
 
-  if (xloc.line == 0)
+  if (line == 0)
     return NULL;
 
-  fcache *c = lookup_or_add_file_to_cache_tab (xloc.file);
+  fcache *c = lookup_or_add_file_to_cache_tab (file_path);
   if (c == NULL)
     return NULL;
 
-  bool read = read_line_num (c, xloc.line, &buffer, &len);
+  bool read = read_line_num (c, line, &buffer, &len);
 
   if (read && line_len)
     *line_len = len;
@@ -971,7 +971,9 @@ dump_location_info (FILE *stream)
              /* Beginning of a new source line: draw the line.  */
 
              int line_size;
-             const char *line_text = location_get_source_line (exploc, 
&line_size);
+             const char *line_text = location_get_source_line (exploc.file,
+                                                               exploc.line,
+                                                               &line_size);
              if (!line_text)
                break;
              fprintf (stream,
diff --git a/gcc/input.h b/gcc/input.h
index 5ba4d3b..07d8544 100644
--- a/gcc/input.h
+++ b/gcc/input.h
@@ -38,7 +38,7 @@ extern char builtins_location_check[(BUILTINS_LOCATION
 
 extern bool is_location_from_builtin_token (source_location);
 extern expanded_location expand_location (source_location);
-extern const char *location_get_source_line (expanded_location xloc,
+extern const char *location_get_source_line (const char *file_path, int line,
                                             int *line_size);
 extern expanded_location expand_location_to_spelling_point (source_location);
 extern source_location expansion_point_location_if_in_system_header 
(source_location);
-- 
1.8.5.3

Reply via email to