fbsd-nat: Don't use '%jd' and '%ju' with printf_filtered.
[deliverable/binutils-gdb.git] / gdb / source.h
index fcd83daafcdffe0782acd1c0e63c7d1ca6a19d8a..e4f6129c3e3c682e428ce69a5912fd35b00ab6dd 100644 (file)
@@ -1,5 +1,5 @@
 /* List lines of source files for GDB, the GNU debugger.
-   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,7 +19,7 @@
 #ifndef SOURCE_H
 #define SOURCE_H
 
-#include "common/scoped_fd.h"
+#include "gdbsupport/scoped_fd.h"
 
 struct symtab;
 
@@ -84,12 +84,6 @@ extern const char *symtab_to_fullname (struct symtab *s);
    filename.  It depends on 'set filename-display' value.  */
 extern const char *symtab_to_filename_for_display (struct symtab *symtab);
 
-/* Create and initialize the table S->line_charpos that records the
-   positions of the lines in the source file, which is assumed to be
-   open on descriptor DESC.  All set S->nlines to the number of such
-   lines.  */
-extern void find_source_lines (struct symtab *s, int desc);
-
 /* Return the first line listed by print_source_lines.  Used by
    command interpreters to request listing from a previous point.  If
    0, then no source lines have yet been listed since the last time
@@ -128,17 +122,6 @@ extern void clear_current_source_symtab_and_line (void);
 /* Add a source path substitution rule.  */
 extern void add_substitute_path_rule (char *, char *);
 
-/* Print text describing the full name of the source file S
-   and the line number LINE and its corresponding character position.
-   The text starts with two Ctrl-z so that the Emacs-GDB interface
-   can easily find it.
-
-   MID_STATEMENT is nonzero if the PC is not at the beginning of that line.
-
-   Return 1 if successful, 0 if could not find the file.  */
-extern int identify_source_line (struct symtab *s, int line,
-                                int mid_statement, CORE_ADDR pc);
-
 /* Flags passed as 4th argument to print_source_lines.  */
 enum print_source_lines_flag
   {
@@ -157,6 +140,54 @@ DEF_ENUM_FLAGS_TYPE (enum print_source_lines_flag, print_source_lines_flags);
 extern void print_source_lines (struct symtab *s, int line, int stopline,
                                print_source_lines_flags flags);
 
+/* Wrap up the logic to build a line number range for passing to
+   print_source_lines when using get_lines_to_list.  An instance of this
+   class can be built from a single line number and a direction (forward or
+   backward) the range is then computed using get_lines_to_list.  */
+class source_lines_range
+{
+public:
+  /* When constructing the range from a single line number, does the line
+     range extend forward, or backward.  */
+  enum direction
+  {
+   FORWARD,
+   BACKWARD
+  };
+
+  /* Construct a SOURCE_LINES_RANGE starting at STARTLINE and extending in
+   direction DIR.  The number of lines is from GET_LINES_TO_LIST.  If the
+   direction is backward then the start is actually (STARTLINE -
+   GET_LINES_TO_LIST).  There is also logic in place to ensure the start
+   is always 1 or more, and the end will be at most INT_MAX.  */
+  explicit source_lines_range (int startline, direction dir = FORWARD);
+
+  /* Construct a SOURCE_LINES_RANGE from STARTLINE to STOPLINE.  */
+  explicit source_lines_range (int startline, int stopline)
+    : m_startline (startline),
+      m_stopline (stopline)
+  { /* Nothing.  */ }
+
+  /* Return the line to start listing from.  */
+  int startline () const
+  { return m_startline; }
+
+  /* Return the line after the last line that should be listed.  */
+  int stopline () const
+  { return m_stopline; }
+
+private:
+
+  /* The start and end of the range.  */
+  int m_startline;
+  int m_stopline;
+};
+
+/* Variation of previous print_source_lines that takes a range instead of a
+   start and end line number.  */
+extern void print_source_lines (struct symtab *s, source_lines_range r,
+                               print_source_lines_flags flags);
+
 /* Forget line positions and file names for the symtabs in a
    particular objfile.  */
 extern void forget_cached_source_info_for_objfile (struct objfile *);
This page took 0.033807 seconds and 4 git commands to generate.