* linespec.c (decode_line_internal): Don't call symtabs_from_filename

if we know we don't have a file name to look for.
This commit is contained in:
Doug Evans 2012-01-17 20:30:22 +00:00
parent fc1ab1a0ff
commit 136e1c3078
2 changed files with 37 additions and 20 deletions

View File

@ -1,3 +1,8 @@
2012-01-17 Doug Evans <dje@google.com>
* linespec.c (decode_line_internal): Don't call symtabs_from_filename
if we know we don't have a file name to look for.
2012-01-17 Pedro Alves <palves@redhat.com>
* dwarf2-frame.c (dwarf2_frame_cfa): Throw NOT_AVAILABLE_ERROR, if

View File

@ -894,32 +894,44 @@ decode_line_internal (struct linespec_state *self, char **argptr)
first_half = p = locate_first_half (argptr, &is_quote_enclosed);
/* First things first: if ARGPTR starts with a filename, get its
symtab and strip the filename from ARGPTR. */
TRY_CATCH (file_exception, RETURN_MASK_ERROR)
{
self->file_symtabs = symtabs_from_filename (argptr, p, is_quote_enclosed,
&self->user_filename);
}
symtab and strip the filename from ARGPTR.
Avoid calling symtab_from_filename if we know can,
it can be expensive. */
if (VEC_empty (symtab_p, self->file_symtabs))
if (*p != '\0')
{
TRY_CATCH (file_exception, RETURN_MASK_ERROR)
{
self->file_symtabs = symtabs_from_filename (argptr, p,
is_quote_enclosed,
&self->user_filename);
}
if (file_exception.reason >= 0)
{
/* Check for single quotes on the non-filename part. */
is_quoted = (**argptr
&& strchr (get_gdb_completer_quote_characters (),
**argptr) != NULL);
if (is_quoted)
end_quote = skip_quoted (*argptr);
/* Locate the next "half" of the linespec. */
first_half = p = locate_first_half (argptr, &is_quote_enclosed);
}
if (VEC_empty (symtab_p, self->file_symtabs))
{
/* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB. */
VEC_safe_push (symtab_p, self->file_symtabs, NULL);
}
}
else
{
/* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB. */
VEC_safe_push (symtab_p, self->file_symtabs, NULL);
}
if (file_exception.reason >= 0)
{
/* Check for single quotes on the non-filename part. */
is_quoted = (**argptr
&& strchr (get_gdb_completer_quote_characters (),
**argptr) != NULL);
if (is_quoted)
end_quote = skip_quoted (*argptr);
/* Locate the next "half" of the linespec. */
first_half = p = locate_first_half (argptr, &is_quote_enclosed);
}
/* Check if this is an Objective-C method (anything that starts with
a '+' or '-' and a '['). */
if (is_objc_method_format (p))