| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 5563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5574 // Make sure we never go back to the fast case | 5574 // Make sure we never go back to the fast case |
| 5575 dictionary->set_requires_slow_elements(); | 5575 dictionary->set_requires_slow_elements(); |
| 5576 // Freeze all elements in the dictionary | 5576 // Freeze all elements in the dictionary |
| 5577 FreezeDictionary(dictionary); | 5577 FreezeDictionary(dictionary); |
| 5578 } | 5578 } |
| 5579 | 5579 |
| 5580 return object; | 5580 return object; |
| 5581 } | 5581 } |
| 5582 | 5582 |
| 5583 | 5583 |
| 5584 MUST_USE_RESULT MaybeObject* JSObject::SetObserved(Isolate* isolate) { | 5584 void JSObject::SetObserved(Handle<JSObject> object) { |
| 5585 if (map()->is_observed()) | 5585 Isolate* isolate = object->GetIsolate(); |
| 5586 return isolate->heap()->undefined_value(); | |
| 5587 | 5586 |
| 5588 Heap* heap = isolate->heap(); | 5587 if (object->map()->is_observed()) |
| 5588 return; |
| 5589 | 5589 |
| 5590 if (!HasExternalArrayElements()) { | 5590 if (!object->HasExternalArrayElements()) { |
| 5591 // Go to dictionary mode, so that we don't skip map checks. | 5591 // Go to dictionary mode, so that we don't skip map checks. |
| 5592 MaybeObject* maybe = NormalizeElements(); | 5592 NormalizeElements(object); |
| 5593 if (maybe->IsFailure()) return maybe; | 5593 ASSERT(!object->HasFastElements()); |
| 5594 ASSERT(!HasFastElements()); | |
| 5595 } | 5594 } |
| 5596 | 5595 |
| 5597 LookupResult result(isolate); | 5596 LookupResult result(isolate); |
| 5598 map()->LookupTransition(this, heap->observed_symbol(), &result); | 5597 object->map()->LookupTransition(*object, |
| 5598 isolate->heap()->observed_symbol(), |
| 5599 &result); |
| 5599 | 5600 |
| 5600 Map* new_map; | 5601 Handle<Map> new_map; |
| 5601 if (result.IsTransition()) { | 5602 if (result.IsTransition()) { |
| 5602 new_map = result.GetTransitionTarget(); | 5603 new_map = handle(result.GetTransitionTarget()); |
| 5603 ASSERT(new_map->is_observed()); | 5604 ASSERT(new_map->is_observed()); |
| 5604 } else if (map()->CanHaveMoreTransitions()) { | 5605 } else if (object->map()->CanHaveMoreTransitions()) { |
| 5605 MaybeObject* maybe_new_map = map()->CopyForObserved(); | 5606 new_map = Map::CopyForObserved(handle(object->map())); |
| 5606 if (!maybe_new_map->To(&new_map)) return maybe_new_map; | |
| 5607 } else { | 5607 } else { |
| 5608 MaybeObject* maybe_copy = map()->Copy(); | 5608 new_map = Map::Copy(handle(object->map())); |
| 5609 if (!maybe_copy->To(&new_map)) return maybe_copy; | |
| 5610 new_map->set_is_observed(true); | 5609 new_map->set_is_observed(true); |
| 5611 } | 5610 } |
| 5612 set_map(new_map); | 5611 object->set_map(*new_map); |
| 5613 | |
| 5614 return heap->undefined_value(); | |
| 5615 } | 5612 } |
| 5616 | 5613 |
| 5617 | 5614 |
| 5618 Handle<JSObject> JSObject::Copy(Handle<JSObject> object) { | 5615 Handle<JSObject> JSObject::Copy(Handle<JSObject> object) { |
| 5619 Isolate* isolate = object->GetIsolate(); | 5616 Isolate* isolate = object->GetIsolate(); |
| 5620 CALL_HEAP_FUNCTION(isolate, | 5617 CALL_HEAP_FUNCTION(isolate, |
| 5621 isolate->heap()->CopyJSObject(*object), JSObject); | 5618 isolate->heap()->CopyJSObject(*object), JSObject); |
| 5622 } | 5619 } |
| 5623 | 5620 |
| 5624 | 5621 |
| (...skipping 1207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6832 if (insert_transition) { | 6829 if (insert_transition) { |
| 6833 MaybeObject* added_elements = set_elements_transition_map(new_map); | 6830 MaybeObject* added_elements = set_elements_transition_map(new_map); |
| 6834 if (added_elements->IsFailure()) return added_elements; | 6831 if (added_elements->IsFailure()) return added_elements; |
| 6835 new_map->SetBackPointer(this); | 6832 new_map->SetBackPointer(this); |
| 6836 } | 6833 } |
| 6837 | 6834 |
| 6838 return new_map; | 6835 return new_map; |
| 6839 } | 6836 } |
| 6840 | 6837 |
| 6841 | 6838 |
| 6839 Handle<Map> Map::CopyForObserved(Handle<Map> map) { |
| 6840 CALL_HEAP_FUNCTION(map->GetIsolate(), |
| 6841 map->CopyForObserved(), |
| 6842 Map); |
| 6843 } |
| 6844 |
| 6845 |
| 6842 MaybeObject* Map::CopyForObserved() { | 6846 MaybeObject* Map::CopyForObserved() { |
| 6843 ASSERT(!is_observed()); | 6847 ASSERT(!is_observed()); |
| 6844 | 6848 |
| 6845 // In case the map owned its own descriptors, share the descriptors and | 6849 // In case the map owned its own descriptors, share the descriptors and |
| 6846 // transfer ownership to the new map. | 6850 // transfer ownership to the new map. |
| 6847 Map* new_map; | 6851 Map* new_map; |
| 6848 MaybeObject* maybe_new_map; | 6852 MaybeObject* maybe_new_map; |
| 6849 if (owns_descriptors()) { | 6853 if (owns_descriptors()) { |
| 6850 maybe_new_map = CopyDropDescriptors(); | 6854 maybe_new_map = CopyDropDescriptors(); |
| 6851 } else { | 6855 } else { |
| (...skipping 9422 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16274 #define ERROR_MESSAGES_TEXTS(C, T) T, | 16278 #define ERROR_MESSAGES_TEXTS(C, T) T, |
| 16275 static const char* error_messages_[] = { | 16279 static const char* error_messages_[] = { |
| 16276 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 16280 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
| 16277 }; | 16281 }; |
| 16278 #undef ERROR_MESSAGES_TEXTS | 16282 #undef ERROR_MESSAGES_TEXTS |
| 16279 return error_messages_[reason]; | 16283 return error_messages_[reason]; |
| 16280 } | 16284 } |
| 16281 | 16285 |
| 16282 | 16286 |
| 16283 } } // namespace v8::internal | 16287 } } // namespace v8::internal |
| OLD | NEW |