diff options
author | Michaël Zasso <targos@protonmail.com> | 2019-08-01 08:38:30 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2019-08-01 12:53:56 +0200 |
commit | 2dcc3665abf57c3607cebffdeeca062f5894885d (patch) | |
tree | 4f560748132edcfb4c22d6f967a7e80d23d7ea2c /deps/v8/src/objects/prototype.h | |
parent | 1ee47d550c6de132f06110aa13eceb7551d643b3 (diff) | |
download | android-node-v8-2dcc3665abf57c3607cebffdeeca062f5894885d.tar.gz android-node-v8-2dcc3665abf57c3607cebffdeeca062f5894885d.tar.bz2 android-node-v8-2dcc3665abf57c3607cebffdeeca062f5894885d.zip |
deps: update V8 to 7.6.303.28
PR-URL: https://github.com/nodejs/node/pull/28016
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Refael Ackermann (רפאל פלחי) <refack@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Diffstat (limited to 'deps/v8/src/objects/prototype.h')
-rw-r--r-- | deps/v8/src/objects/prototype.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/deps/v8/src/objects/prototype.h b/deps/v8/src/objects/prototype.h new file mode 100644 index 0000000000..cd003837ca --- /dev/null +++ b/deps/v8/src/objects/prototype.h @@ -0,0 +1,89 @@ +// Copyright 2014 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_OBJECTS_PROTOTYPE_H_ +#define V8_OBJECTS_PROTOTYPE_H_ + +#include "src/execution/isolate.h" +#include "src/objects/objects.h" + +namespace v8 { +namespace internal { + +/** + * A class to uniformly access the prototype of any Object and walk its + * prototype chain. + * + * The PrototypeIterator can either start at the prototype (default), or + * include the receiver itself. If a PrototypeIterator is constructed for a + * Map, it will always start at the prototype. + * + * The PrototypeIterator can either run to the null_value(), the first + * non-hidden prototype, or a given object. + */ + +class PrototypeIterator { + public: + enum WhereToEnd { END_AT_NULL, END_AT_NON_HIDDEN }; + + inline PrototypeIterator(Isolate* isolate, Handle<JSReceiver> receiver, + WhereToStart where_to_start = kStartAtPrototype, + WhereToEnd where_to_end = END_AT_NULL); + + inline PrototypeIterator(Isolate* isolate, JSReceiver receiver, + WhereToStart where_to_start = kStartAtPrototype, + WhereToEnd where_to_end = END_AT_NULL); + + inline explicit PrototypeIterator(Isolate* isolate, Map receiver_map, + WhereToEnd where_to_end = END_AT_NULL); + + inline explicit PrototypeIterator(Isolate* isolate, Handle<Map> receiver_map, + WhereToEnd where_to_end = END_AT_NULL); + + ~PrototypeIterator() = default; + + inline bool HasAccess() const; + + template <typename T = HeapObject> + T GetCurrent() const { + DCHECK(handle_.is_null()); + return T::cast(object_); + } + + template <typename T = HeapObject> + static Handle<T> GetCurrent(const PrototypeIterator& iterator) { + DCHECK(!iterator.handle_.is_null()); + DCHECK_EQ(iterator.object_, Object()); + return Handle<T>::cast(iterator.handle_); + } + + inline void Advance(); + + inline void AdvanceIgnoringProxies(); + + // Returns false iff a call to JSProxy::GetPrototype throws. + V8_WARN_UNUSED_RESULT inline bool AdvanceFollowingProxies(); + + V8_WARN_UNUSED_RESULT inline bool + AdvanceFollowingProxiesIgnoringAccessChecks(); + + bool IsAtEnd() const { return is_at_end_; } + Isolate* isolate() const { return isolate_; } + + private: + Isolate* isolate_; + Object object_; + Handle<HeapObject> handle_; + WhereToEnd where_to_end_; + bool is_at_end_; + int seen_proxies_; + + DISALLOW_COPY_AND_ASSIGN(PrototypeIterator); +}; + +} // namespace internal + +} // namespace v8 + +#endif // V8_OBJECTS_PROTOTYPE_H_ |