src/share/vm/interpreter/interpreterRuntime.cpp

Print this page




 524 
 525 
 526 IRT_ENTRY(void, InterpreterRuntime::throw_AbstractMethodError(JavaThread* thread))
 527   THROW(vmSymbols::java_lang_AbstractMethodError());
 528 IRT_END
 529 
 530 
 531 IRT_ENTRY(void, InterpreterRuntime::throw_IncompatibleClassChangeError(JavaThread* thread))
 532   THROW(vmSymbols::java_lang_IncompatibleClassChangeError());
 533 IRT_END
 534 
 535 
 536 //------------------------------------------------------------------------------------------------------------------------
 537 // Fields
 538 //
 539 
 540 IRT_ENTRY(void, InterpreterRuntime::resolve_get_put(JavaThread* thread, Bytecodes::Code bytecode))
 541   // resolve field
 542   fieldDescriptor info;
 543   constantPoolHandle pool(thread, method(thread)->constants());
 544   bool is_put    = (bytecode == Bytecodes::_putfield  || bytecode == Bytecodes::_putstatic);

 545   bool is_static = (bytecode == Bytecodes::_getstatic || bytecode == Bytecodes::_putstatic);
 546 
 547   {
 548     JvmtiHideSingleStepping jhss(thread);
 549     LinkResolver::resolve_field_access(info, pool, get_index_u2_cpcache(thread, bytecode),
 550                                        bytecode, CHECK);
 551   } // end JvmtiHideSingleStepping
 552 
 553   // check if link resolution caused cpCache to be updated
 554   if (already_resolved(thread)) return;
 555 
 556   // compute auxiliary field attributes
 557   TosState state  = as_TosState(info.field_type());
 558 
 559   // We need to delay resolving put instructions on final fields
 560   // until we actually invoke one. This is required so we throw
 561   // exceptions at the correct place. If we do not resolve completely
 562   // in the current pass, leaving the put_code set to zero will
 563   // cause the next put instruction to reresolve.
 564   Bytecodes::Code put_code = (Bytecodes::Code)0;




 524 
 525 
 526 IRT_ENTRY(void, InterpreterRuntime::throw_AbstractMethodError(JavaThread* thread))
 527   THROW(vmSymbols::java_lang_AbstractMethodError());
 528 IRT_END
 529 
 530 
 531 IRT_ENTRY(void, InterpreterRuntime::throw_IncompatibleClassChangeError(JavaThread* thread))
 532   THROW(vmSymbols::java_lang_IncompatibleClassChangeError());
 533 IRT_END
 534 
 535 
 536 //------------------------------------------------------------------------------------------------------------------------
 537 // Fields
 538 //
 539 
 540 IRT_ENTRY(void, InterpreterRuntime::resolve_get_put(JavaThread* thread, Bytecodes::Code bytecode))
 541   // resolve field
 542   fieldDescriptor info;
 543   constantPoolHandle pool(thread, method(thread)->constants());
 544   bool is_put    = (bytecode == Bytecodes::_putfield  || bytecode == Bytecodes::_nofast_putfield ||
 545                     bytecode == Bytecodes::_putstatic);
 546   bool is_static = (bytecode == Bytecodes::_getstatic || bytecode == Bytecodes::_putstatic);
 547 
 548   {
 549     JvmtiHideSingleStepping jhss(thread);
 550     LinkResolver::resolve_field_access(info, pool, get_index_u2_cpcache(thread, bytecode),
 551                                        bytecode, CHECK);
 552   } // end JvmtiHideSingleStepping
 553 
 554   // check if link resolution caused cpCache to be updated
 555   if (already_resolved(thread)) return;
 556 
 557   // compute auxiliary field attributes
 558   TosState state  = as_TosState(info.field_type());
 559 
 560   // We need to delay resolving put instructions on final fields
 561   // until we actually invoke one. This is required so we throw
 562   // exceptions at the correct place. If we do not resolve completely
 563   // in the current pass, leaving the put_code set to zero will
 564   // cause the next put instruction to reresolve.
 565   Bytecodes::Code put_code = (Bytecodes::Code)0;