Index: src/debug/debug-scopes.cc |
diff --git a/src/debug/debug-scopes.cc b/src/debug/debug-scopes.cc |
index c84d32ae7da7e2ecd89c072a72f38d81a5bd0dd5..5b5b9542f4a74d967b223eebb32f55f2cc78c15e 100644 |
--- a/src/debug/debug-scopes.cc |
+++ b/src/debug/debug-scopes.cc |
@@ -23,8 +23,7 @@ ScopeIterator::ScopeIterator(Isolate* isolate, FrameInspector* frame_inspector, |
: isolate_(isolate), |
frame_inspector_(frame_inspector), |
nested_scope_chain_(4), |
- seen_script_scope_(false), |
- failed_(false) { |
+ seen_script_scope_(false) { |
if (!frame_inspector->GetContext()->IsContext()) { |
// Optimized frame, context or function cannot be materialized. Give up. |
return; |
@@ -119,26 +118,26 @@ ScopeIterator::ScopeIterator(Isolate* isolate, FrameInspector* frame_inspector, |
DeclarationScope::Analyze(info.get(), AnalyzeMode::kDebugger); |
RetrieveScopeChain(scope); |
} |
- } else if (!ignore_nested_scopes) { |
+ } else { |
// A failed reparse indicates that the preparser has diverged from the |
// parser or that the preparse data given to the initial parse has been |
// faulty. We fail in debug mode but in release mode we only provide the |
// information we get from the context chain but nothing about |
// completely stack allocated scopes or stack allocated locals. |
// Or it could be due to stack overflow. |
- DCHECK(isolate_->has_pending_exception()); |
- failed_ = true; |
+ // Silently fail by presenting an empty context chain. |
+ CHECK(isolate_->has_pending_exception()); |
+ isolate_->clear_pending_exception(); |
+ context_ = Handle<Context>(); |
} |
UnwrapEvaluationContext(); |
} |
- |
ScopeIterator::ScopeIterator(Isolate* isolate, Handle<JSFunction> function) |
: isolate_(isolate), |
frame_inspector_(NULL), |
context_(function->context()), |
- seen_script_scope_(false), |
- failed_(false) { |
+ seen_script_scope_(false) { |
if (!function->shared()->IsSubjectToDebugging()) context_ = Handle<Context>(); |
UnwrapEvaluationContext(); |
} |
@@ -148,8 +147,7 @@ ScopeIterator::ScopeIterator(Isolate* isolate, |
: isolate_(isolate), |
frame_inspector_(NULL), |
context_(generator->context()), |
- seen_script_scope_(false), |
- failed_(false) { |
+ seen_script_scope_(false) { |
if (!generator->function()->shared()->IsSubjectToDebugging()) { |
context_ = Handle<Context>(); |
} |
@@ -212,7 +210,7 @@ MUST_USE_RESULT MaybeHandle<JSObject> ScopeIterator::MaterializeScopeDetails() { |
void ScopeIterator::Next() { |
- DCHECK(!failed_); |
+ DCHECK(!Done()); |
ScopeType scope_type = Type(); |
if (scope_type == ScopeTypeGlobal) { |
// The global scope is always the last in the chain. |
@@ -249,7 +247,7 @@ void ScopeIterator::Next() { |
// Return the type of the current scope. |
ScopeIterator::ScopeType ScopeIterator::Type() { |
- DCHECK(!failed_); |
+ DCHECK(!Done()); |
if (!nested_scope_chain_.is_empty()) { |
Handle<ScopeInfo> scope_info = nested_scope_chain_.last().scope_info; |
switch (scope_info->scope_type()) { |
@@ -304,7 +302,7 @@ ScopeIterator::ScopeType ScopeIterator::Type() { |
MaybeHandle<JSObject> ScopeIterator::ScopeObject() { |
- DCHECK(!failed_); |
+ DCHECK(!Done()); |
switch (Type()) { |
case ScopeIterator::ScopeTypeGlobal: |
return Handle<JSObject>(CurrentContext()->global_proxy()); |
@@ -346,7 +344,7 @@ bool ScopeIterator::HasContext() { |
bool ScopeIterator::SetVariableValue(Handle<String> variable_name, |
Handle<Object> new_value) { |
- DCHECK(!failed_); |
+ DCHECK(!Done()); |
switch (Type()) { |
case ScopeIterator::ScopeTypeGlobal: |
break; |
@@ -372,7 +370,7 @@ bool ScopeIterator::SetVariableValue(Handle<String> variable_name, |
Handle<ScopeInfo> ScopeIterator::CurrentScopeInfo() { |
- DCHECK(!failed_); |
+ DCHECK(!Done()); |
if (!nested_scope_chain_.is_empty()) { |
return nested_scope_chain_.last().scope_info; |
} else if (context_->IsBlockContext()) { |
@@ -385,7 +383,7 @@ Handle<ScopeInfo> ScopeIterator::CurrentScopeInfo() { |
Handle<Context> ScopeIterator::CurrentContext() { |
- DCHECK(!failed_); |
+ DCHECK(!Done()); |
if (Type() == ScopeTypeGlobal || Type() == ScopeTypeScript || |
nested_scope_chain_.is_empty()) { |
return context_; |
@@ -402,7 +400,7 @@ Handle<StringSet> ScopeIterator::GetNonLocals() { return non_locals_; } |
// Debug print of the content of the current scope. |
void ScopeIterator::DebugPrint() { |
OFStream os(stdout); |
- DCHECK(!failed_); |
+ DCHECK(!Done()); |
switch (Type()) { |
case ScopeIterator::ScopeTypeGlobal: |
os << "Global:\n"; |