Mercurial > hg > graal-compiler
changeset 3587:1692a2f9bfc5
Only return declared fields on fields() call.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Fri, 14 Oct 2011 15:39:40 +0200 |
parents | 7604c69a6301 |
children | faa4e0c20d6a |
files | src/share/vm/graal/graalVMEntries.cpp |
diffstat | 1 files changed, 16 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/graal/graalVMEntries.cpp Fri Oct 07 16:49:07 2011 +0200 +++ b/src/share/vm/graal/graalVMEntries.cpp Fri Oct 14 15:39:40 2011 +0200 @@ -803,11 +803,24 @@ GrowableArray<ciField*>* fields = instance_klass->non_static_fields(); { VM_ENTRY_MARK; - fieldsArray = oopFactory::new_objArray(SystemDictionary::RiField_klass(), fields->length(), CHECK_NULL); + + int count = 0; for (int i = 0; i < fields->length(); i++) { ciField* field = fields->at(i); - Handle field_handle = GraalCompiler::get_RiField(field, instance_klass, klass_handle, Bytecodes::_illegal, CHECK_NULL); - fieldsArray->obj_at_put(i, field_handle()); + if (field->holder() == instance_klass) { + count++; + } + } + + fieldsArray = oopFactory::new_objArray(SystemDictionary::RiField_klass(), count, CHECK_NULL); + int z = 0; + for (int i = 0; i < fields->length(); i++) { + ciField* field = fields->at(i); + if (field->holder() == instance_klass) { + Handle field_handle = GraalCompiler::get_RiField(field, instance_klass, klass_handle, Bytecodes::_illegal, CHECK_NULL); + fieldsArray->obj_at_put(z, field_handle()); + z++; + } } } return JNIHandles::make_local(fieldsArray());