Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1743)

Unified Diff: runtime/vm/debugger.cc

Issue 789643006: Introduce is_debuggable state bit on function objects (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/compiler.cc ('k') | runtime/vm/megamorphic_cache_table.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/debugger.cc
===================================================================
--- runtime/vm/debugger.cc (revision 42569)
+++ runtime/vm/debugger.cc (working copy)
@@ -111,6 +111,7 @@
ASSERT(func.script() == script_);
ASSERT((func.token_pos() <= token_pos) &&
(token_pos <= func.end_token_pos()));
+ ASSERT(func.is_debuggable());
function_ = func.raw();
token_pos_ = token_pos;
end_token_pos_ = token_pos;
@@ -1565,12 +1566,12 @@
if ((function.token_pos() == start_pos)
&& (function.end_token_pos() == end_pos)
&& (function.script() == script.raw())) {
- if (function.HasCode() && !function.IsAsyncFunction()) {
+ if (function.HasCode() && function.is_debuggable()) {
function_list->Add(function);
}
if (function.HasImplicitClosureFunction()) {
function = function.ImplicitClosureFunction();
- if (function.HasCode() && !function.IsAsyncFunction()) {
+ if (function.HasCode() && function.is_debuggable()) {
function_list->Add(function);
}
}
@@ -1586,12 +1587,12 @@
if ((function.token_pos() == start_pos)
&& (function.end_token_pos() == end_pos)
&& (function.script() == script.raw())) {
- if (function.HasCode() && !function.IsAsyncFunction()) {
+ if (function.HasCode() && function.is_debuggable()) {
function_list->Add(function);
}
if (function.HasImplicitClosureFunction()) {
function = function.ImplicitClosureFunction();
- if (function.HasCode() && !function.IsAsyncFunction()) {
+ if (function.HasCode() && function.is_debuggable()) {
function_list->Add(function);
}
}
@@ -1603,22 +1604,6 @@
}
-static bool IsDebuggableFunctionKind(const Function& func) {
- RawFunction::Kind kind = func.kind();
- if ((kind == RawFunction::kImplicitGetter) ||
- (kind == RawFunction::kImplicitSetter) ||
- (kind == RawFunction::kImplicitStaticFinalGetter) ||
- (kind == RawFunction::kMethodExtractor) ||
- (kind == RawFunction::kNoSuchMethodDispatcher) ||
- (kind == RawFunction::kInvokeFieldDispatcher) ||
- (kind == RawFunction::kIrregexpFunction) ||
- func.IsImplicitConstructor()) {
- return false;
- }
- return true;
-}
-
-
static void SelectBestFit(Function* best_fit, Function* func) {
if (best_fit->IsNull()) {
*best_fit = func->raw();
@@ -1661,7 +1646,7 @@
for (intptr_t pos = 0; pos < num_functions; pos++) {
function ^= functions.At(pos);
ASSERT(!function.IsNull());
- if (IsDebuggableFunctionKind(function) &&
+ if (function.is_debuggable() &&
FunctionContains(function, script, token_pos)) {
SelectBestFit(&best_fit, &function);
}
@@ -1674,7 +1659,7 @@
for (intptr_t pos = 0; pos < num_closures; pos++) {
function ^= closures.At(pos);
ASSERT(!function.IsNull());
- if (IsDebuggableFunctionKind(function) &&
+ if (function.is_debuggable() &&
FunctionContains(function, script, token_pos)) {
SelectBestFit(&best_fit, &function);
}
@@ -1792,6 +1777,9 @@
SourceBreakpoint* Debugger::SetBreakpointAtEntry(
const Function& target_function) {
ASSERT(!target_function.IsNull());
+ if (!target_function.is_debuggable()) {
+ return NULL;
+ }
const Script& script = Script::Handle(target_function.script());
return SetBreakpoint(script,
target_function.token_pos(),
@@ -2134,7 +2122,7 @@
// static
bool Debugger::IsDebuggable(const Function& func) {
- if (!IsDebuggableFunctionKind(func)) {
+ if (!func.is_debuggable()) {
return false;
}
if (Service::IsRunning()) {
@@ -2298,7 +2286,8 @@
Function& best_fit = Function::Handle(isolate_);
for (intptr_t i = 0; i < num_closures; i++) {
closure ^= closures.At(i);
- if ((function.token_pos() < closure.token_pos()) &&
+ if (closure.is_debuggable() &&
+ (function.token_pos() < closure.token_pos()) &&
(closure.end_token_pos() < function.end_token_pos()) &&
(closure.token_pos() <= token_pos) &&
(token_pos <= closure.end_token_pos()) &&
@@ -2315,6 +2304,12 @@
// Return with minimal overhead if there are no breakpoints.
return;
}
+ if (!func.is_debuggable()) {
+ // Nothing to do if the function is not debuggable. If there is
+ // a pending breakpoint in an inner function (that is debuggable),
+ // we'll resolve the breakpoint when the inner function is compiled.
+ return;
+ }
// Iterate over all source breakpoints to check whether breakpoints
// need to be set in the newly compiled function.
Script& script = Script::Handle(isolate_);
« no previous file with comments | « runtime/vm/compiler.cc ('k') | runtime/vm/megamorphic_cache_table.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698