Chromium Code Reviews| 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; |
|
rossberg
2013/10/30 19:11:45
int argc = name.is_null() ? 2 : old_value->IsTheHo
rafaelw
2013/10/30 23:00:30
Done.
|
| + 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(), |
|
rossberg
2013/10/30 19:11:45
Nit: Handle<Name>() is enough
rafaelw
2013/10/30 23:00:30
Done.
|
| + 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; |