Commit 5c64ead4 by Tom Tromey Committed by Tom Tromey

class.c (supers_all_compiled): New function.

	* class.c (supers_all_compiled): New function.
	(make_class_data): Use it.

From-SVN: r61561
parent 9179646e
2003-01-21 Tom Tromey <tromey@redhat.com> 2003-01-21 Tom Tromey <tromey@redhat.com>
* class.c (supers_all_compiled): New function.
(make_class_data): Use it.
2003-01-21 Tom Tromey <tromey@redhat.com>
* parse.y (method_header): Native method can't be strictfp. * parse.y (method_header): Native method can't be strictfp.
No method can be transient or volatile. No method can be transient or volatile.
......
...@@ -54,6 +54,7 @@ static int32 hashUtf8String (const char *, int); ...@@ -54,6 +54,7 @@ static int32 hashUtf8String (const char *, int);
static tree make_field_value (tree); static tree make_field_value (tree);
static tree get_dispatch_vector (tree); static tree get_dispatch_vector (tree);
static tree get_dispatch_table (tree, tree); static tree get_dispatch_table (tree, tree);
static int supers_all_compiled (tree type);
static void add_interface_do (tree, tree, int); static void add_interface_do (tree, tree, int);
static tree maybe_layout_super_class (tree, tree); static tree maybe_layout_super_class (tree, tree);
static int assume_compiled (const char *); static int assume_compiled (const char *);
...@@ -1265,7 +1266,8 @@ static tree ...@@ -1265,7 +1266,8 @@ static tree
get_dispatch_vector (tree type) get_dispatch_vector (tree type)
{ {
tree vtable = TYPE_VTABLE (type); tree vtable = TYPE_VTABLE (type);
if (vtable == NULL)
if (vtable == NULL_TREE)
{ {
HOST_WIDE_INT i; HOST_WIDE_INT i;
tree method; tree method;
...@@ -1367,6 +1369,18 @@ get_dispatch_table (tree type, tree this_class_addr) ...@@ -1367,6 +1369,18 @@ get_dispatch_table (tree type, tree this_class_addr)
NULL_TREE, list); NULL_TREE, list);
} }
static int
supers_all_compiled (tree type)
{
while (type != NULL_TREE)
{
if (!assume_compiled (IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)))))
return 0;
type = CLASSTYPE_SUPER (type);
}
return 1;
}
void void
make_class_data (tree type) make_class_data (tree type)
{ {
...@@ -1468,8 +1482,8 @@ make_class_data (tree type) ...@@ -1468,8 +1482,8 @@ make_class_data (tree type)
DECL_IGNORED_P (methods_decl) = 1; DECL_IGNORED_P (methods_decl) = 1;
rest_of_decl_compilation (methods_decl, (char*) 0, 1, 0); rest_of_decl_compilation (methods_decl, (char*) 0, 1, 0);
if (assume_compiled (IDENTIFIER_POINTER (DECL_NAME (type_decl))) if (supers_all_compiled (type) && ! CLASS_INTERFACE (type_decl)
&& ! CLASS_INTERFACE (type_decl) && !flag_indirect_dispatch) && !flag_indirect_dispatch)
{ {
tree dtable = get_dispatch_table (type, this_class_addr); tree dtable = get_dispatch_table (type, this_class_addr);
dtable_decl = build_dtable_decl (type); dtable_decl = build_dtable_decl (type);
...@@ -1956,9 +1970,6 @@ layout_class_methods (tree this_class) ...@@ -1956,9 +1970,6 @@ layout_class_methods (tree this_class)
TYPE_NVIRTUALS (this_class) = dtable_count; TYPE_NVIRTUALS (this_class) = dtable_count;
} }
/* Return 0 if NAME is equal to STR, -1 if STR is "less" than NAME,
and 1 if STR is "greater" than NAME. */
/* Lay METHOD_DECL out, returning a possibly new value of /* Lay METHOD_DECL out, returning a possibly new value of
DTABLE_COUNT. Also mangle the method's name. */ DTABLE_COUNT. Also mangle the method's name. */
...@@ -1995,7 +2006,7 @@ layout_class_method (tree this_class, tree super_class, ...@@ -1995,7 +2006,7 @@ layout_class_method (tree this_class, tree super_class,
} }
else if (! METHOD_STATIC (method_decl) && !DECL_ARTIFICIAL (method_decl)) else if (! METHOD_STATIC (method_decl) && !DECL_ARTIFICIAL (method_decl))
{ {
tree method_sig = tree method_sig =
build_java_argument_signature (TREE_TYPE (method_decl)); build_java_argument_signature (TREE_TYPE (method_decl));
tree super_method = lookup_argument_method (super_class, method_name, tree super_method = lookup_argument_method (super_class, method_name,
method_sig); method_sig);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment