src/hotspot/share/prims/methodHandles.cpp
changeset 53745 a535ba736cab
parent 53582 881c5fbeb849
child 54389 772f62a13376
equal deleted inserted replaced
53744:5b78f051912b 53745:a535ba736cab
  1425   int bss_index_in_pool = index_info->int_at(1);
  1425   int bss_index_in_pool = index_info->int_at(1);
  1426   // While we are here, take a quick look at the index info:
  1426   // While we are here, take a quick look at the index info:
  1427   if (bss_index_in_pool <= 0 ||
  1427   if (bss_index_in_pool <= 0 ||
  1428       bss_index_in_pool >= caller->constants()->length() ||
  1428       bss_index_in_pool >= caller->constants()->length() ||
  1429       index_info->int_at(0)
  1429       index_info->int_at(0)
  1430       != caller->constants()->invoke_dynamic_argument_count_at(bss_index_in_pool)) {
  1430       != caller->constants()->bootstrap_argument_count_at(bss_index_in_pool)) {
  1431       THROW_MSG(vmSymbols::java_lang_InternalError(), "bad index info (1)");
  1431       THROW_MSG(vmSymbols::java_lang_InternalError(), "bad index info (1)");
  1432   }
  1432   }
  1433   objArrayHandle buf(THREAD, (objArrayOop) JNIHandles::resolve(buf_jh));
  1433   objArrayHandle buf(THREAD, (objArrayOop) JNIHandles::resolve(buf_jh));
  1434   if (start < 0) {
  1434   if (start < 0) {
  1435     for (int pseudo_index = -4; pseudo_index < 0; pseudo_index++) {
  1435     for (int pseudo_index = -4; pseudo_index < 0; pseudo_index++) {
  1437         if (start >= end || 0 > pos || pos >= buf->length())  break;
  1437         if (start >= end || 0 > pos || pos >= buf->length())  break;
  1438         oop pseudo_arg = NULL;
  1438         oop pseudo_arg = NULL;
  1439         switch (pseudo_index) {
  1439         switch (pseudo_index) {
  1440         case -4:  // bootstrap method
  1440         case -4:  // bootstrap method
  1441           {
  1441           {
  1442             int bsm_index = caller->constants()->invoke_dynamic_bootstrap_method_ref_index_at(bss_index_in_pool);
  1442             int bsm_index = caller->constants()->bootstrap_method_ref_index_at(bss_index_in_pool);
  1443             pseudo_arg = caller->constants()->resolve_possibly_cached_constant_at(bsm_index, CHECK);
  1443             pseudo_arg = caller->constants()->resolve_possibly_cached_constant_at(bsm_index, CHECK);
  1444             break;
  1444             break;
  1445           }
  1445           }
  1446         case -3:  // name
  1446         case -3:  // name
  1447           {
  1447           {
  1462             pseudo_arg = th();
  1462             pseudo_arg = th();
  1463             break;
  1463             break;
  1464           }
  1464           }
  1465         case -1:  // argument count
  1465         case -1:  // argument count
  1466           {
  1466           {
  1467             int argc = caller->constants()->invoke_dynamic_argument_count_at(bss_index_in_pool);
  1467             int argc = caller->constants()->bootstrap_argument_count_at(bss_index_in_pool);
  1468             jvalue argc_value; argc_value.i = (jint)argc;
  1468             jvalue argc_value; argc_value.i = (jint)argc;
  1469             pseudo_arg = java_lang_boxing_object::create(T_INT, &argc_value, CHECK);
  1469             pseudo_arg = java_lang_boxing_object::create(T_INT, &argc_value, CHECK);
  1470             break;
  1470             break;
  1471           }
  1471           }
  1472         }
  1472         }