| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index 1f52a225de9ceee3a4cefc1d0e1d1e8b785da2e4..1befdab5d76df1d1205c2b8c943ee6bf0f4536de 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -422,6 +422,9 @@ static Handle<Object> CreateObjectLiteralBoilerplate(
|
| }
|
|
|
|
|
| +static const int kSmiOnlyLiteralMinimumLength = 1024;
|
| +
|
| +
|
| static Handle<Object> CreateArrayLiteralBoilerplate(
|
| Isolate* isolate,
|
| Handle<FixedArray> literals,
|
| @@ -431,6 +434,13 @@ static Handle<Object> CreateArrayLiteralBoilerplate(
|
| JSFunction::GlobalContextFromLiterals(*literals)->array_function());
|
| Handle<Object> object = isolate->factory()->NewJSObject(constructor);
|
|
|
| + if (elements->length() > kSmiOnlyLiteralMinimumLength) {
|
| + Handle<Map> smi_array_map = isolate->factory()->GetElementsTransitionMap(
|
| + Handle<JSObject>::cast(object),
|
| + FAST_SMI_ONLY_ELEMENTS);
|
| + HeapObject::cast(*object)->set_map(*smi_array_map);
|
| + }
|
| +
|
| const bool is_cow =
|
| (elements->map() == isolate->heap()->fixed_cow_array_map());
|
| Handle<FixedArray> copied_elements =
|
| @@ -440,21 +450,18 @@ static Handle<Object> CreateArrayLiteralBoilerplate(
|
| bool has_non_smi = false;
|
| if (is_cow) {
|
| // Copy-on-write arrays must be shallow (and simple).
|
| - if (FLAG_smi_only_arrays) {
|
| - for (int i = 0; i < content->length(); i++) {
|
| - Object* current = content->get(i);
|
| - ASSERT(!current->IsFixedArray());
|
| - if (!current->IsSmi() && !current->IsTheHole()) {
|
| - has_non_smi = true;
|
| - }
|
| + for (int i = 0; i < content->length(); i++) {
|
| + Object* current = content->get(i);
|
| + ASSERT(!current->IsFixedArray());
|
| + if (!current->IsSmi() && !current->IsTheHole()) {
|
| + has_non_smi = true;
|
| }
|
| - } else {
|
| + }
|
| #if DEBUG
|
| - for (int i = 0; i < content->length(); i++) {
|
| - ASSERT(!content->get(i)->IsFixedArray());
|
| - }
|
| -#endif
|
| + for (int i = 0; i < content->length(); i++) {
|
| + ASSERT(!content->get(i)->IsFixedArray());
|
| }
|
| +#endif
|
| } else {
|
| for (int i = 0; i < content->length(); i++) {
|
| Object* current = content->get(i);
|
| @@ -479,10 +486,8 @@ static Handle<Object> CreateArrayLiteralBoilerplate(
|
| Handle<JSArray> js_object(Handle<JSArray>::cast(object));
|
| isolate->factory()->SetContent(js_object, content);
|
|
|
| - if (FLAG_smi_only_arrays) {
|
| - if (has_non_smi && js_object->HasFastSmiOnlyElements()) {
|
| - isolate->factory()->EnsureCanContainNonSmiElements(js_object);
|
| - }
|
| + if (has_non_smi && js_object->HasFastSmiOnlyElements()) {
|
| + isolate->factory()->EnsureCanContainNonSmiElements(js_object);
|
| }
|
|
|
| return object;
|
| @@ -1661,7 +1666,7 @@ RUNTIME_FUNCTION(MaybeObject*,
|
| RUNTIME_FUNCTION(MaybeObject*, Runtime_NonSmiElementStored) {
|
| ASSERT(args.length() == 1);
|
| CONVERT_ARG_CHECKED(JSObject, object, 0);
|
| - if (FLAG_smi_only_arrays && object->HasFastSmiOnlyElements()) {
|
| + if (object->HasFastSmiOnlyElements()) {
|
| MaybeObject* maybe_map = object->GetElementsTransitionMap(FAST_ELEMENTS);
|
| Map* map;
|
| if (!maybe_map->To<Map>(&map)) return maybe_map;
|
|
|