class.c (set_super_info): Call `set_class_decl_access_flags.'
2001-06-27 Alexandre Petit-Bianco <apbianco@redhat.com> * class.c (set_super_info): Call `set_class_decl_access_flags.' (set_class_decl_access_flags): New function. * java-tree.h (set_class_decl_access_flags): New prototype. * jcf-parse.c (handle_innerclass_attribute): Read and set access flags. (parse_class_file): New local `decl_max_locals.' Take wide types into account to compute DECL_MAX_LOCALS. * parse.y (type_import_on_demand_declaration:): Ignore duplicate imports on demand. (http://gcc.gnu.org/ml/gcc-patches/2001-06/msg01718.html ) From-SVN: r43618
This commit is contained in:
parent
af27aff6ae
commit
4a70e37e75
@ -1,3 +1,14 @@
|
||||
2001-06-27 Alexandre Petit-Bianco <apbianco@redhat.com>
|
||||
|
||||
* class.c (set_super_info): Call `set_class_decl_access_flags.'
|
||||
(set_class_decl_access_flags): New function.
|
||||
* java-tree.h (set_class_decl_access_flags): New prototype.
|
||||
* jcf-parse.c (handle_innerclass_attribute): Read and set access flags.
|
||||
(parse_class_file): New local `decl_max_locals.' Take wide types
|
||||
into account to compute DECL_MAX_LOCALS.
|
||||
* parse.y (type_import_on_demand_declaration:): Ignore duplicate
|
||||
imports on demand.
|
||||
|
||||
2001-06-22 Jan van Male <jan.vanmale@fenk.wau.nl>
|
||||
|
||||
* zipfile.h: Use GCC_JCF_H instead of JCF_H.
|
||||
|
@ -394,6 +394,14 @@ set_super_info (access_flags, this_class, super_class, interfaces_count)
|
||||
CLASS_HAS_SUPER (this_class) = 1;
|
||||
}
|
||||
|
||||
set_class_decl_access_flags (access_flags, class_decl);
|
||||
}
|
||||
|
||||
void
|
||||
set_class_decl_access_flags (access_flags, class_decl)
|
||||
int access_flags;
|
||||
tree class_decl;
|
||||
{
|
||||
if (access_flags & ACC_PUBLIC) CLASS_PUBLIC (class_decl) = 1;
|
||||
if (access_flags & ACC_FINAL) CLASS_FINAL (class_decl) = 1;
|
||||
if (access_flags & ACC_SUPER) CLASS_SUPER (class_decl) = 1;
|
||||
|
@ -1040,6 +1040,7 @@ extern void pop_labeled_block PARAMS ((void));
|
||||
extern const char *lang_printable_name PARAMS ((tree, int));
|
||||
extern tree maybe_add_interface PARAMS ((tree, tree));
|
||||
extern void set_super_info PARAMS ((int, tree, tree, int));
|
||||
extern void set_class_decl_access_flags PARAMS ((int, tree));
|
||||
extern int get_access_flags_from_decl PARAMS ((tree));
|
||||
extern int interface_of_p PARAMS ((tree, tree));
|
||||
extern int inherits_from_p PARAMS ((tree, tree));
|
||||
|
@ -465,6 +465,8 @@ handle_innerclass_attribute (count, jcf)
|
||||
/* Read inner_name_index. If the class we're dealing with is
|
||||
an annonymous class, it must be 0. */
|
||||
int ini = JCF_readu2 (jcf);
|
||||
/* Read the access flag. */
|
||||
int acc = JCF_readu2 (jcf);
|
||||
/* If icii is 0, don't try to read the class. */
|
||||
if (icii >= 0)
|
||||
{
|
||||
@ -475,13 +477,13 @@ handle_innerclass_attribute (count, jcf)
|
||||
{
|
||||
tree outer = TYPE_NAME (get_class_constant (jcf, ocii));
|
||||
tree alias = (ini ? get_name_constant (jcf, ini) : NULL_TREE);
|
||||
set_class_decl_access_flags (acc, decl);
|
||||
DECL_CONTEXT (decl) = outer;
|
||||
DECL_INNER_CLASS_LIST (outer) =
|
||||
tree_cons (decl, alias, DECL_INNER_CLASS_LIST (outer));
|
||||
CLASS_COMPLETE_P (decl) = 1;
|
||||
}
|
||||
}
|
||||
JCF_SKIP (jcf, 2);
|
||||
}
|
||||
}
|
||||
|
||||
@ -788,10 +790,21 @@ parse_class_file ()
|
||||
|
||||
if (METHOD_NATIVE (method))
|
||||
{
|
||||
tree arg;
|
||||
int decl_max_locals;
|
||||
|
||||
if (! flag_jni)
|
||||
continue;
|
||||
DECL_MAX_LOCALS (method)
|
||||
= list_length (TYPE_ARG_TYPES (TREE_TYPE (method)));
|
||||
/* We need to compute the DECL_MAX_LOCALS. We need to take
|
||||
the wide types into account too. */
|
||||
for (arg = TYPE_ARG_TYPES (TREE_TYPE (method)), decl_max_locals = 0;
|
||||
arg != end_params_node;
|
||||
arg = TREE_CHAIN (arg), decl_max_locals += 1)
|
||||
{
|
||||
if (TREE_VALUE (arg) && TYPE_IS_WIDE (TREE_VALUE (arg)))
|
||||
decl_max_locals += 1;
|
||||
}
|
||||
DECL_MAX_LOCALS (method) = decl_max_locals;
|
||||
start_java_method (method);
|
||||
give_name_to_locals (jcf);
|
||||
expand_expr_stmt (build_jni_stub (method));
|
||||
|
@ -781,8 +781,14 @@ type_import_on_demand_declaration:
|
||||
IMPORT_TK name DOT_TK MULT_TK SC_TK
|
||||
{
|
||||
tree name = EXPR_WFL_NODE ($2);
|
||||
/* Don't import java.lang.* twice. */
|
||||
if (name != java_lang_id)
|
||||
tree it;
|
||||
/* Search for duplicates. */
|
||||
for (it = ctxp->import_demand_list; it; it = TREE_CHAIN (it))
|
||||
if (EXPR_WFL_NODE (TREE_PURPOSE (it)) == name)
|
||||
break;
|
||||
/* Don't import the same thing more than once, just ignore
|
||||
duplicates (7.5.2) */
|
||||
if (! it)
|
||||
{
|
||||
read_import_dir ($2);
|
||||
ctxp->import_demand_list =
|
||||
|
Loading…
Reference in New Issue
Block a user