comparison src/share/vm/classfile/javaClasses.cpp @ 1793:d257356e35f0

6939224: MethodHandle.invokeGeneric needs to perform the correct set of conversions Reviewed-by: never
author jrose
date Mon, 13 Sep 2010 23:24:30 -0700
parents c18cbe5936b8
children f95d63e2154a
comparison
equal deleted inserted replaced
1792:d20603ee9e10 1793:d257356e35f0
2422 2422
2423 // Support for java_dyn_MethodTypeForm 2423 // Support for java_dyn_MethodTypeForm
2424 2424
2425 int java_dyn_MethodTypeForm::_vmslots_offset; 2425 int java_dyn_MethodTypeForm::_vmslots_offset;
2426 int java_dyn_MethodTypeForm::_erasedType_offset; 2426 int java_dyn_MethodTypeForm::_erasedType_offset;
2427 int java_dyn_MethodTypeForm::_genericInvoker_offset;
2427 2428
2428 void java_dyn_MethodTypeForm::compute_offsets() { 2429 void java_dyn_MethodTypeForm::compute_offsets() {
2429 klassOop k = SystemDictionary::MethodTypeForm_klass(); 2430 klassOop k = SystemDictionary::MethodTypeForm_klass();
2430 if (k != NULL) { 2431 if (k != NULL) {
2431 compute_optional_offset(_vmslots_offset, k, vmSymbols::vmslots_name(), vmSymbols::int_signature(), true); 2432 compute_optional_offset(_vmslots_offset, k, vmSymbols::vmslots_name(), vmSymbols::int_signature(), true);
2432 compute_optional_offset(_erasedType_offset, k, vmSymbols::erasedType_name(), vmSymbols::java_dyn_MethodType_signature(), true); 2433 compute_optional_offset(_erasedType_offset, k, vmSymbols::erasedType_name(), vmSymbols::java_dyn_MethodType_signature(), true);
2434 compute_optional_offset(_genericInvoker_offset, k, vmSymbols::genericInvoker_name(), vmSymbols::java_dyn_MethodHandle_signature(), true);
2435 if (_genericInvoker_offset == 0) _genericInvoker_offset = -1; // set to explicit "empty" value
2433 } 2436 }
2434 } 2437 }
2435 2438
2436 int java_dyn_MethodTypeForm::vmslots(oop mtform) { 2439 int java_dyn_MethodTypeForm::vmslots(oop mtform) {
2437 assert(mtform->klass() == SystemDictionary::MethodTypeForm_klass(), "MTForm only"); 2440 assert(mtform->klass() == SystemDictionary::MethodTypeForm_klass(), "MTForm only");
2439 } 2442 }
2440 2443
2441 oop java_dyn_MethodTypeForm::erasedType(oop mtform) { 2444 oop java_dyn_MethodTypeForm::erasedType(oop mtform) {
2442 assert(mtform->klass() == SystemDictionary::MethodTypeForm_klass(), "MTForm only"); 2445 assert(mtform->klass() == SystemDictionary::MethodTypeForm_klass(), "MTForm only");
2443 return mtform->obj_field(_erasedType_offset); 2446 return mtform->obj_field(_erasedType_offset);
2447 }
2448
2449 oop java_dyn_MethodTypeForm::genericInvoker(oop mtform) {
2450 assert(mtform->klass() == SystemDictionary::MethodTypeForm_klass(), "MTForm only");
2451 return mtform->obj_field(_genericInvoker_offset);
2444 } 2452 }
2445 2453
2446 2454
2447 // Support for java_dyn_CallSite 2455 // Support for java_dyn_CallSite
2448 2456