comparison src/share/vm/oops/constantPoolOop.cpp @ 726:be93aad57795

6655646: dynamic languages need dynamically linked call sites Summary: invokedynamic instruction (JSR 292 RI) Reviewed-by: twisti, never
author jrose
date Tue, 21 Apr 2009 23:21:04 -0700
parents 0fbdb4381b99
children 47ffceb239d0
comparison
equal deleted inserted replaced
725:928912ce8438 726:be93aad57795
247 return k(); 247 return k();
248 } 248 }
249 } 249 }
250 250
251 251
252 symbolOop constantPoolOopDesc::uncached_name_ref_at(int which) { 252 symbolOop constantPoolOopDesc::impl_name_ref_at(int which, bool uncached) {
253 jint ref_index = name_and_type_at(uncached_name_and_type_ref_index_at(which)); 253 int name_index = name_ref_index_at(impl_name_and_type_ref_index_at(which, uncached));
254 int name_index = extract_low_short_from_int(ref_index);
255 return symbol_at(name_index); 254 return symbol_at(name_index);
256 } 255 }
257 256
258 257
259 symbolOop constantPoolOopDesc::uncached_signature_ref_at(int which) { 258 symbolOop constantPoolOopDesc::impl_signature_ref_at(int which, bool uncached) {
260 jint ref_index = name_and_type_at(uncached_name_and_type_ref_index_at(which)); 259 int signature_index = signature_ref_index_at(impl_name_and_type_ref_index_at(which, uncached));
261 int signature_index = extract_high_short_from_int(ref_index);
262 return symbol_at(signature_index); 260 return symbol_at(signature_index);
263 } 261 }
264 262
265 263
266 int constantPoolOopDesc::uncached_name_and_type_ref_index_at(int which) { 264 int constantPoolOopDesc::impl_name_and_type_ref_index_at(int which, bool uncached) {
267 jint ref_index = field_or_method_at(which, true); 265 jint ref_index = field_or_method_at(which, uncached);
268 return extract_high_short_from_int(ref_index); 266 return extract_high_short_from_int(ref_index);
269 } 267 }
270 268
271 269
272 int constantPoolOopDesc::uncached_klass_ref_index_at(int which) { 270 int constantPoolOopDesc::impl_klass_ref_index_at(int which, bool uncached) {
273 jint ref_index = field_or_method_at(which, true); 271 jint ref_index = field_or_method_at(which, uncached);
274 return extract_low_short_from_int(ref_index); 272 return extract_low_short_from_int(ref_index);
273 }
274
275
276
277 int constantPoolOopDesc::map_instruction_operand_to_index(int operand) {
278 if (constantPoolCacheOopDesc::is_secondary_index(operand)) {
279 return cache()->main_entry_at(operand)->constant_pool_index();
280 }
281 assert((int)(u2)operand == operand, "clean u2");
282 int index = Bytes::swap_u2(operand);
283 return cache()->entry_at(index)->constant_pool_index();
275 } 284 }
276 285
277 286
278 void constantPoolOopDesc::verify_constant_pool_resolve(constantPoolHandle this_oop, KlassHandle k, TRAPS) { 287 void constantPoolOopDesc::verify_constant_pool_resolve(constantPoolHandle this_oop, KlassHandle k, TRAPS) {
279 if (k->oop_is_instance() || k->oop_is_objArray()) { 288 if (k->oop_is_instance() || k->oop_is_objArray()) {
288 } 297 }
289 } 298 }
290 } 299 }
291 300
292 301
293 int constantPoolOopDesc::klass_ref_index_at(int which) { 302 int constantPoolOopDesc::name_ref_index_at(int which_nt) {
294 jint ref_index = field_or_method_at(which, false); 303 jint ref_index = name_and_type_at(which_nt);
295 return extract_low_short_from_int(ref_index); 304 return extract_low_short_from_int(ref_index);
296 } 305 }
297 306
298 307
299 int constantPoolOopDesc::name_and_type_ref_index_at(int which) { 308 int constantPoolOopDesc::signature_ref_index_at(int which_nt) {
300 jint ref_index = field_or_method_at(which, false); 309 jint ref_index = name_and_type_at(which_nt);
301 return extract_high_short_from_int(ref_index);
302 }
303
304
305 int constantPoolOopDesc::name_ref_index_at(int which) {
306 jint ref_index = name_and_type_at(which);
307 return extract_low_short_from_int(ref_index);
308 }
309
310
311 int constantPoolOopDesc::signature_ref_index_at(int which) {
312 jint ref_index = name_and_type_at(which);
313 return extract_high_short_from_int(ref_index); 310 return extract_high_short_from_int(ref_index);
314 } 311 }
315 312
316 313
317 klassOop constantPoolOopDesc::klass_ref_at(int which, TRAPS) { 314 klassOop constantPoolOopDesc::klass_ref_at(int which, TRAPS) {
351 return (char*)"<pseudo-string>"; 348 return (char*)"<pseudo-string>";
352 } 349 }
353 } 350 }
354 351
355 352
356 symbolOop constantPoolOopDesc::name_ref_at(int which) {
357 jint ref_index = name_and_type_at(name_and_type_ref_index_at(which));
358 int name_index = extract_low_short_from_int(ref_index);
359 return symbol_at(name_index);
360 }
361
362
363 symbolOop constantPoolOopDesc::signature_ref_at(int which) {
364 jint ref_index = name_and_type_at(name_and_type_ref_index_at(which));
365 int signature_index = extract_high_short_from_int(ref_index);
366 return symbol_at(signature_index);
367 }
368
369
370 BasicType constantPoolOopDesc::basic_type_for_signature_at(int which) { 353 BasicType constantPoolOopDesc::basic_type_for_signature_at(int which) {
371 return FieldType::basic_type(symbol_at(which)); 354 return FieldType::basic_type(symbol_at(which));
372 } 355 }
373 356
374 357