Version 3.5.3
MIPS: Port of fix to ClassOf check from ARM.
Patch from Paul Lind <plind44@gmail.com>.
Stopped using mprotect on Cygwin.
Avoided uninitialized member warning on gcc 4.3.4
Both patches by Bert Belder.
Bug fixes and performance improvements on all platforms.
Review URL: http://codereview.chromium.org/7565005
git-svn-id: http://v8.googlecode.com/svn/trunk@8812 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
diff --git a/src/runtime.cc b/src/runtime.cc
index f965276..8c43d64 100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -9590,6 +9590,9 @@
if (new_elements->map() == isolate->heap()->fixed_array_map() ||
new_elements->map() == isolate->heap()->fixed_cow_array_map()) {
maybe_new_map = to->map()->GetFastElementsMap();
+ } else if (new_elements->map() ==
+ isolate->heap()->fixed_double_array_map()) {
+ maybe_new_map = to->map()->GetFastDoubleElementsMap();
} else {
maybe_new_map = to->map()->GetSlowElementsMap();
}
@@ -9677,12 +9680,13 @@
}
return *isolate->factory()->NewJSArrayWithElements(keys);
} else {
- ASSERT(array->HasFastElements());
+ ASSERT(array->HasFastElements() || array->HasFastDoubleElements());
Handle<FixedArray> single_interval = isolate->factory()->NewFixedArray(2);
// -1 means start of array.
single_interval->set(0, Smi::FromInt(-1));
+ FixedArrayBase* elements = FixedArrayBase::cast(array->elements());
uint32_t actual_length =
- static_cast<uint32_t>(FixedArray::cast(array->elements())->length());
+ static_cast<uint32_t>(elements->length());
uint32_t min_length = actual_length < length ? actual_length : length;
Handle<Object> length_object =
isolate->factory()->NewNumber(static_cast<double>(min_length));