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());