| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 9396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9407 index_offset_ += delta; | 9407 index_offset_ += delta; |
| 9408 } | 9408 } |
| 9409 } | 9409 } |
| 9410 | 9410 |
| 9411 Handle<JSArray> ToArray() { | 9411 Handle<JSArray> ToArray() { |
| 9412 Handle<JSArray> array = isolate_->factory()->NewJSArray(0); | 9412 Handle<JSArray> array = isolate_->factory()->NewJSArray(0); |
| 9413 Handle<Object> length = | 9413 Handle<Object> length = |
| 9414 isolate_->factory()->NewNumber(static_cast<double>(index_offset_)); | 9414 isolate_->factory()->NewNumber(static_cast<double>(index_offset_)); |
| 9415 Handle<Map> map; | 9415 Handle<Map> map; |
| 9416 if (fast_elements_) { | 9416 if (fast_elements_) { |
| 9417 map = isolate_->factory()->GetFastElementsMap(Handle<Map>(array->map())); | 9417 map = isolate_->factory()->GetElementsTransitionMap(array, |
| 9418 FAST_ELEMENTS); |
| 9418 } else { | 9419 } else { |
| 9419 map = isolate_->factory()->GetSlowElementsMap(Handle<Map>(array->map())); | 9420 map = isolate_->factory()->GetElementsTransitionMap(array, |
| 9421 DICTIONARY_ELEMENTS); |
| 9420 } | 9422 } |
| 9421 array->set_map(*map); | 9423 array->set_map(*map); |
| 9422 array->set_length(*length); | 9424 array->set_length(*length); |
| 9423 array->set_elements(*storage_); | 9425 array->set_elements(*storage_); |
| 9424 return array; | 9426 return array; |
| 9425 } | 9427 } |
| 9426 | 9428 |
| 9427 private: | 9429 private: |
| 9428 // Convert storage to dictionary mode. | 9430 // Convert storage to dictionary mode. |
| 9429 void SetDictionaryMode(uint32_t index) { | 9431 void SetDictionaryMode(uint32_t index) { |
| (...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9900 } | 9902 } |
| 9901 | 9903 |
| 9902 | 9904 |
| 9903 // Move contents of argument 0 (an array) to argument 1 (an array) | 9905 // Move contents of argument 0 (an array) to argument 1 (an array) |
| 9904 RUNTIME_FUNCTION(MaybeObject*, Runtime_MoveArrayContents) { | 9906 RUNTIME_FUNCTION(MaybeObject*, Runtime_MoveArrayContents) { |
| 9905 ASSERT(args.length() == 2); | 9907 ASSERT(args.length() == 2); |
| 9906 CONVERT_CHECKED(JSArray, from, args[0]); | 9908 CONVERT_CHECKED(JSArray, from, args[0]); |
| 9907 CONVERT_CHECKED(JSArray, to, args[1]); | 9909 CONVERT_CHECKED(JSArray, to, args[1]); |
| 9908 FixedArrayBase* new_elements = from->elements(); | 9910 FixedArrayBase* new_elements = from->elements(); |
| 9909 MaybeObject* maybe_new_map; | 9911 MaybeObject* maybe_new_map; |
| 9912 ElementsKind elements_kind; |
| 9910 if (new_elements->map() == isolate->heap()->fixed_array_map() || | 9913 if (new_elements->map() == isolate->heap()->fixed_array_map() || |
| 9911 new_elements->map() == isolate->heap()->fixed_cow_array_map()) { | 9914 new_elements->map() == isolate->heap()->fixed_cow_array_map()) { |
| 9912 maybe_new_map = to->map()->GetFastElementsMap(); | 9915 elements_kind = FAST_ELEMENTS; |
| 9913 } else if (new_elements->map() == | 9916 } else if (new_elements->map() == |
| 9914 isolate->heap()->fixed_double_array_map()) { | 9917 isolate->heap()->fixed_double_array_map()) { |
| 9915 maybe_new_map = to->map()->GetFastDoubleElementsMap(); | 9918 elements_kind = FAST_DOUBLE_ELEMENTS; |
| 9916 } else { | 9919 } else { |
| 9917 maybe_new_map = to->map()->GetSlowElementsMap(); | 9920 elements_kind = DICTIONARY_ELEMENTS; |
| 9918 } | 9921 } |
| 9922 maybe_new_map = to->GetElementsTransitionMap(elements_kind); |
| 9919 Object* new_map; | 9923 Object* new_map; |
| 9920 if (!maybe_new_map->ToObject(&new_map)) return maybe_new_map; | 9924 if (!maybe_new_map->ToObject(&new_map)) return maybe_new_map; |
| 9921 to->set_map(Map::cast(new_map)); | 9925 to->set_map(Map::cast(new_map)); |
| 9922 to->set_elements(new_elements); | 9926 to->set_elements(new_elements); |
| 9923 to->set_length(from->length()); | 9927 to->set_length(from->length()); |
| 9924 Object* obj; | 9928 Object* obj; |
| 9925 { MaybeObject* maybe_obj = from->ResetElements(); | 9929 { MaybeObject* maybe_obj = from->ResetElements(); |
| 9926 if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 9930 if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
| 9927 } | 9931 } |
| 9928 from->set_length(Smi::FromInt(0)); | 9932 from->set_length(Smi::FromInt(0)); |
| (...skipping 3211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13140 } else { | 13144 } else { |
| 13141 // Handle last resort GC and make sure to allow future allocations | 13145 // Handle last resort GC and make sure to allow future allocations |
| 13142 // to grow the heap without causing GCs (if possible). | 13146 // to grow the heap without causing GCs (if possible). |
| 13143 isolate->counters()->gc_last_resort_from_js()->Increment(); | 13147 isolate->counters()->gc_last_resort_from_js()->Increment(); |
| 13144 isolate->heap()->CollectAllGarbage(false); | 13148 isolate->heap()->CollectAllGarbage(false); |
| 13145 } | 13149 } |
| 13146 } | 13150 } |
| 13147 | 13151 |
| 13148 | 13152 |
| 13149 } } // namespace v8::internal | 13153 } } // namespace v8::internal |
| OLD | NEW |