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

Side by Side Diff: src/inspector/v8-debugger.cc

Issue 2516973003: [inspector] Expose scopes for suspended generator objects (Closed)
Patch Set: Address comments Created 4 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 unified diff | Download patch
« no previous file with comments | « src/inspector/v8-debugger.h ('k') | test/inspector/debugger/suspended-generator-scopes.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/inspector/v8-debugger.h" 5 #include "src/inspector/v8-debugger.h"
6 6
7 #include "src/inspector/debugger-script.h" 7 #include "src/inspector/debugger-script.h"
8 #include "src/inspector/protocol/Protocol.h" 8 #include "src/inspector/protocol/Protocol.h"
9 #include "src/inspector/script-breakpoint.h" 9 #include "src/inspector/script-breakpoint.h"
10 #include "src/inspector/string-util.h" 10 #include "src/inspector/string-util.h"
(...skipping 670 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 } 681 }
682 DCHECK(value->IsObject()); 682 DCHECK(value->IsObject());
683 m_debuggerScript.Reset(m_isolate, value.As<v8::Object>()); 683 m_debuggerScript.Reset(m_isolate, value.As<v8::Object>());
684 } 684 }
685 685
686 v8::Local<v8::Context> V8Debugger::debuggerContext() const { 686 v8::Local<v8::Context> V8Debugger::debuggerContext() const {
687 DCHECK(!m_debuggerContext.IsEmpty()); 687 DCHECK(!m_debuggerContext.IsEmpty());
688 return m_debuggerContext.Get(m_isolate); 688 return m_debuggerContext.Get(m_isolate);
689 } 689 }
690 690
691 v8::MaybeLocal<v8::Value> V8Debugger::functionScopes( 691 v8::MaybeLocal<v8::Value> V8Debugger::getTargetScopes(
692 v8::Local<v8::Context> context, v8::Local<v8::Function> function) { 692 v8::Local<v8::Context> context, v8::Local<v8::Value> value,
693 ScopeTargetKind kind) {
693 if (!enabled()) { 694 if (!enabled()) {
694 UNREACHABLE(); 695 UNREACHABLE();
695 return v8::Local<v8::Value>::New(m_isolate, v8::Undefined(m_isolate)); 696 return v8::Local<v8::Value>::New(m_isolate, v8::Undefined(m_isolate));
696 } 697 }
697 v8::Local<v8::Value> argv[] = {function}; 698 v8::Local<v8::Value> argv[] = {value};
698 v8::Local<v8::Value> scopesValue; 699 v8::Local<v8::Value> scopesValue;
699 if (!callDebuggerMethod("getFunctionScopes", 1, argv).ToLocal(&scopesValue)) 700
701 const char* debuggerMethod = nullptr;
702 switch (kind) {
703 case FUNCTION:
704 debuggerMethod = "getFunctionScopes";
705 break;
706 case GENERATOR:
707 debuggerMethod = "getGeneratorScopes";
708 break;
709 }
710
711 if (!callDebuggerMethod(debuggerMethod, 1, argv).ToLocal(&scopesValue))
700 return v8::MaybeLocal<v8::Value>(); 712 return v8::MaybeLocal<v8::Value>();
701 v8::Local<v8::Value> copied; 713 v8::Local<v8::Value> copied;
702 if (!copyValueFromDebuggerContext(m_isolate, debuggerContext(), context, 714 if (!copyValueFromDebuggerContext(m_isolate, debuggerContext(), context,
703 scopesValue) 715 scopesValue)
704 .ToLocal(&copied) || 716 .ToLocal(&copied) ||
705 !copied->IsArray()) 717 !copied->IsArray())
706 return v8::MaybeLocal<v8::Value>(); 718 return v8::MaybeLocal<v8::Value>();
707 if (!markAsInternal(context, v8::Local<v8::Array>::Cast(copied), 719 if (!markAsInternal(context, v8::Local<v8::Array>::Cast(copied),
708 V8InternalValueType::kScopeList)) 720 V8InternalValueType::kScopeList))
709 return v8::MaybeLocal<v8::Value>(); 721 return v8::MaybeLocal<v8::Value>();
710 if (!markArrayEntriesAsInternal(context, v8::Local<v8::Array>::Cast(copied), 722 if (!markArrayEntriesAsInternal(context, v8::Local<v8::Array>::Cast(copied),
711 V8InternalValueType::kScope)) 723 V8InternalValueType::kScope))
712 return v8::MaybeLocal<v8::Value>(); 724 return v8::MaybeLocal<v8::Value>();
713 return copied; 725 return copied;
714 } 726 }
715 727
728 v8::MaybeLocal<v8::Value> V8Debugger::functionScopes(
729 v8::Local<v8::Context> context, v8::Local<v8::Function> function) {
730 return getTargetScopes(context, function, FUNCTION);
731 }
732
733 v8::MaybeLocal<v8::Value> V8Debugger::generatorScopes(
734 v8::Local<v8::Context> context, v8::Local<v8::Value> generator) {
735 return getTargetScopes(context, generator, GENERATOR);
736 }
737
716 v8::MaybeLocal<v8::Array> V8Debugger::internalProperties( 738 v8::MaybeLocal<v8::Array> V8Debugger::internalProperties(
717 v8::Local<v8::Context> context, v8::Local<v8::Value> value) { 739 v8::Local<v8::Context> context, v8::Local<v8::Value> value) {
718 v8::Local<v8::Array> properties; 740 v8::Local<v8::Array> properties;
719 if (!v8::DebugInterface::GetInternalProperties(m_isolate, value) 741 if (!v8::DebugInterface::GetInternalProperties(m_isolate, value)
720 .ToLocal(&properties)) 742 .ToLocal(&properties))
721 return v8::MaybeLocal<v8::Array>(); 743 return v8::MaybeLocal<v8::Array>();
722 if (value->IsFunction()) { 744 if (value->IsFunction()) {
723 v8::Local<v8::Function> function = value.As<v8::Function>(); 745 v8::Local<v8::Function> function = value.As<v8::Function>();
724 v8::Local<v8::Value> location = functionLocation(context, function); 746 v8::Local<v8::Value> location = functionLocation(context, function);
725 if (location->IsObject()) { 747 if (location->IsObject()) {
(...skipping 22 matching lines...) Expand all
748 } 770 }
749 if (value->IsGeneratorObject()) { 771 if (value->IsGeneratorObject()) {
750 v8::Local<v8::Value> location = 772 v8::Local<v8::Value> location =
751 generatorObjectLocation(context, v8::Local<v8::Object>::Cast(value)); 773 generatorObjectLocation(context, v8::Local<v8::Object>::Cast(value));
752 if (location->IsObject()) { 774 if (location->IsObject()) {
753 createDataProperty( 775 createDataProperty(
754 context, properties, properties->Length(), 776 context, properties, properties->Length(),
755 toV8StringInternalized(m_isolate, "[[GeneratorLocation]]")); 777 toV8StringInternalized(m_isolate, "[[GeneratorLocation]]"));
756 createDataProperty(context, properties, properties->Length(), location); 778 createDataProperty(context, properties, properties->Length(), location);
757 } 779 }
780 v8::Local<v8::Value> scopes;
781 if (generatorScopes(context, value).ToLocal(&scopes)) {
782 createDataProperty(context, properties, properties->Length(),
783 toV8StringInternalized(m_isolate, "[[Scopes]]"));
784 createDataProperty(context, properties, properties->Length(), scopes);
785 }
758 } 786 }
759 if (value->IsFunction()) { 787 if (value->IsFunction()) {
760 v8::Local<v8::Function> function = value.As<v8::Function>(); 788 v8::Local<v8::Function> function = value.As<v8::Function>();
761 v8::Local<v8::Value> boundFunction = function->GetBoundFunction(); 789 v8::Local<v8::Value> boundFunction = function->GetBoundFunction();
762 v8::Local<v8::Value> scopes; 790 v8::Local<v8::Value> scopes;
763 if (boundFunction->IsUndefined() && 791 if (boundFunction->IsUndefined() &&
764 functionScopes(context, function).ToLocal(&scopes)) { 792 functionScopes(context, function).ToLocal(&scopes)) {
765 createDataProperty(context, properties, properties->Length(), 793 createDataProperty(context, properties, properties->Length(),
766 toV8StringInternalized(m_isolate, "[[Scopes]]")); 794 toV8StringInternalized(m_isolate, "[[Scopes]]"));
767 createDataProperty(context, properties, properties->Length(), scopes); 795 createDataProperty(context, properties, properties->Length(), scopes);
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
981 1009
982 size_t stackSize = 1010 size_t stackSize =
983 fullStack ? V8StackTraceImpl::maxCallStackSizeToCapture : 1; 1011 fullStack ? V8StackTraceImpl::maxCallStackSizeToCapture : 1;
984 if (m_inspector->enabledRuntimeAgentForGroup(contextGroupId)) 1012 if (m_inspector->enabledRuntimeAgentForGroup(contextGroupId))
985 stackSize = V8StackTraceImpl::maxCallStackSizeToCapture; 1013 stackSize = V8StackTraceImpl::maxCallStackSizeToCapture;
986 1014
987 return V8StackTraceImpl::capture(this, contextGroupId, stackSize); 1015 return V8StackTraceImpl::capture(this, contextGroupId, stackSize);
988 } 1016 }
989 1017
990 } // namespace v8_inspector 1018 } // namespace v8_inspector
OLDNEW
« no previous file with comments | « src/inspector/v8-debugger.h ('k') | test/inspector/debugger/suspended-generator-scopes.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698