1145 return 0;
1146 }
1147
1148 // get the field map
1149 ClassFieldMap* field_map = ClassFieldMap::create_map_of_static_fields(k);
1150
1151 // invoke the callback for each static primitive field
1152 for (int i=0; i<field_map->field_count(); i++) {
1153 ClassFieldDescriptor* field = field_map->field_at(i);
1154
1155 // ignore non-primitive fields
1156 char type = field->field_type();
1157 if (!is_primitive_field_type(type)) {
1158 continue;
1159 }
1160 // one-to-one mapping
1161 jvmtiPrimitiveType value_type = (jvmtiPrimitiveType)type;
1162
1163 // get offset and field value
1164 int offset = field->field_offset();
1165 address addr = (address)k + offset;
1166 jvalue value;
1167 copy_to_jvalue(&value, addr, value_type);
1168
1169 // field index
1170 reference_info.field.index = field->field_index();
1171
1172 // invoke the callback
1173 jint res = (*cb)(JVMTI_HEAP_REFERENCE_STATIC_FIELD,
1174 &reference_info,
1175 wrapper->klass_tag(),
1176 wrapper->obj_tag_p(),
1177 value,
1178 value_type,
1179 user_data);
1180 if (res & JVMTI_VISIT_ABORT) {
1181 delete field_map;
1182 return res;
1183 }
1184 }
1185
|
1145 return 0;
1146 }
1147
1148 // get the field map
1149 ClassFieldMap* field_map = ClassFieldMap::create_map_of_static_fields(k);
1150
1151 // invoke the callback for each static primitive field
1152 for (int i=0; i<field_map->field_count(); i++) {
1153 ClassFieldDescriptor* field = field_map->field_at(i);
1154
1155 // ignore non-primitive fields
1156 char type = field->field_type();
1157 if (!is_primitive_field_type(type)) {
1158 continue;
1159 }
1160 // one-to-one mapping
1161 jvmtiPrimitiveType value_type = (jvmtiPrimitiveType)type;
1162
1163 // get offset and field value
1164 int offset = field->field_offset();
1165 address addr = (address)klass->java_mirror() + offset;
1166 jvalue value;
1167 copy_to_jvalue(&value, addr, value_type);
1168
1169 // field index
1170 reference_info.field.index = field->field_index();
1171
1172 // invoke the callback
1173 jint res = (*cb)(JVMTI_HEAP_REFERENCE_STATIC_FIELD,
1174 &reference_info,
1175 wrapper->klass_tag(),
1176 wrapper->obj_tag_p(),
1177 value,
1178 value_type,
1179 user_data);
1180 if (res & JVMTI_VISIT_ABORT) {
1181 delete field_map;
1182 return res;
1183 }
1184 }
1185
|