255 int cp_to_object_index(int index);
256
257 void set_resolved_klasses(Array<Klass*>* rk) { _resolved_klasses = rk; }
258 Array<Klass*>* resolved_klasses() const { return _resolved_klasses; }
259 void allocate_resolved_klasses(ClassLoaderData* loader_data, int num_klasses, TRAPS);
260 void initialize_unresolved_klasses(ClassLoaderData* loader_data, TRAPS);
261
262 // Given the per-instruction index of an indy instruction, report the
263 // main constant pool entry for its bootstrap specifier.
264 // From there, uncached_name/signature_ref_at will get the name/type.
265 inline u2 invokedynamic_bootstrap_ref_index_at(int indy_index) const;
266
267 // Assembly code support
268 static ByteSize tags_offset() { return byte_offset_of(ConstantPool, _tags); }
269 static ByteSize cache_offset() { return byte_offset_of(ConstantPool, _cache); }
270 static ByteSize pool_holder_offset() { return byte_offset_of(ConstantPool, _pool_holder); }
271 static ByteSize resolved_klasses_offset() { return byte_offset_of(ConstantPool, _resolved_klasses); }
272
273 // Storing constants
274
275 // For temporary use while constructing constant pool
276 void klass_index_at_put(int cp_index, int name_index) {
277 tag_at_put(cp_index, JVM_CONSTANT_ClassIndex);
278 *int_at_addr(cp_index) = name_index;
279 }
280
281 // Hidden class support:
282 void klass_at_put(int class_index, Klass* k);
283
284 void unresolved_klass_at_put(int cp_index, int name_index, int resolved_klass_index) {
285 release_tag_at_put(cp_index, JVM_CONSTANT_UnresolvedClass);
286
287 assert((name_index & 0xffff0000) == 0, "must be");
288 assert((resolved_klass_index & 0xffff0000) == 0, "must be");
289 *int_at_addr(cp_index) =
290 build_int_from_shorts((jushort)resolved_klass_index, (jushort)name_index);
291 }
292
293 void method_handle_index_at_put(int cp_index, int ref_kind, int ref_index) {
294 tag_at_put(cp_index, JVM_CONSTANT_MethodHandle);
295 *int_at_addr(cp_index) = ((jint) ref_index<<16) | ref_kind;
|
255 int cp_to_object_index(int index);
256
257 void set_resolved_klasses(Array<Klass*>* rk) { _resolved_klasses = rk; }
258 Array<Klass*>* resolved_klasses() const { return _resolved_klasses; }
259 void allocate_resolved_klasses(ClassLoaderData* loader_data, int num_klasses, TRAPS);
260 void initialize_unresolved_klasses(ClassLoaderData* loader_data, TRAPS);
261
262 // Given the per-instruction index of an indy instruction, report the
263 // main constant pool entry for its bootstrap specifier.
264 // From there, uncached_name/signature_ref_at will get the name/type.
265 inline u2 invokedynamic_bootstrap_ref_index_at(int indy_index) const;
266
267 // Assembly code support
268 static ByteSize tags_offset() { return byte_offset_of(ConstantPool, _tags); }
269 static ByteSize cache_offset() { return byte_offset_of(ConstantPool, _cache); }
270 static ByteSize pool_holder_offset() { return byte_offset_of(ConstantPool, _pool_holder); }
271 static ByteSize resolved_klasses_offset() { return byte_offset_of(ConstantPool, _resolved_klasses); }
272
273 // Storing constants
274
275 // For temporary use while constructing constant pool. Used during a retransform/class redefinition as well.
276 void klass_index_at_put(int cp_index, int name_index) {
277 tag_at_put(cp_index, JVM_CONSTANT_ClassIndex);
278 *int_at_addr(cp_index) = name_index;
279 }
280
281 // Hidden class support:
282 void klass_at_put(int class_index, Klass* k);
283
284 void unresolved_klass_at_put(int cp_index, int name_index, int resolved_klass_index) {
285 release_tag_at_put(cp_index, JVM_CONSTANT_UnresolvedClass);
286
287 assert((name_index & 0xffff0000) == 0, "must be");
288 assert((resolved_klass_index & 0xffff0000) == 0, "must be");
289 *int_at_addr(cp_index) =
290 build_int_from_shorts((jushort)resolved_klass_index, (jushort)name_index);
291 }
292
293 void method_handle_index_at_put(int cp_index, int ref_kind, int ref_index) {
294 tag_at_put(cp_index, JVM_CONSTANT_MethodHandle);
295 *int_at_addr(cp_index) = ((jint) ref_index<<16) | ref_kind;
|