< prev index next >

src/hotspot/share/runtime/vframe_hp.cpp

Print this page

        

@@ -32,10 +32,11 @@
 #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,17 +63,19 @@
     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;
+  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,10 +105,11 @@
 }
 
 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,19 +145,21 @@
   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;
+  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 >