aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/objects-body-descriptors.h
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2018-09-21 09:14:51 +0200
committerMichaël Zasso <targos@protonmail.com>2018-09-22 18:29:25 +0200
commit0e7ddbd3d7e9439c67573b854c49cf82c398ae82 (patch)
tree2afe372acde921cb57ddb3444ff00c5adef8848c /deps/v8/src/objects-body-descriptors.h
parent13245dc50da4cb7443c39ef6c68d419d5e6336d4 (diff)
downloadandroid-node-v8-0e7ddbd3d7e9439c67573b854c49cf82c398ae82.tar.gz
android-node-v8-0e7ddbd3d7e9439c67573b854c49cf82c398ae82.tar.bz2
android-node-v8-0e7ddbd3d7e9439c67573b854c49cf82c398ae82.zip
deps: update V8 to 7.0.276.20
PR-URL: https://github.com/nodejs/node/pull/22754 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'deps/v8/src/objects-body-descriptors.h')
-rw-r--r--deps/v8/src/objects-body-descriptors.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/deps/v8/src/objects-body-descriptors.h b/deps/v8/src/objects-body-descriptors.h
index d6baf86e11..6277f9d8bd 100644
--- a/deps/v8/src/objects-body-descriptors.h
+++ b/deps/v8/src/objects-body-descriptors.h
@@ -109,6 +109,43 @@ class FlexibleBodyDescriptor final : public BodyDescriptorBase {
typedef FlexibleBodyDescriptor<HeapObject::kHeaderSize> StructBodyDescriptor;
+// This class describes a body of an object which has a parent class that also
+// has a body descriptor. This represents a union of the parent's body
+// descriptor, and a new descriptor for the child -- so, both parent and child's
+// slots are iterated. The parent must be fixed size, and its slots be disjoint
+// with the child's.
+template <class ParentBodyDescriptor, class ChildBodyDescriptor>
+class SubclassBodyDescriptor final : public BodyDescriptorBase {
+ public:
+ // The parent must end be before the child's start offset, to make sure that
+ // their slots are disjoint.
+ STATIC_ASSERT(ParentBodyDescriptor::kSize <=
+ ChildBodyDescriptor::kStartOffset);
+
+ static bool IsValidSlot(Map* map, HeapObject* obj, int offset) {
+ return ParentBodyDescriptor::IsValidSlot(map, obj, offset) ||
+ ChildBodyDescriptor::IsValidSlot(map, obj, offset);
+ }
+
+ template <typename ObjectVisitor>
+ static inline void IterateBody(Map* map, HeapObject* obj, ObjectVisitor* v) {
+ ParentBodyDescriptor::IterateBody(map, obj, v);
+ ChildBodyDescriptor::IterateBody(map, obj, v);
+ }
+
+ template <typename ObjectVisitor>
+ static inline void IterateBody(Map* map, HeapObject* obj, int object_size,
+ ObjectVisitor* v) {
+ ParentBodyDescriptor::IterateBody(map, obj, object_size, v);
+ ChildBodyDescriptor::IterateBody(map, obj, object_size, v);
+ }
+
+ static inline int SizeOf(Map* map, HeapObject* object) {
+ // The child should know its full size.
+ return ChildBodyDescriptor::SizeOf(map, object);
+ }
+};
+
} // namespace internal
} // namespace v8