Commit 9062f848 by Nathan Froyd Committed by Nathan Froyd

java-tree.h (struct lang_type): Change type to a VEC.

	* java-tree.h (struct lang_type) [catch_classes]: Change type to a
	VEC.
	* except.c (prepare_eh_table_type): Call CONSTRUCTOR_APPEND_ELT
	instead of tree_cons.
	* class.c (make_class): Add dummy entry to TYPE_CATCH_CLASSES.
	(emit_catch_table): Adjust for new type of TYPE_CATCH_CLASSES.

From-SVN: r161487
parent 04924d6a
2010-06-28 Nathan Froyd <froydnj@codesourcery.com>
* java-tree.h (struct lang_type) [catch_classes]: Change type to a
VEC.
* except.c (prepare_eh_table_type): Call CONSTRUCTOR_APPEND_ELT
instead of tree_cons.
* class.c (make_class): Add dummy entry to TYPE_CATCH_CLASSES.
(emit_catch_table): Adjust for new type of TYPE_CATCH_CLASSES.
2010-06-28 Steven Bosscher <steven@gcc.gnu.org> 2010-06-28 Steven Bosscher <steven@gcc.gnu.org>
* lang.c: Do not include except.h * lang.c: Do not include except.h
......
...@@ -382,6 +382,12 @@ make_class (void) ...@@ -382,6 +382,12 @@ make_class (void)
loading works. */ loading works. */
TYPE_BINFO (type) = make_tree_binfo (0); TYPE_BINFO (type) = make_tree_binfo (0);
MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC (type); MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC (type);
TYPE_CATCH_CLASSES (type) = NULL;
/* Push a dummy entry; we can't call make_catch_class_record here
because other infrastructure may not be set up yet. We'll come
back and fill it in later once said infrastructure is
initialized. */
CONSTRUCTOR_APPEND_ELT (TYPE_CATCH_CLASSES (type), NULL_TREE, NULL_TREE);
return type; return type;
} }
...@@ -2960,18 +2966,17 @@ tree ...@@ -2960,18 +2966,17 @@ tree
emit_catch_table (tree this_class) emit_catch_table (tree this_class)
{ {
tree table, table_size, array_type; tree table, table_size, array_type;
TYPE_CATCH_CLASSES (this_class) = int n_catch_classes;
tree_cons (NULL, constructor_elt *e;
make_catch_class_record (null_pointer_node, null_pointer_node), /* Fill in the dummy entry that make_class created. */
TYPE_CATCH_CLASSES (this_class)); e = VEC_index (constructor_elt, TYPE_CATCH_CLASSES (this_class), 0);
TYPE_CATCH_CLASSES (this_class) = nreverse (TYPE_CATCH_CLASSES (this_class)); e->value = make_catch_class_record (null_pointer_node, null_pointer_node);
TYPE_CATCH_CLASSES (this_class) = CONSTRUCTOR_APPEND_ELT (TYPE_CATCH_CLASSES (this_class), NULL_TREE,
tree_cons (NULL, make_catch_class_record (null_pointer_node,
make_catch_class_record (null_pointer_node, null_pointer_node), null_pointer_node));
TYPE_CATCH_CLASSES (this_class)); n_catch_classes = VEC_length (constructor_elt,
table_size = build_index_type TYPE_CATCH_CLASSES (this_class));
(build_int_cst (NULL_TREE, table_size = build_index_type (build_int_cst (NULL_TREE, n_catch_classes));
list_length (TYPE_CATCH_CLASSES (this_class))));
array_type array_type
= build_array_type (TREE_TYPE (TREE_TYPE (TYPE_CTABLE_DECL (this_class))), = build_array_type (TREE_TYPE (TREE_TYPE (TYPE_CTABLE_DECL (this_class))),
table_size); table_size);
...@@ -2979,7 +2984,7 @@ emit_catch_table (tree this_class) ...@@ -2979,7 +2984,7 @@ emit_catch_table (tree this_class)
build_decl (input_location, build_decl (input_location,
VAR_DECL, DECL_NAME (TYPE_CTABLE_DECL (this_class)), array_type); VAR_DECL, DECL_NAME (TYPE_CTABLE_DECL (this_class)), array_type);
DECL_INITIAL (table) = DECL_INITIAL (table) =
build_constructor_from_list (array_type, TYPE_CATCH_CLASSES (this_class)); build_constructor (array_type, TYPE_CATCH_CLASSES (this_class));
TREE_STATIC (table) = 1; TREE_STATIC (table) = 1;
TREE_READONLY (table) = 1; TREE_READONLY (table) = 1;
DECL_IGNORED_P (table) = 1; DECL_IGNORED_P (table) = 1;
......
...@@ -419,9 +419,9 @@ prepare_eh_table_type (tree type) ...@@ -419,9 +419,9 @@ prepare_eh_table_type (tree type)
layout_decl (decl, 0); layout_decl (decl, 0);
pushdecl (decl); pushdecl (decl);
exp = build1 (ADDR_EXPR, build_pointer_type (utf8const_ptr_type), decl); exp = build1 (ADDR_EXPR, build_pointer_type (utf8const_ptr_type), decl);
TYPE_CATCH_CLASSES (output_class) = CONSTRUCTOR_APPEND_ELT (TYPE_CATCH_CLASSES (output_class),
tree_cons (NULL, make_catch_class_record (exp, utf8_ref), NULL_TREE,
TYPE_CATCH_CLASSES (output_class)); make_catch_class_record (exp, utf8_ref));
} }
exp = convert (ptr_type_node, exp); exp = convert (ptr_type_node, exp);
......
...@@ -952,7 +952,7 @@ struct GTY((variable_size)) lang_type { ...@@ -952,7 +952,7 @@ struct GTY((variable_size)) lang_type {
tree ctable_decl; /* The table of classes for the runtime tree ctable_decl; /* The table of classes for the runtime
type matcher. */ type matcher. */
tree catch_classes; VEC(constructor_elt,gc) *catch_classes;
htab_t GTY ((param_is (struct treetreehash_entry))) type_to_runtime_map; htab_t GTY ((param_is (struct treetreehash_entry))) type_to_runtime_map;
/* The mapping of classes to exception region /* The mapping of classes to exception region
......
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