Merge V8 5.2.361.47 DO NOT MERGE
https://chromium.googlesource.com/v8/v8/+/5.2.361.47
FPIIM-449
Change-Id: Ibec421b85a9b88cb3a432ada642e469fe7e78346
(cherry picked from commit bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8)
diff --git a/src/heap/objects-visiting.h b/src/heap/objects-visiting.h
index 1fe8a17..4be40cd 100644
--- a/src/heap/objects-visiting.h
+++ b/src/heap/objects-visiting.h
@@ -58,6 +58,15 @@
V(JSObject8) \
V(JSObject9) \
V(JSObjectGeneric) \
+ V(JSApiObject2) \
+ V(JSApiObject3) \
+ V(JSApiObject4) \
+ V(JSApiObject5) \
+ V(JSApiObject6) \
+ V(JSApiObject7) \
+ V(JSApiObject8) \
+ V(JSApiObject9) \
+ V(JSApiObjectGeneric) \
V(Struct2) \
V(Struct3) \
V(Struct4) \
@@ -96,9 +105,10 @@
#define VISITOR_ID_ENUM_DECL(id) kVisit##id,
VISITOR_ID_LIST(VISITOR_ID_ENUM_DECL)
#undef VISITOR_ID_ENUM_DECL
- kVisitorIdCount,
+ kVisitorIdCount,
kVisitDataObject = kVisitDataObject2,
kVisitJSObject = kVisitJSObject2,
+ kVisitJSApiObject = kVisitJSApiObject2,
kVisitStruct = kVisitStruct2,
};
@@ -119,11 +129,12 @@
int object_size,
bool has_unboxed_fields) {
DCHECK((base == kVisitDataObject) || (base == kVisitStruct) ||
- (base == kVisitJSObject));
+ (base == kVisitJSObject) || (base == kVisitJSApiObject));
DCHECK(IsAligned(object_size, kPointerSize));
DCHECK(Heap::kMinObjectSizeInWords * kPointerSize <= object_size);
DCHECK(object_size <= Page::kMaxRegularHeapObjectSize);
- DCHECK(!has_unboxed_fields || (base == kVisitJSObject));
+ DCHECK(!has_unboxed_fields || (base == kVisitJSObject) ||
+ (base == kVisitJSApiObject));
if (has_unboxed_fields) return generic;
@@ -400,6 +411,28 @@
typedef FlexibleBodyVisitor<StaticVisitor, JSObject::BodyDescriptor, void>
JSObjectVisitor;
+ class JSApiObjectVisitor : AllStatic {
+ public:
+ template <int size>
+ static inline void VisitSpecialized(Map* map, HeapObject* object) {
+ TracePossibleWrapper(object);
+ JSObjectVisitor::template VisitSpecialized<size>(map, object);
+ }
+
+ INLINE(static void Visit(Map* map, HeapObject* object)) {
+ TracePossibleWrapper(object);
+ JSObjectVisitor::Visit(map, object);
+ }
+
+ private:
+ INLINE(static void TracePossibleWrapper(HeapObject* object)) {
+ if (object->GetHeap()->UsingEmbedderHeapTracer()) {
+ DCHECK(object->IsJSObject());
+ object->GetHeap()->TracePossibleWrapper(JSObject::cast(object));
+ }
+ }
+ };
+
typedef FlexibleBodyVisitor<StaticVisitor, StructBodyDescriptor, void>
StructObjectVisitor;