aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/jcf-parse.c
diff options
context:
space:
mode:
authorAlexandre Petit-Bianco <apbianco@redhat.com>2001-06-27 13:38:20 -0700
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>2001-06-27 13:38:20 -0700
commit4a70e37e7541cfcdfa7b96df83ed1ef54787133b (patch)
treeb08bb204fb5c50109b30f6039c008d246dbb6174 /gcc/java/jcf-parse.c
parentaf27aff6ae1dbbe73ecf2b24dac6b0b1587413b5 (diff)
downloadgcc-4a70e37e7541cfcdfa7b96df83ed1ef54787133b.zip
gcc-4a70e37e7541cfcdfa7b96df83ed1ef54787133b.tar.gz
gcc-4a70e37e7541cfcdfa7b96df83ed1ef54787133b.tar.bz2
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
Diffstat (limited to 'gcc/java/jcf-parse.c')
-rw-r--r--gcc/java/jcf-parse.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/gcc/java/jcf-parse.c b/gcc/java/jcf-parse.c
index 6127d9d..82583e0 100644
--- a/gcc/java/jcf-parse.c
+++ b/gcc/java/jcf-parse.c
@@ -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));