| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 6e25e624a9110d2ebe307eb653942c49bc98fe12..f96fd83849cff3090814484757f26b352932bc87 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -120,6 +120,17 @@ bool Object::BooleanValue() {
|
| }
|
|
|
|
|
| +bool Object::IsCallable() {
|
| + Object* fun = this;
|
| + while (fun->IsJSFunctionProxy()) {
|
| + fun = JSFunctionProxy::cast(fun)->call_trap();
|
| + }
|
| + return fun->IsJSFunction() ||
|
| + (fun->IsHeapObject() &&
|
| + HeapObject::cast(fun)->map()->has_instance_call_handler());
|
| +}
|
| +
|
| +
|
| void Object::Lookup(Name* name, LookupResult* result) {
|
| Object* holder = NULL;
|
| if (IsJSReceiver()) {
|
| @@ -2218,21 +2229,6 @@ void JSObject::EnqueueChangeRecord(Handle<JSObject> object,
|
| }
|
|
|
|
|
| -void JSObject::DeliverChangeRecords(Isolate* isolate) {
|
| - ASSERT(isolate->observer_delivery_pending());
|
| - bool threw = false;
|
| - Execution::Call(
|
| - isolate,
|
| - isolate->observers_deliver_changes(),
|
| - isolate->factory()->undefined_value(),
|
| - 0,
|
| - NULL,
|
| - &threw);
|
| - ASSERT(!threw);
|
| - isolate->set_observer_delivery_pending(false);
|
| -}
|
| -
|
| -
|
| Handle<Object> JSObject::SetPropertyPostInterceptor(
|
| Handle<JSObject> object,
|
| Handle<Name> name,
|
| @@ -5718,10 +5714,7 @@ Handle<JSObject> JSObjectWalkVisitor<ContextObject>::StructureWalk(
|
| Handle<JSObject> copy;
|
| if (copying) {
|
| Handle<AllocationSite> site_to_pass;
|
| - if (site_context()->activated() &&
|
| - AllocationSite::CanTrack(object->map()->instance_type()) &&
|
| - AllocationSite::GetMode(object->GetElementsKind()) ==
|
| - TRACK_ALLOCATION_SITE) {
|
| + if (site_context()->ShouldCreateMemento(object)) {
|
| site_to_pass = site_context()->current();
|
| }
|
| CALL_AND_RETRY_OR_DIE(isolate,
|
| @@ -9181,9 +9174,10 @@ Handle<String> SeqString::Truncate(Handle<SeqString> string, int new_length) {
|
| AllocationMemento* AllocationMemento::FindForJSObject(JSObject* object,
|
| bool in_GC) {
|
| // Currently, AllocationMemento objects are only allocated immediately
|
| - // after JSArrays in NewSpace, and detecting whether a JSArray has one
|
| - // involves carefully checking the object immediately after the JSArray
|
| - // (if there is one) to see if it's an AllocationMemento.
|
| + // after JSArrays and some JSObjects in NewSpace. Detecting whether a
|
| + // memento is present involves carefully checking the object immediately
|
| + // after the current object (if there is one) to see if it's an
|
| + // AllocationMemento.
|
| if (FLAG_track_allocation_sites && object->GetHeap()->InNewSpace(object)) {
|
| Address ptr_end = (reinterpret_cast<Address>(object) - kHeapObjectTag) +
|
| object->Size();
|
| @@ -9201,7 +9195,9 @@ AllocationMemento* AllocationMemento::FindForJSObject(JSObject* object,
|
| object->GetHeap()->allocation_memento_map()) {
|
| AllocationMemento* memento = AllocationMemento::cast(
|
| reinterpret_cast<Object*>(ptr_end + kHeapObjectTag));
|
| - return memento;
|
| + if (memento->IsValid()) {
|
| + return memento;
|
| + }
|
| }
|
| }
|
| }
|
| @@ -12789,6 +12785,9 @@ void JSObject::TransitionElementsKind(Handle<JSObject> object,
|
| }
|
|
|
|
|
| +const double AllocationSite::kPretenureRatio = 0.60;
|
| +
|
| +
|
| bool AllocationSite::IsNestedSite() {
|
| ASSERT(FLAG_trace_track_allocation_sites);
|
| Object* current = GetHeap()->allocation_sites_list();
|
|
|