aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/objects/prototype.h
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2019-08-01 08:38:30 +0200
committerMichaël Zasso <targos@protonmail.com>2019-08-01 12:53:56 +0200
commit2dcc3665abf57c3607cebffdeeca062f5894885d (patch)
tree4f560748132edcfb4c22d6f967a7e80d23d7ea2c /deps/v8/src/objects/prototype.h
parent1ee47d550c6de132f06110aa13eceb7551d643b3 (diff)
downloadandroid-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.h89
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_