2003-01-14 David Carlton <carlton@math.stanford.edu>

* linespec.c (decode_line_1): Normalize comments.
	(set_flags): Ditto.
	(locate_first_half): Ditto.
	(decode_compound): Ditto.
	(symtab_from_filename): Ditto.
	(decode_all_digits): Ditto.
	(decode_dollar): Ditto.
	(find_methods): Ditto.
	(find_toplevel_char): Ditto.
This commit is contained in:
David Carlton 2003-01-14 20:48:50 +00:00
parent d29e330fda
commit a04257e6ab
2 changed files with 89 additions and 76 deletions

View File

@ -1,3 +1,15 @@
2003-01-14 David Carlton <carlton@math.stanford.edu>
* linespec.c (decode_line_1): Normalize comments.
(set_flags): Ditto.
(locate_first_half): Ditto.
(decode_compound): Ditto.
(symtab_from_filename): Ditto.
(decode_all_digits): Ditto.
(decode_dollar): Ditto.
(find_methods): Ditto.
(find_toplevel_char): Ditto.
2003-01-13 Andrew Cagney <ac131313@redhat.com>
* ax-gdb.c, c-valprint.c, charset.c, corefile.c: Update copyright.

View File

@ -229,7 +229,8 @@ find_methods (struct type *t, char *name, struct symbol **sym_arr)
else
phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
/* Destructor is handled by caller, dont add it to the list */
/* Destructor is handled by caller, don't add it to
the list. */
if (is_destructor_name (phys_name) != 0)
continue;
@ -255,9 +256,10 @@ find_methods (struct type *t, char *name, struct symbol **sym_arr)
&& (class_name[name_len] == '\0'
|| class_name[name_len] == '<'))
{
/* For GCC 3.x and stabs, constructors and destructors have names
like __base_ctor and __complete_dtor. Check the physname for now
if we're looking for a constructor. */
/* For GCC 3.x and stabs, constructors and destructors
have names like __base_ctor and __complete_dtor.
Check the physname for now if we're looking for a
constructor. */
for (field_counter
= TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
field_counter >= 0;
@ -268,8 +270,8 @@ find_methods (struct type *t, char *name, struct symbol **sym_arr)
f = TYPE_FN_FIELDLIST1 (t, method_counter);
/* GCC 3.x will never produce stabs stub methods, so we don't need
to handle this case. */
/* GCC 3.x will never produce stabs stub methods, so
we don't need to handle this case. */
if (TYPE_FN_FIELD_STUB (f, field_counter))
continue;
phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
@ -358,7 +360,7 @@ find_toplevel_char (char *s, char c)
int quoted = 0; /* zero if we're not in quotes;
'"' if we're in a double-quoted string;
'\'' if we're in a single-quoted string. */
int depth = 0; /* number of unclosed parens we've seen */
int depth = 0; /* Number of unclosed parens we've seen. */
char *scan;
for (scan = s; *scan; scan++)
@ -418,7 +420,7 @@ decode_line_2 (struct symbol *sym_arr[], int nelts, int funfirstline,
printf_unfiltered ("[0] cancel\n[1] all\n");
while (i < nelts)
{
init_sal (&return_values.sals[i]); /* initialize to zeroes */
init_sal (&return_values.sals[i]); /* Initialize to zeroes. */
init_sal (&values.sals[i]);
if (sym_arr[i] && SYMBOL_CLASS (sym_arr[i]) == LOC_BLOCK)
{
@ -579,16 +581,15 @@ decode_line_1 (char **argptr, int funfirstline, struct symtab *default_symtab,
initialize_defaults (&default_symtab, &default_line);
/* See if arg is *PC */
/* See if arg is *PC. */
if (**argptr == '*')
return decode_indirect (argptr);
/* Set various flags.
* 'paren_pointer' is important for overload checking, where
* we allow things like:
* (gdb) break c::f(int)
*/
/* Set various flags. 'paren_pointer' is important for overload
checking, where we allow things like:
(gdb) break c::f(int)
*/
set_flags (*argptr, &is_quoted, &paren_pointer);
@ -655,7 +656,7 @@ decode_line_1 (char **argptr, int funfirstline, struct symtab *default_symtab,
/* S is specified file's symtab, or 0 if no file specified.
arg no longer contains the file name. */
/* Check whether arg is all digits (and sign) */
/* Check whether arg is all digits (and sign). */
q = *argptr;
if (*q == '-' || *q == '+')
@ -671,8 +672,9 @@ decode_line_1 (char **argptr, int funfirstline, struct symtab *default_symtab,
/* Arg token is not digits => try it as a variable name
Find the next token (everything up to end or next whitespace). */
if (**argptr == '$') /* May be a convenience variable */
p = skip_quoted (*argptr + (((*argptr)[1] == '$') ? 2 : 1)); /* One or two $ chars possible */
if (**argptr == '$') /* May be a convenience variable. */
/* One or two $ chars possible. */
p = skip_quoted (*argptr + (((*argptr)[1] == '$') ? 2 : 1));
else if (is_quoted)
{
p = skip_quoted (*argptr);
@ -705,7 +707,7 @@ decode_line_1 (char **argptr, int funfirstline, struct symtab *default_symtab,
/* If it starts with $: may be a legitimate variable or routine name
(e.g. HP-UX millicode routines such as $$dyncall), or it may
be history value, or it may be a convenience variable */
be history value, or it may be a convenience variable. */
if (*copy == '$')
return decode_dollar (copy, funfirstline, default_symtab,
@ -769,8 +771,8 @@ set_flags (char *arg, int *is_quoted, char **paren_pointer)
int has_if = 0;
/* 'has_if' is for the syntax:
* (gdb) break foo if (a==b)
*/
(gdb) break foo if (a==b)
*/
if ((ii = strstr (arg, " if ")) != NULL ||
(ii = strstr (arg, "\tif ")) != NULL ||
(ii = strstr (arg, " if\t")) != NULL ||
@ -778,10 +780,9 @@ set_flags (char *arg, int *is_quoted, char **paren_pointer)
(ii = strstr (arg, " if(")) != NULL ||
(ii = strstr (arg, "\tif( ")) != NULL)
has_if = 1;
/* Temporarily zap out "if (condition)" to not
* confuse the parenthesis-checking code below.
* This is undone below. Do not change ii!!
*/
/* Temporarily zap out "if (condition)" to not confuse the
parenthesis-checking code below. This is undone below. Do not
change ii!! */
if (has_if)
{
*ii = '\0';
@ -795,9 +796,8 @@ set_flags (char *arg, int *is_quoted, char **paren_pointer)
if (*paren_pointer != NULL)
*paren_pointer = strrchr (*paren_pointer, ')');
/* Now that we're safely past the paren_pointer check,
* put back " if (condition)" so outer layers can see it
*/
/* Now that we're safely past the paren_pointer check, put back " if
(condition)" so outer layers can see it. */
if (has_if)
*ii = ' ';
}
@ -850,18 +850,16 @@ locate_first_half (char **argptr, int *is_quote_enclosed)
ii = find_toplevel_char (*argptr, ',');
has_comma = (ii != 0);
/* Temporarily zap out second half to not
* confuse the code below.
* This is undone below. Do not change ii!!
*/
/* Temporarily zap out second half to not confuse the code below.
This is undone below. Do not change ii!! */
if (has_comma)
{
*ii = '\0';
}
/* Maybe arg is FILE : LINENUM or FILE : FUNCTION */
/* May also be CLASS::MEMBER, or NAMESPACE::NAME */
/* Look for ':', but ignore inside of <> */
/* Maybe arg is FILE : LINENUM or FILE : FUNCTION. May also be
CLASS::MEMBER, or NAMESPACE::NAME. Look for ':', but ignore
inside of <>. */
p = *argptr;
if (p[0] == '"')
@ -881,18 +879,20 @@ locate_first_half (char **argptr, int *is_quote_enclosed)
error ("malformed template specification in command");
p = temp_end;
}
/* Check for the end of the first half of the linespec. End of line,
a tab, a double colon or the last single colon, or a space. But
if enclosed in double quotes we do not break on enclosed spaces */
/* Check for the end of the first half of the linespec. End of
line, a tab, a double colon or the last single colon, or a
space. But if enclosed in double quotes we do not break on
enclosed spaces. */
if (!*p
|| p[0] == '\t'
|| ((p[0] == ':')
&& ((p[1] == ':') || (strchr (p + 1, ':') == NULL)))
|| ((p[0] == ' ') && !*is_quote_enclosed))
break;
if (p[0] == '.' && strchr (p, ':') == NULL) /* Java qualified method. */
if (p[0] == '.' && strchr (p, ':') == NULL)
{
/* Find the *last* '.', since the others are package qualifiers. */
/* Java qualified method. Find the *last* '.', since the
others are package qualifiers. */
for (p1 = p; *p1; p1++)
{
if (*p1 == '.')
@ -904,7 +904,7 @@ locate_first_half (char **argptr, int *is_quote_enclosed)
while (p[0] == ' ' || p[0] == '\t')
p++;
/* if the closing double quote was left at the end, remove it */
/* If the closing double quote was left at the end, remove it. */
if (*is_quote_enclosed)
{
char *closing_quote = strchr (p - 1, '"');
@ -912,9 +912,8 @@ locate_first_half (char **argptr, int *is_quote_enclosed)
*closing_quote = '\0';
}
/* Now that we've safely parsed the first half,
* put back ',' so outer layers can see it
*/
/* Now that we've safely parsed the first half, put back ',' so
outer layers can see it. */
if (has_comma)
*ii = ',';
@ -947,8 +946,8 @@ decode_compound (char **argptr, int funfirstline, char ***canonical,
struct type *t;
/* First check for "global" namespace specification,
of the form "::foo". If found, skip over the colons
and jump to normal symbol processing */
of the form "::foo". If found, skip over the colons
and jump to normal symbol processing. */
if (p[0] == ':'
&& ((*argptr == p) || (p[-1] == ' ') || (p[-1] == '\t')))
saved_arg2 += 2;
@ -971,9 +970,9 @@ decode_compound (char **argptr, int funfirstline, char ***canonical,
Note that namespaces can nest only inside other
namespaces, and not inside classes. So we need only
consider *prefixes* of the string; there is no need to look up
"B::C" separately as a symbol in the previous example. */
"B::C" separately as a symbol in the previous example. */
p2 = p; /* save for restart */
p2 = p; /* Save for restart. */
while (1)
{
/* Extract the class name. */
@ -998,8 +997,9 @@ decode_compound (char **argptr, int funfirstline, char ***canonical,
(TYPE_CODE (t) == TYPE_CODE_STRUCT
|| TYPE_CODE (t) == TYPE_CODE_UNION)))
{
/* Arg token is not digits => try it as a function name
Find the next token(everything up to end or next blank). */
/* Arg token is not digits => try it as a function name.
Find the next token (everything up to end or next
blank). */
if (**argptr
&& strchr (get_gdb_completer_quote_characters (),
**argptr) != NULL)
@ -1043,13 +1043,13 @@ decode_compound (char **argptr, int funfirstline, char ***canonical,
copy[p - *argptr - 1] = '\0';
}
/* no line number may be specified */
/* No line number may be specified. */
while (*p == ' ' || *p == '\t')
p++;
*argptr = p;
sym = 0;
i1 = 0; /* counter for the symbol array */
i1 = 0; /* Counter for the symbol array. */
sym_arr = (struct symbol **) alloca (total_number_of_methods (t)
* sizeof (struct symbol *));
@ -1120,9 +1120,9 @@ decode_compound (char **argptr, int funfirstline, char ***canonical,
}
}
/* Move pointer up to next possible class/namespace token */
p = p2 + 1; /* restart with old value +1 */
/* Move pointer ahead to next double-colon */
/* Move pointer up to next possible class/namespace token. */
p = p2 + 1; /* Restart with old value +1. */
/* Move pointer ahead to next double-colon. */
while (*p && (p[0] != ' ') && (p[0] != '\t') && (p[0] != '\''))
{
if (p[0] == '<')
@ -1133,26 +1133,27 @@ decode_compound (char **argptr, int funfirstline, char ***canonical,
p = temp_end;
}
else if ((p[0] == ':') && (p[1] == ':'))
break; /* found double-colon */
break; /* Found double-colon. */
else
p++;
}
if (*p != ':')
break; /* out of the while (1) */
break; /* Out of the while (1). */
p2 = p; /* save restart for next time around */
*argptr = saved_arg2; /* restore argptr */
p2 = p; /* Save restart for next time around. */
*argptr = saved_arg2; /* Restore argptr. */
} /* while (1) */
/* Last chance attempt -- check entire name as a symbol */
/* Use "copy" in preparation for jumping out of this block,
to be consistent with usage following the jump target */
/* Last chance attempt -- check entire name as a symbol. Use "copy"
in preparation for jumping out of this block, to be consistent
with usage following the jump target. */
copy = (char *) alloca (p - saved_arg2 + 1);
memcpy (copy, saved_arg2, p - saved_arg2);
/* Note: if is_quoted should be true, we snuff out quote here anyway */
/* Note: if is_quoted should be true, we snuff out quote here
anyway. */
copy[p - saved_arg2] = '\000';
/* Set argptr to skip over the name */
/* Set argptr to skip over the name. */
*argptr = (*p == '\'') ? p + 1 : p;
/* Look up entire name */
sym = lookup_symbol (copy, 0, VAR_NAMESPACE, 0, &sym_symtab);
@ -1160,8 +1161,8 @@ decode_compound (char **argptr, int funfirstline, char ***canonical,
return symbol_found (funfirstline, canonical, copy, sym,
NULL, sym_symtab);
/* Couldn't find any interpretation as classes/namespaces, so give up */
/* The quotes are important if copy is empty. */
/* Couldn't find any interpretation as classes/namespaces, so give
up. The quotes are important if copy is empty. */
cplusplus_error (saved_arg,
"Can't find member of namespace, class, struct, or union named \"%s\"\n",
copy);
@ -1186,7 +1187,7 @@ symtab_from_filename (char **argptr, char *p, int is_quote_enclosed)
--p;
copy = (char *) alloca (p - *argptr + 1);
memcpy (copy, *argptr, p - *argptr);
/* It may have the ending quote right after the file name */
/* It may have the ending quote right after the file name. */
if (is_quote_enclosed && copy[p - *argptr - 1] == '"')
copy[p - *argptr - 1] = 0;
else
@ -1240,11 +1241,11 @@ decode_all_digits (char **argptr, struct symtab *default_symtab,
We must guarantee that this section of code is never executed
when we are called with just a function name, since
set_default_source_symtab_and_line uses
select_source_symtab that calls us with such an argument */
select_source_symtab that calls us with such an argument. */
if (file_symtab == 0 && default_symtab == 0)
{
/* Make sure we have at least a default source file. */
/* Make sure we have at least a default source file. */
set_default_source_symtab_and_line ();
initialize_defaults (&default_symtab, &default_line);
}
@ -1319,9 +1320,9 @@ decode_dollar (char *copy, int funfirstline, struct symtab *default_symtab,
p = (copy[1] == '$') ? copy + 2 : copy + 1;
while (*p >= '0' && *p <= '9')
p++;
if (!*p) /* reached end of token without hitting non-digit */
if (!*p) /* Reached end of token without hitting non-digit. */
{
/* We have a value history reference */
/* We have a value history reference. */
sscanf ((copy[1] == '$') ? copy + 2 : copy + 1, "%d", &index);
valx = access_value_history ((copy[1] == '$') ? -index : index);
if (TYPE_CODE (VALUE_TYPE (valx)) != TYPE_CODE_INT)
@ -1330,9 +1331,9 @@ decode_dollar (char *copy, int funfirstline, struct symtab *default_symtab,
else
{
/* Not all digits -- may be user variable/function or a
convenience variable */
convenience variable. */
/* Look up entire name as a symbol first */
/* Look up entire name as a symbol first. */
sym = lookup_symbol (copy, 0, VAR_NAMESPACE, 0, &sym_symtab);
file_symtab = (struct symtab *) 0;
need_canonical = 1;
@ -1341,13 +1342,13 @@ decode_dollar (char *copy, int funfirstline, struct symtab *default_symtab,
return symbol_found (funfirstline, canonical, copy, sym,
NULL, sym_symtab);
/* If symbol was not found, look in minimal symbol tables */
/* If symbol was not found, look in minimal symbol tables. */
msymbol = lookup_minimal_symbol (copy, NULL, NULL);
/* Min symbol was found --> jump to minsym processing. */
/* Min symbol was found --> jump to minsym processing. */
if (msymbol)
return minsym_found (funfirstline, msymbol);
/* Not a user variable or function -- must be convenience variable */
/* Not a user variable or function -- must be convenience variable. */
need_canonical = (file_symtab == 0) ? 1 : 0;
valx = value_of_internalvar (lookup_internalvar (copy + 1));
if (TYPE_CODE (VALUE_TYPE (valx)) != TYPE_CODE_INT)
@ -1356,7 +1357,7 @@ decode_dollar (char *copy, int funfirstline, struct symtab *default_symtab,
init_sal (&val);
/* Either history value or convenience value from above, in valx */
/* Either history value or convenience value from above, in valx. */
val.symtab = file_symtab ? file_symtab : default_symtab;
val.line = value_as_long (valx);
val.pc = 0;