aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/decl.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/java/decl.c')
-rw-r--r--gcc/java/decl.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/gcc/java/decl.c b/gcc/java/decl.c
index fa8c939..e23cb120 100644
--- a/gcc/java/decl.c
+++ b/gcc/java/decl.c
@@ -663,6 +663,23 @@ java_init_decl_processing (void)
pushdecl (atable_syms_decl);
}
+ {
+ tree catch_class_type = make_node (RECORD_TYPE);
+ PUSH_FIELD (catch_class_type, field, "address", utf8const_ptr_type);
+ PUSH_FIELD (catch_class_type, field, "classname", ptr_type_node);
+ FINISH_RECORD (catch_class_type);
+
+ ctable_decl
+ = build_decl (VAR_DECL, get_identifier ("catch_classes"),
+ build_array_type
+ (catch_class_type, 0));
+ DECL_EXTERNAL (ctable_decl) = 1;
+ TREE_STATIC (ctable_decl) = 1;
+ TREE_READONLY (ctable_decl) = 1;
+ TREE_CONSTANT (ctable_decl) = 1;
+ pushdecl (ctable_decl);
+ }
+
PUSH_FIELD (object_type_node, field, "vtable", dtable_ptr_type);
/* This isn't exactly true, but it is what we have in the source.
There is an unresolved issue here, which is whether the vtable
@@ -702,6 +719,7 @@ java_init_decl_processing (void)
PUSH_FIELD (class_type_node, field, "atable", atable_ptr_type);
PUSH_FIELD (class_type_node, field, "atable_syms",
symbols_array_ptr_type);
+ PUSH_FIELD (class_type_node, field, "catch_classes", ptr_type_node);
PUSH_FIELD (class_type_node, field, "interfaces",
build_pointer_type (class_ptr_type));
PUSH_FIELD (class_type_node, field, "loader", ptr_type_node);