Reviewers: Michael Achenbach,

Description:
Revert "In PrepareForBreakPoints, also purge shared function info not referenced
by functions."

This reverts commit r24964.

[email protected]

Please review this at https://codereview.chromium.org/687163002/

Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+24, -69 lines):
  M src/debug.cc
  D test/mjsunit/regress/regress-crbug-424142.js


Index: test/mjsunit/regress/regress-crbug-424142.js
diff --git a/test/mjsunit/regress/regress-crbug-424142.js b/test/mjsunit/regress/regress-crbug-424142.js
deleted file mode 100644
index 0a370d414269062ff9dabae4e09e4e7a2e77ea13..0000000000000000000000000000000000000000
--- a/test/mjsunit/regress/regress-crbug-424142.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --expose-debug-as debug
-
-(function outer() {
-  var C = (function C_() {
-    var y = 1;
-    function CC() {
-      this.x = 0;
-    }
-    CC.prototype.f = function CCf() {
-      this.x += y;
-      return this.x;
-    };
-    return CC;
-  })();
-
-  var c = new C(0);
-})
-
-function sentinel() {}
-
-Debug = debug.Debug;
-
-var script = Debug.findScript(sentinel);
-var line = 14;
-var line_start = Debug.findScriptSourcePosition(script, line, 0);
-var line_end = Debug.findScriptSourcePosition(script, line + 1, 0) - 1;
-var actual = Debug.setBreakPointByScriptIdAndPosition(
-                 script.id, line_start).actual_position;
-// Make sure the actual break position is within the line where we set
-// the break point.
-assertTrue(line_start <= actual);
-assertTrue(actual <= line_end);
Index: src/debug.cc
diff --git a/src/debug.cc b/src/debug.cc
index 9d31beef0ae80e392bbae40ce83b2043426797cb..6521110a61dc61ebb12271ed7a4bdbd1be2ea08d 100644
--- a/src/debug.cc
+++ b/src/debug.cc
@@ -1894,23 +1894,6 @@ static void RecompileAndRelocateSuspendedGenerators(
 }


-static bool SkipSharedFunctionInfo(SharedFunctionInfo* shared,
-                                   Object* active_code_marker) {
-  if (!shared->allows_lazy_compilation()) return true;
-  if (!shared->script()->IsScript()) return true;
-  Object* script = shared->script();
-  if (!script->IsScript()) return true;
- if (Script::cast(script)->type()->value() == Script::TYPE_NATIVE) return true;
-  Code* shared_code = shared->code();
-  return shared_code->gc_metadata() == active_code_marker;
-}
-
-
-static inline bool HasDebugBreakSlots(Code* code) {
-  return code->kind() == Code::FUNCTION && code->has_debug_break_slots();
-}
-
-
 void Debug::PrepareForBreakPoints() {
   // If preparing for the first break point make sure to deoptimize all
   // functions as debugging does not work with optimized code.
@@ -1976,21 +1959,35 @@ void Debug::PrepareForBreakPoints() {
         if (obj->IsJSFunction()) {
           JSFunction* function = JSFunction::cast(obj);
           SharedFunctionInfo* shared = function->shared();
-          if (SkipSharedFunctionInfo(shared, active_code_marker)) continue;
+
+          if (!shared->allows_lazy_compilation()) continue;
+          if (!shared->script()->IsScript()) continue;
+          if (function->IsFromNativeScript()) continue;
+ if (shared->code()->gc_metadata() == active_code_marker) continue;
+
           if (shared->is_generator()) {
generator_functions.Add(Handle<JSFunction>(function, isolate_));
             continue;
           }
-          if (HasDebugBreakSlots(function->code())) continue;
- Code* fallback = HasDebugBreakSlots(shared->code()) ? shared->code() - : *lazy_compile;
+
           Code::Kind kind = function->code()->kind();
-          if (kind == Code::FUNCTION ||
-              (kind == Code::BUILTIN &&  // Abort in-flight compilation.
-               (function->IsInOptimizationQueue() ||
-                function->IsMarkedForOptimization() ||
-                function->IsMarkedForConcurrentOptimization()))) {
-            function->ReplaceCode(fallback);
+          if (kind == Code::FUNCTION &&
+              !function->code()->has_debug_break_slots()) {
+            function->ReplaceCode(*lazy_compile);
+            function->shared()->ReplaceCode(*lazy_compile);
+          } else if (kind == Code::BUILTIN &&
+              (function->IsInOptimizationQueue() ||
+               function->IsMarkedForOptimization() ||
+               function->IsMarkedForConcurrentOptimization())) {
+            // Abort in-flight compilation.
+            Code* shared_code = function->shared()->code();
+            if (shared_code->kind() == Code::FUNCTION &&
+                shared_code->has_debug_break_slots()) {
+              function->ReplaceCode(shared_code);
+            } else {
+              function->ReplaceCode(*lazy_compile);
+              function->shared()->ReplaceCode(*lazy_compile);
+            }
           }
         } else if (obj->IsJSGeneratorObject()) {
           JSGeneratorObject* gen = JSGeneratorObject::cast(obj);
@@ -2010,12 +2007,6 @@ void Debug::PrepareForBreakPoints() {
           gen->set_continuation(code_offset);

suspended_generators.Add(Handle<JSGeneratorObject>(gen, isolate_));
-        } else if (obj->IsSharedFunctionInfo()) {
-          SharedFunctionInfo* shared = SharedFunctionInfo::cast(obj);
-          if (SkipSharedFunctionInfo(shared, active_code_marker)) continue;
-          if (shared->is_generator()) continue;
-          if (HasDebugBreakSlots(shared->code())) continue;
-          shared->ReplaceCode(*lazy_compile);
         }
       }



--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to