diff options
Diffstat (limited to 'gcc/java')
-rw-r--r-- | gcc/java/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/java/class.c | 33 | ||||
-rw-r--r-- | gcc/java/expr.c | 10 | ||||
-rw-r--r-- | gcc/java/java-tree.h | 7 |
4 files changed, 32 insertions, 26 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 09927d9..1584a80 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,11 @@ +Sat Mar 25 09:12:10 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * class.c (make_field_value): Use byte_position. + * expr.c (JAVA_ARRAY_LENGTH_OFFSET): Use byte_position. + (java_array_data_offset): Likewise. + * java-tree.h (MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC): Add case to + bzero call. + 2000-03-22 Alexandre Petit-Bianco <apbianco@cygnus.com> * parse.y (check_abstract_method_definitions): New local diff --git a/gcc/java/class.c b/gcc/java/class.c index 6252d37..e9d41e3 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -1071,7 +1071,7 @@ static tree make_field_value (fdecl) tree fdecl; { - tree finit, info; + tree finit; int flags; tree type = TREE_TYPE (fdecl); int resolved = is_compiled_class (type); @@ -1083,33 +1083,30 @@ make_field_value (fdecl) else { tree signature = build_java_signature (type); + type = build_utf8_ref (unmangle_classname - (IDENTIFIER_POINTER(signature), - IDENTIFIER_LENGTH(signature))); + (IDENTIFIER_POINTER (signature), + IDENTIFIER_LENGTH (signature))); } PUSH_FIELD_VALUE (finit, "type", type); + flags = get_access_flags_from_decl (fdecl); if (! resolved) flags |= 0x8000 /* FIELD_UNRESOLVED_FLAG */; PUSH_FIELD_VALUE (finit, "accflags", build_int_2 (flags, 0)); PUSH_FIELD_VALUE (finit, "bsize", TYPE_SIZE_UNIT (TREE_TYPE (fdecl))); - if (FIELD_STATIC (fdecl)) - { - tree cfield = TREE_CHAIN (TYPE_FIELDS (field_info_union_node)); - tree faddr = build_address_of (build_static_field_ref (fdecl)); - - info = build (CONSTRUCTOR, field_info_union_node, NULL_TREE, - build_tree_list (cfield, faddr)); - } - else - info = build (CONSTRUCTOR, field_info_union_node, NULL_TREE, - build_tree_list (TYPE_FIELDS (field_info_union_node), - build_int_2 ((int_bit_position (fdecl) - / BITS_PER_UNIT), - 0))); - PUSH_FIELD_VALUE (finit, "info", info); + PUSH_FIELD_VALUE + (finit, "info", + build (CONSTRUCTOR, field_info_union_node, NULL_TREE, + build_tree_list + ((FIELD_STATIC (fdecl) + ? TREE_CHAIN (TYPE_FIELDS (field_info_union_node)) + : TYPE_FIELDS (field_info_union_node)), + (FIELD_STATIC (fdecl) + ? build_address_of (build_static_field_ref (fdecl)) + : byte_position (fdecl))))); FINISH_RECORD_CONSTRUCTOR (finit); return finit; diff --git a/gcc/java/expr.c b/gcc/java/expr.c index dc56857..776c6f3 100644 --- a/gcc/java/expr.c +++ b/gcc/java/expr.c @@ -575,11 +575,8 @@ build_java_ret (location) /* Array core info access macros */ -#define JAVA_ARRAY_LENGTH_OFFSET(A) \ - size_binop (CEIL_DIV_EXPR, \ - (DECL_FIELD_BITPOS \ - (TREE_CHAIN (TYPE_FIELDS (TREE_TYPE (TREE_TYPE (A)))))), \ - bitsize_int (BITS_PER_UNIT)) +#define JAVA_ARRAY_LENGTH_OFFSET(A) \ + byte_position (TREE_CHAIN (TYPE_FIELDS (TREE_TYPE (TREE_TYPE (A))))) tree decode_newarray_type (atype) @@ -690,10 +687,11 @@ java_array_data_offset (array) { tree array_type = TREE_TYPE (TREE_TYPE (array)); tree data_fld = TREE_CHAIN (TREE_CHAIN (TYPE_FIELDS (array_type))); + if (data_fld == NULL_TREE) return size_in_bytes (array_type); else - return build_int_2 (int_bit_position (data_fld) / BITS_PER_UNIT, 0); + return byte_position (data_fld); } /* Implement array indexing (either as l-value or r-value). diff --git a/gcc/java/java-tree.h b/gcc/java/java-tree.h index 5aaceee..f56991c 100644 --- a/gcc/java/java-tree.h +++ b/gcc/java/java-tree.h @@ -541,9 +541,12 @@ struct lang_decl_var if (TYPE_LANG_SPECIFIC ((T)) == NULL) \ { \ TYPE_LANG_SPECIFIC ((T)) = \ - (struct lang_type *)xmalloc (sizeof (struct lang_type)); \ - bzero (TYPE_LANG_SPECIFIC ((T)), sizeof (struct lang_type)); \ + (struct lang_type *) xmalloc (sizeof (struct lang_type)); \ + \ + bzero ((char *) TYPE_LANG_SPECIFIC ((T)), \ + sizeof (struct lang_type)); \ } + #define TYPE_FINIT_STMT_LIST(T) (TYPE_LANG_SPECIFIC(T)->finit_stmt_list) #define TYPE_CLINIT_STMT_LIST(T) (TYPE_LANG_SPECIFIC(T)->clinit_stmt_list) #define TYPE_II_STMT_LIST(T) (TYPE_LANG_SPECIFIC(T)->ii_block) |