LCOV - code coverage report
Current view: top level - src - prototype.h (source / functions) Hit Total Coverage
Test: app.info Lines: 0 2 0.0 %
Date: 2019-04-19 Functions: 0 1 0.0 %

          Line data    Source code
       1             : // Copyright 2014 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #ifndef V8_PROTOTYPE_H_
       6             : #define V8_PROTOTYPE_H_
       7             : 
       8             : #include "src/isolate.h"
       9             : #include "src/objects.h"
      10             : 
      11             : namespace v8 {
      12             : namespace internal {
      13             : 
      14             : /**
      15             :  * A class to uniformly access the prototype of any Object and walk its
      16             :  * prototype chain.
      17             :  *
      18             :  * The PrototypeIterator can either start at the prototype (default), or
      19             :  * include the receiver itself. If a PrototypeIterator is constructed for a
      20             :  * Map, it will always start at the prototype.
      21             :  *
      22             :  * The PrototypeIterator can either run to the null_value(), the first
      23             :  * non-hidden prototype, or a given object.
      24             :  */
      25             : 
      26             : class PrototypeIterator {
      27             :  public:
      28             :   enum WhereToEnd { END_AT_NULL, END_AT_NON_HIDDEN };
      29             : 
      30             :   inline PrototypeIterator(Isolate* isolate, Handle<JSReceiver> receiver,
      31             :                            WhereToStart where_to_start = kStartAtPrototype,
      32             :                            WhereToEnd where_to_end = END_AT_NULL);
      33             : 
      34             :   inline PrototypeIterator(Isolate* isolate, JSReceiver receiver,
      35             :                            WhereToStart where_to_start = kStartAtPrototype,
      36             :                            WhereToEnd where_to_end = END_AT_NULL);
      37             : 
      38             :   inline explicit PrototypeIterator(Isolate* isolate, Map receiver_map,
      39             :                                     WhereToEnd where_to_end = END_AT_NULL);
      40             : 
      41             :   inline explicit PrototypeIterator(Isolate* isolate, Handle<Map> receiver_map,
      42             :                                     WhereToEnd where_to_end = END_AT_NULL);
      43             : 
      44             :   ~PrototypeIterator() = default;
      45             : 
      46             :   inline bool HasAccess() const;
      47             : 
      48             :   template <typename T = HeapObject>
      49             :   T GetCurrent() const {
      50             :     DCHECK(handle_.is_null());
      51             :     return T::cast(object_);
      52             :   }
      53             : 
      54             :   template <typename T = HeapObject>
      55           0 :   static Handle<T> GetCurrent(const PrototypeIterator& iterator) {
      56             :     DCHECK(!iterator.handle_.is_null());
      57             :     DCHECK_EQ(iterator.object_, Object());
      58           0 :     return Handle<T>::cast(iterator.handle_);
      59             :   }
      60             : 
      61             :   inline void Advance();
      62             : 
      63             :   inline void AdvanceIgnoringProxies();
      64             : 
      65             :   // Returns false iff a call to JSProxy::GetPrototype throws.
      66             :   V8_WARN_UNUSED_RESULT inline bool AdvanceFollowingProxies();
      67             : 
      68             :   V8_WARN_UNUSED_RESULT inline bool
      69             :   AdvanceFollowingProxiesIgnoringAccessChecks();
      70             : 
      71             :   bool IsAtEnd() const { return is_at_end_; }
      72             :   Isolate* isolate() const { return isolate_; }
      73             : 
      74             :  private:
      75             :   Isolate* isolate_;
      76             :   Object object_;
      77             :   Handle<HeapObject> handle_;
      78             :   WhereToEnd where_to_end_;
      79             :   bool is_at_end_;
      80             :   int seen_proxies_;
      81             : 
      82             :   DISALLOW_COPY_AND_ASSIGN(PrototypeIterator);
      83             : };
      84             : 
      85             : 
      86             : }  // namespace internal
      87             : 
      88             : }  // namespace v8
      89             : 
      90             : #endif  // V8_PROTOTYPE_H_

Generated by: LCOV version 1.10