* 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:
Nicholas Duffek 2000-07-09 05:15:50 +00:00
parent 2bec05724f
commit 6b1ba9a002
3 changed files with 32 additions and 22 deletions

View File

@ -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.

View File

@ -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. */

View File

@ -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)
{ {