+2000-01-06 Jason Merrill <jason@casey.cygnus.com>
+
+ * error.c (dump_decl): operator new, not operatornew.
+
+ * class.c (field_decl_cmp): A nontype is "greater" than a type.
+ * search.c (lookup_field_1): Look for the last field with the
+ desired name.
+
2000-01-05 Nathan Sidwell <nathan@acm.org>
* decl2.c (lookup_arg_dependent): Deal with FNS not being a
(avoid_overlap): Moved here from tree.c.
(build_base_fields): Likewise.
(check_bases): New function, split out from finish_base_struct.
- (check_bases_and_members): New function, split out from finish_struct_1.
+ (check_bases_and_members): New function, split out from
+ finish_struct_1.
(struct base_info): Remove cant_have_default_ctor,
cant_have_const_ctor, cant_have_asn_ref.
(finish_base_struct): Split semantic analysis into check_bases.
const tree *x, *y;
{
if (DECL_NAME (*x) == DECL_NAME (*y))
- return 0;
+ /* A nontype is "greater" than a type. */
+ return DECL_DECLARES_TYPE_P (*y) - DECL_DECLARES_TYPE_P (*x);
if (DECL_NAME (*x) == NULL_TREE)
return -1;
if (DECL_NAME (*y) == NULL_TREE)
{
const char *name_string = operator_name_string (t);
OB_PUTS ("operator");
+ if (ISALPHA (name_string[0]))
+ OB_PUTC (' ');
OB_PUTCP (name_string);
}
else
{
const char *name_string = operator_name_string (name);
OB_PUTS ("operator");
+ if (ISALPHA (name_string[0]))
+ OB_PUTC (' ');
OB_PUTCP (name_string);
}
else
else if (DECL_NAME (fields[i]) < name)
lo = i + 1;
else
- return fields[i];
+ {
+ /* We might have a nested class and a field with the
+ same name; we sorted them appropriately via
+ field_decl_cmp, so just look for the last field with
+ this name. */
+ while (i + 1 < hi
+ && DECL_NAME (fields[i+1]) == name)
+ ++i;
+ return fields[i];
+ }
}
return NULL_TREE;
}