< prev index next >

src/hotspot/share/runtime/vframe_hp.cpp

Print this page

        

*** 32,41 **** --- 32,42 ---- #include "interpreter/interpreter.hpp" #include "interpreter/oopMapCache.hpp" #include "oops/instanceKlass.hpp" #include "oops/oop.inline.hpp" #include "runtime/basicLock.hpp" + #include "runtime/continuation.hpp" #include "runtime/frame.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/monitorChunk.hpp" #include "runtime/signature.hpp" #include "runtime/stubRoutines.hpp"
*** 62,78 **** result->add(create_stack_value(scv_list->at(i))); } // Replace the original values with any stores that have been // performed through compiledVFrame::update_locals. ! GrowableArray<jvmtiDeferredLocalVariableSet*>* list = thread()->deferred_locals(); ! if (list != NULL ) { ! // In real life this never happens or is typically a single element search ! for (int i = 0; i < list->length(); i++) { ! if (list->at(i)->matches(this)) { ! list->at(i)->update_locals(result); ! break; } } } return result; --- 63,81 ---- result->add(create_stack_value(scv_list->at(i))); } // Replace the original values with any stores that have been // performed through compiledVFrame::update_locals. ! if (register_map()->cont() == NULL) { // LOOM TODO ! GrowableArray<jvmtiDeferredLocalVariableSet*>* list = thread()->deferred_locals(); ! if (list != NULL ) { ! // In real life this never happens or is typically a single element search ! for (int i = 0; i < list->length(); i++) { ! if (list->at(i)->matches(this)) { ! list->at(i)->update_locals(result); ! break; ! } } } } return result;
*** 102,111 **** --- 105,115 ---- } void compiledVFrame::update_deferred_value(BasicType type, int index, jvalue value) { assert(fr().is_deoptimized_frame() || thread()->must_deopt_id() == fr().id(), "frame must be scheduled for deoptimization"); + assert(!Continuation::is_frame_in_continuation(thread(), fr()), "No support for deferred values in continuations"); GrowableArray<jvmtiDeferredLocalVariableSet*>* deferred = thread()->deferred_locals(); jvmtiDeferredLocalVariableSet* locals = NULL; if (deferred != NULL ) { // See if this vframe has already had locals with deferred writes for (int f = 0; f < deferred->length(); f++ ) {
*** 141,159 **** StackValueCollection* result = new StackValueCollection(length); for (int i = 0; i < length; i++) { result->add(create_stack_value(scv_list->at(i))); } ! // Replace the original values with any stores that have been ! // performed through compiledVFrame::update_stack. ! GrowableArray<jvmtiDeferredLocalVariableSet*>* list = thread()->deferred_locals(); ! if (list != NULL ) { ! // In real life this never happens or is typically a single element search ! for (int i = 0; i < list->length(); i++) { ! if (list->at(i)->matches(this)) { ! list->at(i)->update_stack(result); ! break; } } } return result; --- 145,165 ---- StackValueCollection* result = new StackValueCollection(length); for (int i = 0; i < length; i++) { result->add(create_stack_value(scv_list->at(i))); } ! if (register_map()->cont() == NULL) { // LOOM TODO ! // Replace the original values with any stores that have been ! // performed through compiledVFrame::update_stack. ! GrowableArray<jvmtiDeferredLocalVariableSet*>* list = thread()->deferred_locals(); ! if (list != NULL ) { ! // In real life this never happens or is typically a single element search ! for (int i = 0; i < list->length(); i++) { ! if (list->at(i)->matches(this)) { ! list->at(i)->update_stack(result); ! break; ! } } } } return result;
< prev index next >