Revision: 13252
Author:   [email protected]
Date:     Thu Dec 20 05:05:16 2012
Log:      Refactoring only: Extracted a method for finding optimized code.

Review URL: https://codereview.chromium.org/11637036
http://code.google.com/p/v8/source/detail?r=13252

Modified:
 /branches/bleeding_edge/src/deoptimizer.cc

=======================================
--- /branches/bleeding_edge/src/deoptimizer.cc  Thu Dec 20 03:53:42 2012
+++ /branches/bleeding_edge/src/deoptimizer.cc  Thu Dec 20 05:05:16 2012
@@ -475,6 +475,40 @@
 void Deoptimizer::ComputeOutputFrames(Deoptimizer* deoptimizer) {
   deoptimizer->DoComputeOutputFrames();
 }
+
+
+static Code* FindOptimizedCode(Isolate* isolate,
+                               JSFunction* function,
+                               Deoptimizer::BailoutType type,
+                               Address from,
+                               Code* optimized_code) {
+  switch (type) {
+    case Deoptimizer::EAGER:
+      ASSERT(from == NULL);
+      return function->code();
+    case Deoptimizer::LAZY: {
+      Code* compiled_code =
+          isolate->deoptimizer_data()->FindDeoptimizingCode(from);
+      return (compiled_code == NULL)
+          ? static_cast<Code*>(isolate->heap()->FindCodeObject(from))
+          : compiled_code;
+    }
+    case Deoptimizer::OSR: {
+      // The function has already been optimized and we're transitioning
+      // from the unoptimized shared version to the optimized one in the
+      // function. The return address (from) points to unoptimized code.
+      Code* compiled_code = function->code();
+      ASSERT(compiled_code->kind() == Code::OPTIMIZED_FUNCTION);
+      ASSERT(!compiled_code->contains(from));
+      return compiled_code;
+    }
+    case Deoptimizer::DEBUGGER:
+      ASSERT(optimized_code->contains(from));
+      return optimized_code;
+  }
+  UNREACHABLE();
+  return NULL;
+}


 Deoptimizer::Deoptimizer(Isolate* isolate,
@@ -525,28 +559,10 @@
   if (function != NULL && function->IsOptimized()) {
     function->shared()->increment_deopt_count();
   }
-  // Find the optimized code.
-  if (type == EAGER) {
-    ASSERT(from == NULL);
-    compiled_code_ = function_->code();
-    if (FLAG_trace_deopt) compiled_code_->PrintDeoptLocation(bailout_id);
-  } else if (type == LAZY) {
- compiled_code_ = isolate->deoptimizer_data()->FindDeoptimizingCode(from);
-    if (compiled_code_ == NULL) {
-      compiled_code_ =
-          static_cast<Code*>(isolate->heap()->FindCodeObject(from));
-    }
-    ASSERT(compiled_code_ != NULL);
-  } else if (type == OSR) {
-    // The function has already been optimized and we're transitioning
-    // from the unoptimized shared version to the optimized one in the
-    // function. The return address (from) points to unoptimized code.
-    compiled_code_ = function_->code();
-    ASSERT(compiled_code_->kind() == Code::OPTIMIZED_FUNCTION);
-    ASSERT(!compiled_code_->contains(from));
-  } else if (type == DEBUGGER) {
-    compiled_code_ = optimized_code;
-    ASSERT(compiled_code_->contains(from));
+  compiled_code_ =
+      FindOptimizedCode(isolate, function, type, from, optimized_code);
+  if (FLAG_trace_deopt && type == EAGER) {
+    compiled_code_->PrintDeoptLocation(bailout_id);
   }
   ASSERT(HEAP->allow_allocation(false));
   unsigned size = ComputeInputFrameSize();

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to