[gcjx] Patch: FYI: write out class object
Tom Tromey
tromey@redhat.com
Sun Feb 13 04:05:00 GMT 2005
I'm checking this in on the gcjx branch.
This changes the tree code generator to (try to :-) create a
representation of the Class object. More patches in this vein to
follow.
Tom
#
# patch "gcc/gcc/java/ChangeLog"
# from [75208a208572e30bec162c925d3928c8d108c266]
# to [11adee3ebe14e5679540cf49f610af3b7cfa2411]
#
# patch "gcc/gcc/java/classobj.cc"
# from [a8e3e1ffd8585509c45d34f57312b67a5dd5ecaa]
# to [be3a1b80dd209963741abfa39ab49293ed7e3c97]
#
# patch "gcc/gcc/java/classobj.hh"
# from [4218584b63c257583a0dcfc82d378ebd1e5a4866]
# to [a193f433c6ff4a84f649b0da7a50ab81adc15094]
#
# patch "gcc/gcc/java/treegen.cc"
# from [b4113fa40fa42c72e3a22052cdcdab02cf173eae]
# to [48d7f5e8cb97ae8b96df3e4edb95a080237b4e6d]
#
--- gcc/gcc/java/ChangeLog
+++ gcc/gcc/java/ChangeLog
@@ -1,5 +1,14 @@
2005-02-09 Tom Tromey <tromey@redhat.com>
+ * classobj.cc (record_creator): Initialize new fields.
+ (set_field): Updated.
+ (create_class_instance): Initialize fields of Object.
+ * treegen.cc (generate): Create a class_instance_creator.
+ * classobj.hh (class_object_creator): Added 'record' argument.
+ Uncommented body.
+ (record_creator::field_class): New field.
+ (record_creator::the_class): Likewise.
+
* tree.cc (visit_array_ref): Lay out array class.
2005-02-09 Tom Tromey <tromey@redhat.com>
--- gcc/gcc/java/classobj.cc
+++ gcc/gcc/java/classobj.cc
@@ -22,9 +22,18 @@
#include "java/glue.hh"
record_creator::record_creator (tree record_type)
+ : the_class (record_type)
{
constructor = build_constructor (record_type, NULL_TREE);
- field_iterator = TYPE_FIELDS (record_type);
+
+ field_class = the_class;
+ field_iterator = TYPE_FIELDS (field_class);
+
+ while (DECL_NAME (field_iterator) == NULL_TREE)
+ {
+ field_class = TREE_TYPE (field_iterator);
+ field_iterator = TYPE_FIELDS (field_class);
+ }
}
record_creator::~record_creator ()
@@ -40,6 +49,25 @@
CONSTRUCTOR_ELTS (constructor) = tree_cons (field_iterator, value,
CONSTRUCTOR_ELTS (constructor));
field_iterator = TREE_CHAIN (field_iterator);
+ if (field_iterator == NULL_TREE
+ && field_class != the_class)
+ {
+ // Now search downward from the most derived class to the parent
+ // of the base class over which we just iterated.
+ tree search = the_class;
+ while (search != NULL_TREE)
+ {
+ tree parent = TREE_TYPE (TYPE_FIELDS (search));
+ if (parent == field_class)
+ break;
+ search = parent;
+ }
+ assert (search != NULL_TREE);
+ assert (search != field_class);
+ field_class = search;
+ // Make sure to skip over the super-class field.
+ field_iterator = TREE_CHAIN (TYPE_FIELDS (field_class));
+ }
}
tree
@@ -216,6 +244,12 @@
gcj_abi *abi = builtins->find_abi (real_class);
record_creator inst (type_class);
+ // First the fields from Object.
+ inst.set_field ("vtable", null_pointer_node); // FIXME
+ if (! flag_hash_synchronization)
+ inst.set_field ("sync_info", null_pointer_node);
+
+ // Now fields from Class.
inst.set_field ("next", null_pointer_node);
inst.set_field ("name",
builtins->map_utf8const (real_class->get_fully_qualified_name ()));
--- gcc/gcc/java/classobj.hh
+++ gcc/gcc/java/classobj.hh
@@ -31,6 +31,12 @@
// Iterator over fields of class type.
tree field_iterator;
+ // The most-derived class over which we're iterating.
+ tree the_class;
+ // The class containing the fields over which we are currently
+ // iterating.
+ tree field_class;
+
public:
record_creator (tree record_type);
@@ -68,12 +74,11 @@
public:
- class_object_creator (tree_builtins *b, aot_class *k)
+ class_object_creator (tree_builtins *b, aot_class *k, tree record)
: builtins (b),
klass (k)
{
- abort ();
- // create_class_instance (FIXME);
+ create_class_instance (record);
}
/// Return the class object we created.
--- gcc/gcc/java/treegen.cc
+++ gcc/gcc/java/treegen.cc
@@ -88,5 +88,7 @@
cgraph_varpool_finalize_decl (field);
}
- // FIXME: write out the class object now.
+ class_object_creator creator (builtins, wrapper, TREE_TYPE (class_tree));
+ tree class_obj = creator.get_class ();
+ // FIXME: do something with the class now.
}
More information about the Java-patches
mailing list