aboutsummaryrefslogtreecommitdiff
path: root/gcc/java
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/java')
-rw-r--r--gcc/java/ChangeLog8
-rw-r--r--gcc/java/class.c33
-rw-r--r--gcc/java/expr.c10
-rw-r--r--gcc/java/java-tree.h7
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)