| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index f7c89175da75c2fb7916015a34adf9954b565eef..f520f9801df4422fe3f321652fb45b49385bebb3 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -2168,10 +2168,16 @@ void JSObject::EnqueueChangeRecord(Handle<JSObject> object,
|
| }
|
| Handle<Object> args[] = { type, object, name, old_value };
|
| bool threw;
|
| + int argc = 4;
|
| + if (name.is_null())
|
| + argc = 2;
|
| + else if (old_value->IsTheHole())
|
| + argc = 3;
|
| +
|
| Execution::Call(isolate,
|
| Handle<JSFunction>(isolate->observers_notify_change()),
|
| isolate->factory()->undefined_value(),
|
| - old_value->IsTheHole() ? 3 : 4, args,
|
| + argc, args,
|
| &threw);
|
| ASSERT(!threw);
|
| }
|
| @@ -5485,6 +5491,11 @@ Handle<Object> JSObject::PreventExtensions(Handle<JSObject> object) {
|
| new_map->set_is_extensible(false);
|
| object->set_map(*new_map);
|
| ASSERT(!object->map()->is_extensible());
|
| +
|
| + if (FLAG_harmony_observation && object->map()->is_observed()) {
|
| + EnqueueChangeRecord(object, "preventExtensions", Handle<Name>::null(),
|
| + isolate->factory()->the_hole_value());
|
| + }
|
| return object;
|
| }
|
|
|
| @@ -5513,6 +5524,7 @@ static void FreezeDictionary(Dictionary* dictionary) {
|
| Handle<Object> JSObject::Freeze(Handle<JSObject> object) {
|
| // Freezing non-strict arguments should be handled elsewhere.
|
| ASSERT(!object->HasNonStrictArgumentsElements());
|
| + ASSERT(!object->map()->is_observed());
|
|
|
| if (object->map()->is_frozen()) return object;
|
|
|
|
|