OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <iomanip> | 5 #include <iomanip> |
6 #include <sstream> | 6 #include <sstream> |
7 | 7 |
8 #include "src/v8.h" | 8 #include "src/v8.h" |
9 | 9 |
10 #include "src/accessors.h" | 10 #include "src/accessors.h" |
(...skipping 1900 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1911 // prototype chains involving it. | 1911 // prototype chains involving it. |
1912 InvalidatePrototypeChains(object->map()); | 1912 InvalidatePrototypeChains(object->map()); |
1913 Handle<Map> old_map(object->map()); | 1913 Handle<Map> old_map(object->map()); |
1914 | 1914 |
1915 // If the map was registered with its prototype before, ensure that it | 1915 // If the map was registered with its prototype before, ensure that it |
1916 // registers with its new prototype now. This preserves the invariant that | 1916 // registers with its new prototype now. This preserves the invariant that |
1917 // when a map on a prototype chain is registered with its prototype, then | 1917 // when a map on a prototype chain is registered with its prototype, then |
1918 // all prototypes further up the chain are also registered with their | 1918 // all prototypes further up the chain are also registered with their |
1919 // respective prototypes. | 1919 // respective prototypes. |
1920 Object* maybe_old_prototype = old_map->prototype(); | 1920 Object* maybe_old_prototype = old_map->prototype(); |
1921 if (maybe_old_prototype->IsJSObject()) { | 1921 if (FLAG_track_prototype_users && old_map->is_prototype_map() && |
| 1922 maybe_old_prototype->IsJSObject()) { |
1922 Handle<JSObject> old_prototype(JSObject::cast(maybe_old_prototype)); | 1923 Handle<JSObject> old_prototype(JSObject::cast(maybe_old_prototype)); |
1923 bool was_registered = | 1924 bool was_registered = |
1924 JSObject::UnregisterPrototypeUser(old_prototype, old_map); | 1925 JSObject::UnregisterPrototypeUser(old_prototype, old_map); |
1925 if (was_registered) { | 1926 if (was_registered) { |
1926 JSObject::LazyRegisterPrototypeUser(new_map, new_map->GetIsolate()); | 1927 JSObject::LazyRegisterPrototypeUser(new_map, new_map->GetIsolate()); |
1927 } | 1928 } |
1928 } | 1929 } |
1929 | 1930 |
1930 if (object->HasFastProperties()) { | 1931 if (object->HasFastProperties()) { |
1931 if (!new_map->is_dictionary_map()) { | 1932 if (!new_map->is_dictionary_map()) { |
(...skipping 15269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
17201 void PropertyCell::SetValueWithInvalidation(Handle<PropertyCell> cell, | 17202 void PropertyCell::SetValueWithInvalidation(Handle<PropertyCell> cell, |
17202 Handle<Object> new_value) { | 17203 Handle<Object> new_value) { |
17203 if (cell->value() != *new_value) { | 17204 if (cell->value() != *new_value) { |
17204 cell->set_value(*new_value); | 17205 cell->set_value(*new_value); |
17205 Isolate* isolate = cell->GetIsolate(); | 17206 Isolate* isolate = cell->GetIsolate(); |
17206 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 17207 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
17207 isolate, DependentCode::kPropertyCellChangedGroup); | 17208 isolate, DependentCode::kPropertyCellChangedGroup); |
17208 } | 17209 } |
17209 } | 17210 } |
17210 } } // namespace v8::internal | 17211 } } // namespace v8::internal |
OLD | NEW |