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 "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/allocation-site-scopes.h" | 8 #include "src/allocation-site-scopes.h" |
9 #include "src/api.h" | 9 #include "src/api.h" |
10 #include "src/arguments.h" | 10 #include "src/arguments.h" |
(...skipping 4839 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4850 | 4850 |
4851 object->set_properties(*fields); | 4851 object->set_properties(*fields); |
4852 ASSERT(object->IsJSObject()); | 4852 ASSERT(object->IsJSObject()); |
4853 | 4853 |
4854 // Check that it really works. | 4854 // Check that it really works. |
4855 ASSERT(object->HasFastProperties()); | 4855 ASSERT(object->HasFastProperties()); |
4856 } | 4856 } |
4857 | 4857 |
4858 | 4858 |
4859 void JSObject::ResetElements(Handle<JSObject> object) { | 4859 void JSObject::ResetElements(Handle<JSObject> object) { |
4860 if (object->map()->is_observed()) { | 4860 Heap* heap = object->GetIsolate()->heap(); |
4861 // Maintain invariant that observed elements are always in dictionary mode. | 4861 CHECK(object->map() != heap->sloppy_arguments_elements_map()); |
4862 Isolate* isolate = object->GetIsolate(); | 4862 object->set_elements(object->map()->GetInitialElements()); |
4863 Factory* factory = isolate->factory(); | |
4864 Handle<SeededNumberDictionary> dictionary = | |
4865 SeededNumberDictionary::New(isolate, 0); | |
4866 if (object->map() == *factory->sloppy_arguments_elements_map()) { | |
4867 FixedArray::cast(object->elements())->set(1, *dictionary); | |
4868 } else { | |
4869 object->set_elements(*dictionary); | |
4870 } | |
4871 return; | |
4872 } | |
4873 | |
4874 ElementsKind elements_kind = GetInitialFastElementsKind(); | |
4875 if (!FLAG_smi_only_arrays) { | |
4876 elements_kind = FastSmiToObjectElementsKind(elements_kind); | |
4877 } | |
4878 Handle<Map> map = JSObject::GetElementsTransitionMap(object, elements_kind); | |
4879 DisallowHeapAllocation no_gc; | |
4880 Handle<FixedArrayBase> elements(map->GetInitialElements()); | |
4881 JSObject::SetMapAndElements(object, map, elements); | |
4882 } | 4863 } |
4883 | 4864 |
4884 | 4865 |
4885 static Handle<SeededNumberDictionary> CopyFastElementsToDictionary( | 4866 static Handle<SeededNumberDictionary> CopyFastElementsToDictionary( |
4886 Handle<FixedArrayBase> array, | 4867 Handle<FixedArrayBase> array, |
4887 int length, | 4868 int length, |
4888 Handle<SeededNumberDictionary> dictionary) { | 4869 Handle<SeededNumberDictionary> dictionary) { |
4889 Isolate* isolate = array->GetIsolate(); | 4870 Isolate* isolate = array->GetIsolate(); |
4890 Factory* factory = isolate->factory(); | 4871 Factory* factory = isolate->factory(); |
4891 bool has_double_elements = array->IsFixedDoubleArray(); | 4872 bool has_double_elements = array->IsFixedDoubleArray(); |
(...skipping 12202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
17094 #define ERROR_MESSAGES_TEXTS(C, T) T, | 17075 #define ERROR_MESSAGES_TEXTS(C, T) T, |
17095 static const char* error_messages_[] = { | 17076 static const char* error_messages_[] = { |
17096 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 17077 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
17097 }; | 17078 }; |
17098 #undef ERROR_MESSAGES_TEXTS | 17079 #undef ERROR_MESSAGES_TEXTS |
17099 return error_messages_[reason]; | 17080 return error_messages_[reason]; |
17100 } | 17081 } |
17101 | 17082 |
17102 | 17083 |
17103 } } // namespace v8::internal | 17084 } } // namespace v8::internal |
OLD | NEW |