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; |