mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-23 13:21:43 +08:00
* gdbtypes.c (is_ancestor): Infer type equivalence from name
equivalence. (rank_one_type): Use strcmp instead of == to compare type names. Don't swap parm with arg when checking TYPE_CODE_REF types. * valops.c (find_overload_match): Fix indentation. Compare parameter rankings to 0..9, 10..99, and 100+ instead of 0, 10, and 100.
This commit is contained in:
parent
2bec05724f
commit
6b1ba9a002
@ -1,3 +1,13 @@
|
|||||||
|
2000-07-09 Nick Duffek <nsd@redhat.com>
|
||||||
|
|
||||||
|
* gdbtypes.c (is_ancestor): Infer type equivalence from name
|
||||||
|
equivalence.
|
||||||
|
(rank_one_type): Use strcmp instead of == to compare type names.
|
||||||
|
Don't swap parm with arg when checking TYPE_CODE_REF types.
|
||||||
|
* valops.c (find_overload_match): Fix indentation. Compare
|
||||||
|
parameter rankings to 0..9, 10..99, and 100+ instead of 0, 10,
|
||||||
|
and 100.
|
||||||
|
|
||||||
2000-07-07 David Edelsohn <edelsohn@gnu.org>
|
2000-07-07 David Edelsohn <edelsohn@gnu.org>
|
||||||
|
|
||||||
* xcoffread.c (read_symbol_nvalue): Return CORE_ADDR.
|
* xcoffread.c (read_symbol_nvalue): Return CORE_ADDR.
|
||||||
|
@ -1736,6 +1736,9 @@ is_ancestor (base, dclass)
|
|||||||
|
|
||||||
if (base == dclass)
|
if (base == dclass)
|
||||||
return 1;
|
return 1;
|
||||||
|
if (TYPE_NAME (base) && TYPE_NAME (dclass) &&
|
||||||
|
!strcmp (TYPE_NAME (base), TYPE_NAME (dclass)))
|
||||||
|
return 1;
|
||||||
|
|
||||||
for (i = 0; i < TYPE_N_BASECLASSES (dclass); i++)
|
for (i = 0; i < TYPE_N_BASECLASSES (dclass); i++)
|
||||||
if (is_ancestor (base, TYPE_BASECLASS (dclass, i)))
|
if (is_ancestor (base, TYPE_BASECLASS (dclass, i)))
|
||||||
@ -2206,7 +2209,8 @@ rank_one_type (parm, arg)
|
|||||||
really are the same.
|
really are the same.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (TYPE_NAME (parm) == TYPE_NAME (arg))
|
if (TYPE_NAME (parm) && TYPE_NAME (arg) &&
|
||||||
|
!strcmp (TYPE_NAME (parm), TYPE_NAME (arg)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Check if identical after resolving typedefs */
|
/* Check if identical after resolving typedefs */
|
||||||
@ -2216,10 +2220,10 @@ rank_one_type (parm, arg)
|
|||||||
/* See through references, since we can almost make non-references
|
/* See through references, since we can almost make non-references
|
||||||
references. */
|
references. */
|
||||||
if (TYPE_CODE (arg) == TYPE_CODE_REF)
|
if (TYPE_CODE (arg) == TYPE_CODE_REF)
|
||||||
return (rank_one_type (TYPE_TARGET_TYPE (arg), parm)
|
return (rank_one_type (parm, TYPE_TARGET_TYPE (arg))
|
||||||
+ REFERENCE_CONVERSION_BADNESS);
|
+ REFERENCE_CONVERSION_BADNESS);
|
||||||
if (TYPE_CODE (parm) == TYPE_CODE_REF)
|
if (TYPE_CODE (parm) == TYPE_CODE_REF)
|
||||||
return (rank_one_type (arg, TYPE_TARGET_TYPE (parm))
|
return (rank_one_type (TYPE_TARGET_TYPE (parm), arg)
|
||||||
+ REFERENCE_CONVERSION_BADNESS);
|
+ REFERENCE_CONVERSION_BADNESS);
|
||||||
if (overload_debug)
|
if (overload_debug)
|
||||||
/* Debugging only. */
|
/* Debugging only. */
|
||||||
|
34
gdb/valops.c
34
gdb/valops.c
@ -2858,16 +2858,16 @@ find_overload_match (arg_types, nargs, name, method, lax, obj, fsym, valp, symp,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
free (parm_types);
|
free (parm_types);
|
||||||
if (overload_debug)
|
if (overload_debug)
|
||||||
{
|
{
|
||||||
if (method)
|
if (method)
|
||||||
fprintf_filtered (gdb_stderr,"Overloaded method instance %s, # of parms %d\n", fns_ptr[ix].physname, nparms);
|
fprintf_filtered (gdb_stderr,"Overloaded method instance %s, # of parms %d\n", fns_ptr[ix].physname, nparms);
|
||||||
else
|
else
|
||||||
fprintf_filtered (gdb_stderr,"Overloaded function instance %s # of parms %d\n", SYMBOL_DEMANGLED_NAME (oload_syms[ix]), nparms);
|
fprintf_filtered (gdb_stderr,"Overloaded function instance %s # of parms %d\n", SYMBOL_DEMANGLED_NAME (oload_syms[ix]), nparms);
|
||||||
for (jj = 0; jj < nargs; jj++)
|
for (jj = 0; jj < nargs; jj++)
|
||||||
fprintf_filtered (gdb_stderr,"...Badness @ %d : %d\n", jj, bv->rank[jj]);
|
fprintf_filtered (gdb_stderr,"...Badness @ %d : %d\n", jj, bv->rank[jj]);
|
||||||
fprintf_filtered (gdb_stderr,"Overload resolution champion is %d, ambiguous? %d\n", oload_champ, oload_ambiguous);
|
fprintf_filtered (gdb_stderr,"Overload resolution champion is %d, ambiguous? %d\n", oload_champ, oload_ambiguous);
|
||||||
}
|
}
|
||||||
} /* end loop over all candidates */
|
} /* end loop over all candidates */
|
||||||
/* NOTE: dan/2000-03-10: Seems to be a better idea to just pick one
|
/* NOTE: dan/2000-03-10: Seems to be a better idea to just pick one
|
||||||
if they have the exact same goodness. This is because there is no
|
if they have the exact same goodness. This is because there is no
|
||||||
@ -2890,15 +2890,11 @@ if (overload_debug)
|
|||||||
/* Check how bad the best match is */
|
/* Check how bad the best match is */
|
||||||
for (ix = 1; ix <= nargs; ix++)
|
for (ix = 1; ix <= nargs; ix++)
|
||||||
{
|
{
|
||||||
switch (oload_champ_bv->rank[ix])
|
if (oload_champ_bv->rank[ix] >= 100)
|
||||||
{
|
oload_incompatible = 1; /* truly mismatched types */
|
||||||
case 10:
|
|
||||||
oload_non_standard = 1; /* non-standard type conversions needed */
|
else if (oload_champ_bv->rank[ix] >= 10)
|
||||||
break;
|
oload_non_standard = 1; /* non-standard type conversions needed */
|
||||||
case 100:
|
|
||||||
oload_incompatible = 1; /* truly mismatched types */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (oload_incompatible)
|
if (oload_incompatible)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user