Index: src/objects.cc |
=================================================================== |
--- src/objects.cc (revision 1489) |
+++ src/objects.cc (working copy) |
@@ -4888,6 +4888,22 @@ |
} |
+void JSArray::EnsureSize(int required_size) { |
+ Handle<JSArray> self(this); |
+ ASSERT(HasFastElements()); |
+ if (elements()->length() >= required_size) return; |
+ Handle<FixedArray> old_backing(elements()); |
+ int old_size = old_backing->length(); |
+ // Doubling in size would be overkill, but leave some slack to avoid |
+ // constantly growing. |
+ int new_size = required_size + (required_size >> 3); |
+ Handle<FixedArray> new_backing = Factory::NewFixedArray(new_size); |
+ // Can't use this any more now because we may have had a GC! |
+ for (int i = 0; i < old_size; i++) new_backing->set(i, old_backing->get(i)); |
+ self->SetContent(*new_backing); |
+} |
+ |
+ |
// Computes the new capacity when expanding the elements of a JSObject. |
static int NewElementsCapacity(int old_capacity) { |
// (old_capacity + 50%) + 16 |