| Index: src/heap/heap.cc
|
| diff --git a/src/heap/heap.cc b/src/heap/heap.cc
|
| index a2daab0925c8aed2c30842bf041bdf4583d60bdd..1cc4eb5442e26ad3b928eb0ba341d8a4fdc19bb5 100644
|
| --- a/src/heap/heap.cc
|
| +++ b/src/heap/heap.cc
|
| @@ -1554,15 +1554,12 @@ static bool IsUnmodifiedHeapObject(Object** p) {
|
| if (object->IsSmi()) return false;
|
| HeapObject* heap_object = HeapObject::cast(object);
|
| if (!object->IsJSObject()) return false;
|
| - Object* obj_constructor = (JSObject::cast(object))->map()->GetConstructor();
|
| - if (!obj_constructor->IsJSFunction()) return false;
|
| - JSFunction* constructor = JSFunction::cast(obj_constructor);
|
| - if (!constructor->shared()->IsApiFunction()) return false;
|
| - if (constructor != nullptr &&
|
| - constructor->initial_map() == heap_object->map()) {
|
| - return true;
|
| - }
|
| - return false;
|
| + JSObject* js_object = JSObject::cast(object);
|
| + if (!js_object->WasConstructedFromApiFunction()) return false;
|
| + JSFunction* constructor =
|
| + JSFunction::cast(js_object->map()->GetConstructor());
|
| +
|
| + return constructor->initial_map() == heap_object->map();
|
| }
|
|
|
|
|
| @@ -3589,6 +3586,7 @@ AllocationResult Heap::CopyJSObject(JSObject* source, AllocationSite* site) {
|
| CHECK(map->instance_type() == JS_REGEXP_TYPE ||
|
| map->instance_type() == JS_OBJECT_TYPE ||
|
| map->instance_type() == JS_ARRAY_TYPE ||
|
| + map->instance_type() == JS_API_OBJECT_TYPE ||
|
| map->instance_type() == JS_SPECIAL_API_OBJECT_TYPE);
|
|
|
| int object_size = map->instance_size();
|
| @@ -5369,6 +5367,24 @@ void Heap::NotifyDeserializationComplete() {
|
| #endif // DEBUG
|
| }
|
|
|
| +void Heap::SetEmbedderHeapTracer(EmbedderHeapTracer* tracer) {
|
| + DCHECK_NOT_NULL(tracer);
|
| + CHECK_NULL(embedder_heap_tracer_);
|
| + embedder_heap_tracer_ = tracer;
|
| +}
|
| +
|
| +void Heap::TracePossibleWrapper(JSObject* js_object) {
|
| + DCHECK(js_object->WasConstructedFromApiFunction());
|
| + if (js_object->GetInternalFieldCount() >= 2 &&
|
| + js_object->GetInternalField(0) != undefined_value() &&
|
| + js_object->GetInternalField(1) != undefined_value()) {
|
| + mark_compact_collector()->wrappers_to_trace().push_back(
|
| + std::pair<Data*, Data*>(
|
| + reinterpret_cast<Data*>(js_object->GetInternalField(0)),
|
| + reinterpret_cast<Data*>(js_object->GetInternalField(1))));
|
| + }
|
| +}
|
| +
|
| void Heap::RegisterExternallyReferencedObject(Object** object) {
|
| DCHECK(mark_compact_collector()->in_use());
|
| HeapObject* heap_object = HeapObject::cast(*object);
|
| @@ -5544,12 +5560,6 @@ void Heap::RemoveGCEpilogueCallback(v8::Isolate::GCCallback callback) {
|
| UNREACHABLE();
|
| }
|
|
|
| -void Heap::SetEmbedderHeapTracer(EmbedderHeapTracer* tracer) {
|
| - DCHECK_NOT_NULL(tracer);
|
| - CHECK_NULL(embedder_heap_tracer_);
|
| - embedder_heap_tracer_ = tracer;
|
| -}
|
| -
|
| // TODO(ishell): Find a better place for this.
|
| void Heap::AddWeakObjectToCodeDependency(Handle<HeapObject> obj,
|
| Handle<DependentCode> dep) {
|
|
|