}
-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.
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);
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);
}
}
+++ /dev/null
-// 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);