diff options
author | Michaël Zasso <targos@protonmail.com> | 2018-09-21 09:14:51 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2018-09-22 18:29:25 +0200 |
commit | 0e7ddbd3d7e9439c67573b854c49cf82c398ae82 (patch) | |
tree | 2afe372acde921cb57ddb3444ff00c5adef8848c /deps/v8/src/objects-body-descriptors.h | |
parent | 13245dc50da4cb7443c39ef6c68d419d5e6336d4 (diff) | |
download | android-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.h | 37 |
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 |