| // Copyright 2018 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_PROPERTY_ITERATOR_H_ |
| #define V8_DEBUG_DEBUG_PROPERTY_ITERATOR_H_ |
| |
| #include "src/debug/debug-interface.h" |
| #include "src/execution/isolate.h" |
| #include "src/handles/handles.h" |
| #include "src/objects/prototype.h" |
| |
| #include "include/v8.h" |
| |
| namespace v8 { |
| namespace internal { |
| |
| class JSReceiver; |
| |
| class DebugPropertyIterator final : public debug::PropertyIterator { |
| public: |
| DebugPropertyIterator(Isolate* isolate, Handle<JSReceiver> receiver); |
| ~DebugPropertyIterator() override = default; |
| |
| bool Done() const override; |
| void Advance() override; |
| |
| v8::Local<v8::Name> name() const override; |
| bool is_native_accessor() override; |
| bool has_native_getter() override; |
| bool has_native_setter() override; |
| v8::Maybe<v8::PropertyAttribute> attributes() override; |
| v8::Maybe<v8::debug::PropertyDescriptor> descriptor() override; |
| |
| bool is_own() override; |
| bool is_array_index() override; |
| |
| private: |
| void FillKeysForCurrentPrototypeAndStage(); |
| bool should_move_to_next_stage() const; |
| void CalculateNativeAccessorFlags(); |
| Handle<Name> raw_name() const; |
| |
| Isolate* isolate_; |
| PrototypeIterator prototype_iterator_; |
| enum Stage { kExoticIndices = 0, kEnumerableStrings = 1, kAllProperties = 2 }; |
| Stage stage_ = kExoticIndices; |
| |
| size_t current_key_index_ = 0; |
| Handle<FixedArray> keys_; |
| size_t exotic_length_ = 0; |
| |
| bool calculated_native_accessor_flags_ = false; |
| int native_accessor_flags_ = 0; |
| bool is_own_ = true; |
| |
| DISALLOW_COPY_AND_ASSIGN(DebugPropertyIterator); |
| }; |
| } // namespace internal |
| } // namespace v8 |
| |
| #endif // V8_DEBUG_DEBUG_PROPERTY_ITERATOR_H_ |