< prev index next >

src/share/vm/interpreter/linkResolver.cpp

Print this page
rev 10504 : value type calling convention


1474   EXCEPTION_MARK;
1475   CallInfo info;
1476   resolve_special_call(info, link_info, THREAD);
1477   if (HAS_PENDING_EXCEPTION) {
1478     CLEAR_PENDING_EXCEPTION;
1479     return methodHandle();
1480   }
1481   return info.selected_method();
1482 }
1483 
1484 
1485 
1486 //------------------------------------------------------------------------------------------------------------------------
1487 // ConstantPool entries
1488 
1489 void LinkResolver::resolve_invoke(CallInfo& result, Handle recv, const constantPoolHandle& pool, int index, Bytecodes::Code byte, TRAPS) {
1490   switch (byte) {
1491     case Bytecodes::_invokestatic   : resolve_invokestatic   (result,       pool, index, CHECK); break;
1492     case Bytecodes::_invokespecial  : resolve_invokespecial  (result,       pool, index, CHECK); break;
1493     case Bytecodes::_invokevirtual  : resolve_invokevirtual  (result, recv, pool, index, CHECK); break;
1494     case Bytecodes::_invokedirect   : resolve_invokevirtual  (result, recv, pool, index, CHECK); break; // temp hack
1495     case Bytecodes::_invokehandle   : resolve_invokehandle   (result,       pool, index, CHECK); break;
1496     case Bytecodes::_invokedynamic  : resolve_invokedynamic  (result,       pool, index, CHECK); break;
1497     case Bytecodes::_invokeinterface: resolve_invokeinterface(result, recv, pool, index, CHECK); break;
1498   }
1499   return;
1500 }
1501 
1502 void LinkResolver::resolve_invoke(CallInfo& result, Handle& recv,
1503                              const methodHandle& attached_method,
1504                              Bytecodes::Code byte, TRAPS) {
1505   KlassHandle defc = attached_method->method_holder();
1506   Symbol* name = attached_method->name();
1507   Symbol* type = attached_method->signature();
1508   LinkInfo link_info(defc, name, type, KlassHandle(), /*check_access=*/false);
1509   switch(byte) {
1510     case Bytecodes::_invokevirtual:
1511       resolve_virtual_call(result, recv, recv->klass(), link_info,
1512                            /*check_null_and_abstract=*/true, CHECK);
1513       break;
1514     case Bytecodes::_invokeinterface:




1474   EXCEPTION_MARK;
1475   CallInfo info;
1476   resolve_special_call(info, link_info, THREAD);
1477   if (HAS_PENDING_EXCEPTION) {
1478     CLEAR_PENDING_EXCEPTION;
1479     return methodHandle();
1480   }
1481   return info.selected_method();
1482 }
1483 
1484 
1485 
1486 //------------------------------------------------------------------------------------------------------------------------
1487 // ConstantPool entries
1488 
1489 void LinkResolver::resolve_invoke(CallInfo& result, Handle recv, const constantPoolHandle& pool, int index, Bytecodes::Code byte, TRAPS) {
1490   switch (byte) {
1491     case Bytecodes::_invokestatic   : resolve_invokestatic   (result,       pool, index, CHECK); break;
1492     case Bytecodes::_invokespecial  : resolve_invokespecial  (result,       pool, index, CHECK); break;
1493     case Bytecodes::_invokevirtual  : resolve_invokevirtual  (result, recv, pool, index, CHECK); break;
1494     case Bytecodes::_invokedirect   : resolve_invokespecial  (result,       pool, index, CHECK); break; // temp hack
1495     case Bytecodes::_invokehandle   : resolve_invokehandle   (result,       pool, index, CHECK); break;
1496     case Bytecodes::_invokedynamic  : resolve_invokedynamic  (result,       pool, index, CHECK); break;
1497     case Bytecodes::_invokeinterface: resolve_invokeinterface(result, recv, pool, index, CHECK); break;
1498   }
1499   return;
1500 }
1501 
1502 void LinkResolver::resolve_invoke(CallInfo& result, Handle& recv,
1503                              const methodHandle& attached_method,
1504                              Bytecodes::Code byte, TRAPS) {
1505   KlassHandle defc = attached_method->method_holder();
1506   Symbol* name = attached_method->name();
1507   Symbol* type = attached_method->signature();
1508   LinkInfo link_info(defc, name, type, KlassHandle(), /*check_access=*/false);
1509   switch(byte) {
1510     case Bytecodes::_invokevirtual:
1511       resolve_virtual_call(result, recv, recv->klass(), link_info,
1512                            /*check_null_and_abstract=*/true, CHECK);
1513       break;
1514     case Bytecodes::_invokeinterface:


< prev index next >