src/share/vm/prims/jvmtiTagMap.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 7029509 Sdiff src/share/vm/prims

src/share/vm/prims/jvmtiTagMap.cpp

Print this page




2938     }
2939 
2940     // iterate over the static fields
2941 
2942     ClassFieldMap* field_map = ClassFieldMap::create_map_of_static_fields(k);
2943     for (i=0; i<field_map->field_count(); i++) {
2944       ClassFieldDescriptor* field = field_map->field_at(i);
2945       char type = field->field_type();
2946       if (!is_primitive_field_type(type)) {
2947         oop fld_o = mirror->obj_field(field->field_offset());
2948         assert(verify_static_oop(ik, mirror, field->field_offset()), "sanity check");
2949         if (fld_o != NULL) {
2950           int slot = field->field_index();
2951           if (!CallbackInvoker::report_static_field_reference(mirror, fld_o, slot)) {
2952             delete field_map;
2953             return false;
2954           }
2955         }
2956       } else {
2957          if (is_reporting_primitive_fields()) {
2958            address addr = (address)k + field->field_offset();
2959            int slot = field->field_index();
2960            if (!CallbackInvoker::report_primitive_static_field(mirror, slot, addr, type)) {
2961              delete field_map;
2962              return false;
2963           }
2964         }
2965       }
2966     }
2967     delete field_map;
2968 
2969     return true;
2970   }
2971 
2972   return true;
2973 }
2974 
2975 // an object references a class and its instance fields
2976 // (static fields are ignored here as we report these as
2977 // references from the class).
2978 inline bool VM_HeapWalkOperation::iterate_over_object(oop o) {




2938     }
2939 
2940     // iterate over the static fields
2941 
2942     ClassFieldMap* field_map = ClassFieldMap::create_map_of_static_fields(k);
2943     for (i=0; i<field_map->field_count(); i++) {
2944       ClassFieldDescriptor* field = field_map->field_at(i);
2945       char type = field->field_type();
2946       if (!is_primitive_field_type(type)) {
2947         oop fld_o = mirror->obj_field(field->field_offset());
2948         assert(verify_static_oop(ik, mirror, field->field_offset()), "sanity check");
2949         if (fld_o != NULL) {
2950           int slot = field->field_index();
2951           if (!CallbackInvoker::report_static_field_reference(mirror, fld_o, slot)) {
2952             delete field_map;
2953             return false;
2954           }
2955         }
2956       } else {
2957          if (is_reporting_primitive_fields()) {
2958            address addr = (address)mirror + field->field_offset();
2959            int slot = field->field_index();
2960            if (!CallbackInvoker::report_primitive_static_field(mirror, slot, addr, type)) {
2961              delete field_map;
2962              return false;
2963           }
2964         }
2965       }
2966     }
2967     delete field_map;
2968 
2969     return true;
2970   }
2971 
2972   return true;
2973 }
2974 
2975 // an object references a class and its instance fields
2976 // (static fields are ignored here as we report these as
2977 // references from the class).
2978 inline bool VM_HeapWalkOperation::iterate_over_object(oop o) {


src/share/vm/prims/jvmtiTagMap.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File