Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(713)

Unified Diff: src/objects.cc

Issue 47703003: Make Object.freeze/seal/preventExtensions observable (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: whitespace Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698