* linespec.c: #include "stack.h".

(decode_line_with_current_source): Moved here from symtab.c and
	renamed from decode_line_spec.  All callers updated.
	(decode_line_with_last_displayed): Moved here from breakpoint.c and
	renamed from decode_line_spec_1.  All callers updated.
	* linespec.h (decode_line_with_current_source): Move declaration here
	from symtab.h and renamed from decode_line_spec.
	(decode_line_with_last_displayed): Move declaration here from symtab.h
	and renamed from decode_line_spec_1.
	* macrocmd.c: #include "linespec.h".
	* symtab.c: Remove #include "linespec.h".
This commit is contained in:
Doug Evans 2012-06-29 22:46:46 +00:00
parent a040981f62
commit 39cf75f7e0
12 changed files with 89 additions and 59 deletions

View File

@ -1,3 +1,17 @@
2012-06-29 Doug Evans <dje@google.com>
* linespec.c: #include "stack.h".
(decode_line_with_current_source): Moved here from symtab.c and
renamed from decode_line_spec. All callers updated.
(decode_line_with_last_displayed): Moved here from breakpoint.c and
renamed from decode_line_spec_1. All callers updated.
* linespec.h (decode_line_with_current_source): Move declaration here
from symtab.h and renamed from decode_line_spec.
(decode_line_with_last_displayed): Move declaration here from symtab.h
and renamed from decode_line_spec_1.
* macrocmd.c: #include "linespec.h".
* symtab.c: Remove #include "linespec.h".
2012-06-28 Doug Evans <dje@google.com>
* dwarf2read.c (get_cu_length): New function.

View File

@ -11532,8 +11532,9 @@ clear_command (char *arg, int from_tty)
if (arg)
{
sals = decode_line_spec (arg, (DECODE_LINE_FUNFIRSTLINE
| DECODE_LINE_LIST_MODE));
sals = decode_line_with_current_source (arg,
(DECODE_LINE_FUNFIRSTLINE
| DECODE_LINE_LIST_MODE));
default_match = 0;
}
else
@ -14494,27 +14495,6 @@ invalidate_bp_value_on_memory_change (CORE_ADDR addr, int len,
}
}
/* Use the last displayed codepoint's values, or nothing
if they aren't valid. */
struct symtabs_and_lines
decode_line_spec_1 (char *string, int flags)
{
struct symtabs_and_lines sals;
if (string == 0)
error (_("Empty line specification."));
if (last_displayed_sal_is_valid ())
sals = decode_line_1 (&string, flags,
get_last_displayed_symtab (),
get_last_displayed_line ());
else
sals = decode_line_1 (&string, flags, (struct symtab *) NULL, 0);
if (*string)
error (_("Junk at end of line specification: %s"), string);
return sals;
}
/* Create and insert a raw software breakpoint at PC. Return an
identifier, which should be used to remove the breakpoint later.
In general, places which call this should be using something on the

View File

@ -1140,7 +1140,7 @@ jump_command (char *arg, int from_tty)
if (!arg)
error_no_arg (_("starting address"));
sals = decode_line_spec_1 (arg, DECODE_LINE_FUNFIRSTLINE);
sals = decode_line_with_last_displayed (arg, DECODE_LINE_FUNFIRSTLINE);
if (sals.nelts != 1)
{
error (_("Unreasonable jump request"));

View File

@ -43,6 +43,7 @@
#include "cli/cli-utils.h"
#include "filenames.h"
#include "ada-lang.h"
#include "stack.h"
typedef struct symtab *symtab_p;
DEF_VEC_P (symtab_p);
@ -2325,6 +2326,8 @@ decode_line_full (char **argptr, int flags,
do_cleanups (cleanups);
}
/* See linespec.h. */
struct symtabs_and_lines
decode_line_1 (char **argptr, int flags,
struct symtab *default_symtab,
@ -2345,6 +2348,51 @@ decode_line_1 (char **argptr, int flags,
return result;
}
/* See linespec.h. */
struct symtabs_and_lines
decode_line_with_current_source (char *string, int flags)
{
struct symtabs_and_lines sals;
struct symtab_and_line cursal;
if (string == 0)
error (_("Empty line specification."));
/* We use whatever is set as the current source line. We do not try
and get a default source symtab+line or it will recursively call us! */
cursal = get_current_source_symtab_and_line ();
sals = decode_line_1 (&string, flags,
cursal.symtab, cursal.line);
if (*string)
error (_("Junk at end of line specification: %s"), string);
return sals;
}
/* See linespec.h. */
struct symtabs_and_lines
decode_line_with_last_displayed (char *string, int flags)
{
struct symtabs_and_lines sals;
if (string == 0)
error (_("Empty line specification."));
if (last_displayed_sal_is_valid ())
sals = decode_line_1 (&string, flags,
get_last_displayed_symtab (),
get_last_displayed_line ());
else
sals = decode_line_1 (&string, flags, (struct symtab *) NULL, 0);
if (*string)
error (_("Junk at end of line specification: %s"), string);
return sals;
}
/* First, some functions to initialize stuff at the beggining of the

View File

@ -93,6 +93,8 @@ extern void destroy_linespec_result (struct linespec_result *);
extern struct cleanup *
make_cleanup_destroy_linespec_result (struct linespec_result *);
/* Decode a linespec using the provided default symtab and line. */
extern struct symtabs_and_lines
decode_line_1 (char **argptr, int flags,
struct symtab *default_symtab, int default_line);
@ -139,4 +141,15 @@ extern void decode_line_full (char **argptr, int flags,
const char *select_mode,
const char *filter);
/* Given a string, return the line specified by it, using the current
source symtab and line as defaults.
This is for commands like "list" and "breakpoint". */
extern struct symtabs_and_lines decode_line_with_current_source (char *, int);
/* Given a string, return the line specified by it, using the last displayed
codepoint's values as defaults, or nothing if they aren't valid. */
extern struct symtabs_and_lines decode_line_with_last_displayed (char *, int);
#endif /* defined (LINESPEC_H) */

View File

@ -26,6 +26,7 @@
#include "command.h"
#include "gdbcmd.h"
#include "gdb_string.h"
#include "linespec.h"
/* The `macro' prefix command. */
@ -282,7 +283,8 @@ info_macros_command (char *args, int from_tty)
ms = default_macro_scope ();
else
{
struct symtabs_and_lines sals = decode_line_spec (args, 0);
struct symtabs_and_lines sals =
decode_line_with_current_source (args, 0);
if (sals.nelts)
ms = sal_macro_scope (sals.sals[0]);

View File

@ -2436,7 +2436,8 @@ mi_cmd_trace_find (char *command, char **argv, int argc)
if (argc != 2)
error (_("Line is required"));
sals = decode_line_spec (argv[1], DECODE_LINE_FUNFIRSTLINE);
sals = decode_line_with_current_source (argv[1],
DECODE_LINE_FUNFIRSTLINE);
back_to = make_cleanup (xfree, sals.sals);
sal = sals.sals[0];

View File

@ -243,7 +243,8 @@ select_source_symtab (struct symtab *s)
if one exists. */
if (lookup_symbol (main_name (), 0, VAR_DOMAIN, 0))
{
sals = decode_line_spec (main_name (), DECODE_LINE_FUNFIRSTLINE);
sals = decode_line_with_current_source (main_name (),
DECODE_LINE_FUNFIRSTLINE);
sal = sals.sals[0];
xfree (sals.sals);
current_source_pspace = sal.pspace;
@ -1405,7 +1406,7 @@ line_info (char *arg, int from_tty)
}
else
{
sals = decode_line_spec_1 (arg, DECODE_LINE_LIST_MODE);
sals = decode_line_with_last_displayed (arg, DECODE_LINE_LIST_MODE);
dont_repeat ();
}

View File

@ -2373,7 +2373,7 @@ func_command (char *arg, int from_tty)
return;
frame = parse_frame_specification ("0");
sals = decode_line_spec (arg, DECODE_LINE_FUNFIRSTLINE);
sals = decode_line_with_current_source (arg, DECODE_LINE_FUNFIRSTLINE);
cleanups = make_cleanup (xfree, sals.sals);
func_bounds = (struct function_bounds *) xmalloc (
sizeof (struct function_bounds) * sals.nelts);

View File

@ -33,7 +33,6 @@
#include "language.h"
#include "demangle.h"
#include "inferior.h"
#include "linespec.h"
#include "source.h"
#include "filenames.h" /* for FILENAME_CMP */
#include "objc-lang.h"
@ -4821,27 +4820,6 @@ skip_prologue_using_sal (struct gdbarch *gdbarch, CORE_ADDR func_addr)
return prologue_sal.pc;
}
struct symtabs_and_lines
decode_line_spec (char *string, int flags)
{
struct symtabs_and_lines sals;
struct symtab_and_line cursal;
if (string == 0)
error (_("Empty line specification."));
/* We use whatever is set as the current source line. We do not try
and get a default or it will recursively call us! */
cursal = get_current_source_symtab_and_line ();
sals = decode_line_1 (&string, flags,
cursal.symtab, cursal.line);
if (*string)
error (_("Junk at end of line specification: %s"), string);
return sals;
}
/* Track MAIN */
static char *name_of_main;
enum language language_of_main = language_unknown;

View File

@ -1113,13 +1113,6 @@ extern int find_line_pc_range (struct symtab_and_line, CORE_ADDR *,
extern void resolve_sal_pc (struct symtab_and_line *);
/* Given a string, return the line specified by it. For commands like "list"
and "breakpoint". */
extern struct symtabs_and_lines decode_line_spec (char *, int);
extern struct symtabs_and_lines decode_line_spec_1 (char *, int);
/* Symmisc.c */
void maintenance_print_symbols (char *, int);

View File

@ -2494,7 +2494,7 @@ trace_find_line_command (char *args, int from_tty)
}
else
{
sals = decode_line_spec (args, DECODE_LINE_FUNFIRSTLINE);
sals = decode_line_with_current_source (args, DECODE_LINE_FUNFIRSTLINE);
sal = sals.sals[0];
}