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

Unified Diff: runtime/vm/debugger.cc

Issue 2720723006: Address comments from Matthias on previous CL (Closed)
Patch Set: Created 3 years, 10 months 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/debugger.h ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/debugger.cc
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 5cf5419f449621b75e7f9f63387cb4fe403fa3e9..a7ce41cf3c19b6b74dabf9a0a6909eba0b545399 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -710,39 +710,30 @@ intptr_t ActivationFrame::ContextLevel() {
return context_level_;
}
-RawObject* ActivationFrame::GetAsyncCompleter() {
+
+RawObject* ActivationFrame::GetAsyncContextVariable(const String& name) {
if (!function_.IsAsyncClosure()) {
return Object::null();
}
GetVarDescriptors();
intptr_t var_desc_len = var_descriptors_.Length();
- if (!live_frame_) {
- // Not actually on the stack. Pull it out of the closure's context.
- intptr_t var_desc_len = var_descriptors_.Length();
- for (intptr_t i = 0; i < var_desc_len; i++) {
- RawLocalVarDescriptors::VarInfo var_info;
- var_descriptors_.GetInfo(i, &var_info);
+ for (intptr_t i = 0; i < var_desc_len; i++) {
+ RawLocalVarDescriptors::VarInfo var_info;
+ var_descriptors_.GetInfo(i, &var_info);
+ if (var_descriptors_.GetName(i) == name.raw()) {
const int8_t kind = var_info.kind();
- if (var_descriptors_.GetName(i) == Symbols::AsyncCompleter().raw()) {
+ if (!live_frame_) {
ASSERT(kind == RawLocalVarDescriptors::kContextVar);
- ASSERT(!ctx_.IsNull());
- return ctx_.At(var_info.index());
}
- }
- } else {
- ASSERT(fp() != 0);
- // On the stack.
- for (intptr_t i = 0; i < var_desc_len; i++) {
- RawLocalVarDescriptors::VarInfo var_info;
- var_descriptors_.GetInfo(i, &var_info);
- if (var_descriptors_.GetName(i) == Symbols::AsyncCompleter().raw()) {
- const int8_t kind = var_info.kind();
- if (kind == RawLocalVarDescriptors::kStackVar) {
- return GetStackVar(var_info.index());
- } else {
- ASSERT(kind == RawLocalVarDescriptors::kContextVar);
- return GetContextVar(var_info.scope_id, var_info.index());
+ if (kind == RawLocalVarDescriptors::kStackVar) {
+ return GetStackVar(var_info.index());
+ } else {
+ ASSERT(kind == RawLocalVarDescriptors::kContextVar);
+ if (!live_frame_) {
+ ASSERT(!ctx_.IsNull());
+ return ctx_.At(var_info.index());
}
+ return GetContextVar(var_info.scope_id, var_info.index());
}
}
}
@@ -750,6 +741,11 @@ RawObject* ActivationFrame::GetAsyncCompleter() {
}
+RawObject* ActivationFrame::GetAsyncCompleter() {
+ return GetAsyncContextVariable(Symbols::AsyncCompleter());
+}
+
+
RawObject* ActivationFrame::GetAsyncCompleterAwaiter(const Object& completer) {
const Class& sync_completer_cls = Class::Handle(completer.clazz());
ASSERT(!sync_completer_cls.IsNull());
@@ -771,42 +767,7 @@ RawObject* ActivationFrame::GetAsyncCompleterAwaiter(const Object& completer) {
RawObject* ActivationFrame::GetAsyncStreamControllerStream() {
- if (!function_.IsAsyncGenClosure()) {
- return Object::null();
- }
- GetVarDescriptors();
- intptr_t var_desc_len = var_descriptors_.Length();
- if (!live_frame_) {
- // Not actually on the stack. Pull it out of the closure's context.
- intptr_t var_desc_len = var_descriptors_.Length();
- for (intptr_t i = 0; i < var_desc_len; i++) {
- RawLocalVarDescriptors::VarInfo var_info;
- var_descriptors_.GetInfo(i, &var_info);
- const int8_t kind = var_info.kind();
- if (var_descriptors_.GetName(i) == Symbols::ControllerStream().raw()) {
- ASSERT(kind == RawLocalVarDescriptors::kContextVar);
- ASSERT(!ctx_.IsNull());
- return ctx_.At(var_info.index());
- }
- }
- } else {
- ASSERT(fp() != 0);
- // On the stack.
- for (intptr_t i = 0; i < var_desc_len; i++) {
- RawLocalVarDescriptors::VarInfo var_info;
- var_descriptors_.GetInfo(i, &var_info);
- if (var_descriptors_.GetName(i) == Symbols::ControllerStream().raw()) {
- const int8_t kind = var_info.kind();
- if (kind == RawLocalVarDescriptors::kStackVar) {
- return GetStackVar(var_info.index());
- } else {
- ASSERT(kind == RawLocalVarDescriptors::kContextVar);
- return GetContextVar(var_info.scope_id, var_info.index());
- }
- }
- }
- }
- return Object::null();
+ return GetAsyncContextVariable(Symbols::ControllerStream());
}
@@ -846,13 +807,12 @@ bool ActivationFrame::HandlesException(const Instance& exc_obj) {
Array& handled_types = Array::Handle();
AbstractType& type = Type::Handle();
const TypeArguments& no_instantiator = TypeArguments::Handle();
- const intptr_t try_index_threshold = CatchClauseNode::kImplicitAsyncTryIndex;
const bool is_async =
function().IsAsyncClosure() || function().IsAsyncGenClosure();
handlers = code().exception_handlers();
ASSERT(!handlers.IsNull());
intptr_t num_handlers_checked = 0;
- while (try_index >= try_index_threshold) {
+ while (try_index != CatchClauseNode::kInvalidTryIndex) {
// Detect circles in the exception handler data.
num_handlers_checked++;
ASSERT(num_handlers_checked <= handlers.num_entries());
« no previous file with comments | « runtime/vm/debugger.h ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698