Mercurial > hg > truffle
changeset 3638:e53cfcb230a7
Fixed an issue with the runtime queried escape analysis field array.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Wed, 16 Nov 2011 01:52:31 +0100 |
parents | ff6a991c6e3c |
children | 2fd96b3040b9 |
files | src/share/vm/graal/graalVMEntries.cpp |
diffstat | 1 files changed, 8 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/graal/graalVMEntries.cpp Wed Nov 16 01:48:25 2011 +0100 +++ b/src/share/vm/graal/graalVMEntries.cpp Wed Nov 16 01:52:31 2011 +0100 @@ -774,28 +774,30 @@ VM_ENTRY_MARK; instanceKlassHandle k = java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass)); - objArrayHandle field_array = oopFactory::new_objArray(SystemDictionary::RiField_klass(), k->fields()->length() / instanceKlass::next_offset, CHECK_NULL); class MyFieldClosure : public FieldClosure { public: instanceKlassHandle _holder; Handle _resolved_type_holder; - objArrayHandle _field_array; - int _current; + GrowableArray<Handle> _field_array; - MyFieldClosure(instanceKlassHandle& holder, Handle resolved_type_holder, objArrayHandle field_array) : _holder(holder), _resolved_type_holder(resolved_type_holder), _field_array(field_array), _current(0) { } + MyFieldClosure(instanceKlassHandle& holder, Handle resolved_type_holder) : _holder(holder), _resolved_type_holder(resolved_type_holder) { } virtual void do_field(fieldDescriptor* fd) { if (!Thread::current()->has_pending_exception()) { if (fd->field_holder() == _holder()) { Handle type = GraalCompiler::get_RiTypeFromSignature(fd->constants(), fd->signature_index(), fd->field_holder(), Thread::current()); Handle field = VMExits::createRiField(_resolved_type_holder, VmIds::toString<Handle>(fd->name(), Thread::current()), type, fd->offset(), fd->access_flags().as_int(), Thread::current()); - _field_array->obj_at_put(_current++, field()); + _field_array.append(field()); } } } }; - MyFieldClosure closure(k, JNIHandles::resolve(klass), field_array); + MyFieldClosure closure(k, JNIHandles::resolve(klass)); k->do_nonstatic_fields(&closure); + objArrayHandle field_array = oopFactory::new_objArray(SystemDictionary::RiField_klass(), closure._field_array.length(), CHECK_NULL); + for (int i=0; i<closure._field_array.length(); ++i) { + field_array->obj_at_put(i, closure._field_array.at(i)()); + } return JNIHandles::make_local(field_array()); }