| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 4b84c9202871f3e0e53981d5056dd2923b7dffb2..570f6fbae4f7c0269db737c7e03ac6a33c0865df 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -1717,20 +1717,21 @@ MaybeObject* JSObject::AddProperty(String* name,
|
| if (!result->ToHandle(&hresult)) return result;
|
|
|
| if (FLAG_harmony_observation && map()->is_observed()) {
|
| - this->EnqueueChangeRecord(
|
| - "new", handle(name), handle(heap->the_hole_value()));
|
| + EnqueueChangeRecord(handle(this), "new", handle(name),
|
| + handle(heap->the_hole_value()));
|
| }
|
|
|
| return *hresult;
|
| }
|
|
|
|
|
| -void JSObject::EnqueueChangeRecord(
|
| - const char* type_str, Handle<String> name, Handle<Object> old_value) {
|
| - Isolate* isolate = GetIsolate();
|
| +void JSObject::EnqueueChangeRecord(Handle<JSObject> object,
|
| + const char* type_str,
|
| + Handle<String> name,
|
| + Handle<Object> old_value) {
|
| + Isolate* isolate = object->GetIsolate();
|
| HandleScope scope;
|
| Handle<String> type = isolate->factory()->LookupAsciiSymbol(type_str);
|
| - Handle<JSObject> object(this);
|
| Handle<Object> args[] = { type, object, name, old_value };
|
| bool threw;
|
| Execution::Call(Handle<JSFunction>(isolate->observers_notify_change()),
|
| @@ -2998,13 +2999,13 @@ MaybeObject* JSObject::SetPropertyForResult(LookupResult* lookup,
|
|
|
| if (FLAG_harmony_observation && map()->is_observed()) {
|
| if (lookup->IsTransition()) {
|
| - self->EnqueueChangeRecord("new", name, old_value);
|
| + EnqueueChangeRecord(self, "new", name, old_value);
|
| } else {
|
| LookupResult new_lookup(self->GetIsolate());
|
| self->LocalLookup(*name, &new_lookup);
|
| ASSERT(!new_lookup.GetLazyValue()->IsTheHole());
|
| if (!new_lookup.GetLazyValue()->SameValue(*old_value)) {
|
| - self->EnqueueChangeRecord("updated", name, old_value);
|
| + EnqueueChangeRecord(self, "updated", name, old_value);
|
| }
|
| }
|
| }
|
| @@ -3146,16 +3147,16 @@ MaybeObject* JSObject::SetLocalPropertyIgnoreAttributes(
|
|
|
| if (FLAG_harmony_observation && map()->is_observed()) {
|
| if (lookup.IsTransition()) {
|
| - self->EnqueueChangeRecord("new", name, old_value);
|
| + EnqueueChangeRecord(self, "new", name, old_value);
|
| } else {
|
| LookupResult new_lookup(isolate);
|
| self->LocalLookup(*name, &new_lookup);
|
| ASSERT(!new_lookup.GetLazyValue()->IsTheHole());
|
| if (old_value->IsTheHole() ||
|
| new_lookup.GetAttributes() != old_attributes) {
|
| - self->EnqueueChangeRecord("reconfigured", name, old_value);
|
| + EnqueueChangeRecord(self, "reconfigured", name, old_value);
|
| } else if (!new_lookup.GetLazyValue()->SameValue(*old_value)) {
|
| - self->EnqueueChangeRecord("updated", name, old_value);
|
| + EnqueueChangeRecord(self, "updated", name, old_value);
|
| }
|
| }
|
| }
|
| @@ -4152,7 +4153,7 @@ MaybeObject* JSObject::DeleteElement(uint32_t index, DeleteMode mode) {
|
|
|
| if (FLAG_harmony_observation && map()->is_observed()) {
|
| if (preexists && !self->HasLocalElement(index))
|
| - self->EnqueueChangeRecord("deleted", name, old_value);
|
| + EnqueueChangeRecord(self, "deleted", name, old_value);
|
| }
|
|
|
| return *hresult;
|
| @@ -4239,7 +4240,7 @@ MaybeObject* JSObject::DeleteProperty(String* name, DeleteMode mode) {
|
|
|
| if (FLAG_harmony_observation && map()->is_observed()) {
|
| if (!self->HasLocalProperty(*hname))
|
| - self->EnqueueChangeRecord("deleted", hname, old_value);
|
| + EnqueueChangeRecord(self, "deleted", hname, old_value);
|
| }
|
|
|
| return *hresult;
|
| @@ -4906,7 +4907,7 @@ MaybeObject* JSObject::DefineAccessor(String* name_raw,
|
|
|
| if (FLAG_harmony_observation && map()->is_observed()) {
|
| const char* type = preexists ? "reconfigured" : "new";
|
| - self->EnqueueChangeRecord(type, name, old_value);
|
| + EnqueueChangeRecord(self, type, name, old_value);
|
| }
|
|
|
| return *hresult;
|
| @@ -10331,13 +10332,13 @@ MaybeObject* JSObject::SetElement(uint32_t index,
|
| if (FLAG_harmony_observation && map()->is_observed()) {
|
| PropertyAttributes new_attributes = self->GetLocalPropertyAttribute(*name);
|
| if (!preexists) {
|
| - self->EnqueueChangeRecord("new", name, old_value);
|
| + EnqueueChangeRecord(self, "new", name, old_value);
|
| } else if (new_attributes != old_attributes || old_value->IsTheHole()) {
|
| - self->EnqueueChangeRecord("reconfigured", name, old_value);
|
| + EnqueueChangeRecord(self, "reconfigured", name, old_value);
|
| } else {
|
| Handle<Object> newValue = Object::GetElement(self, index);
|
| if (!newValue->SameValue(*old_value))
|
| - self->EnqueueChangeRecord("updated", name, old_value);
|
| + EnqueueChangeRecord(self, "updated", name, old_value);
|
| }
|
| }
|
|
|
|
|