| // Copyright 2017 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. | 
 |  | 
 | #ifndef V8_DEBUG_DEBUG_SCOPE_ITERATOR_H_ | 
 | #define V8_DEBUG_DEBUG_SCOPE_ITERATOR_H_ | 
 |  | 
 | #include "src/debug/debug-frames.h" | 
 | #include "src/debug/debug-interface.h" | 
 | #include "src/debug/debug-scopes.h" | 
 |  | 
 | namespace v8 { | 
 | namespace internal { | 
 |  | 
 | class DebugScopeIterator final : public debug::ScopeIterator { | 
 |  public: | 
 |   DebugScopeIterator(Isolate* isolate, FrameInspector* frame_inspector); | 
 |   DebugScopeIterator(Isolate* isolate, Handle<JSFunction> function); | 
 |   DebugScopeIterator(Isolate* isolate, Handle<JSGeneratorObject> generator); | 
 |  | 
 |   bool Done() override; | 
 |   void Advance() override; | 
 |   ScopeType GetType() override; | 
 |   v8::Local<v8::Object> GetObject() override; | 
 |   v8::Local<v8::Value> GetFunctionDebugName() override; | 
 |   int GetScriptId() override; | 
 |   bool HasLocationInfo() override; | 
 |   debug::Location GetStartLocation() override; | 
 |   debug::Location GetEndLocation() override; | 
 |  | 
 |   bool SetVariableValue(v8::Local<v8::String> name, | 
 |                         v8::Local<v8::Value> value) override; | 
 |  | 
 |  private: | 
 |   bool ShouldIgnore(); | 
 |  | 
 |   v8::internal::ScopeIterator iterator_; | 
 | }; | 
 |  | 
 | class DebugWasmScopeIterator final : public debug::ScopeIterator { | 
 |  public: | 
 |   DebugWasmScopeIterator(Isolate* isolate, WasmFrame* frame); | 
 |  | 
 |   bool Done() override; | 
 |   void Advance() override; | 
 |   ScopeType GetType() override; | 
 |   v8::Local<v8::Object> GetObject() override; | 
 |   v8::Local<v8::Value> GetFunctionDebugName() override; | 
 |   int GetScriptId() override; | 
 |   bool HasLocationInfo() override; | 
 |   debug::Location GetStartLocation() override; | 
 |   debug::Location GetEndLocation() override; | 
 |  | 
 |   bool SetVariableValue(v8::Local<v8::String> name, | 
 |                         v8::Local<v8::Value> value) override; | 
 |  private: | 
 |   Isolate* isolate_; | 
 |   WasmFrame* frame_; | 
 |   ScopeType type_; | 
 | }; | 
 | }  // namespace internal | 
 | }  // namespace v8 | 
 |  | 
 | #endif  // V8_DEBUG_DEBUG_SCOPE_ITERATOR_H_ |