Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: src/builtins.cc

Issue 1697533002: [builtins] Remove superfluous fixed array allocation (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/builtins.h" 5 #include "src/builtins.h"
6 6
7 #include "src/api.h" 7 #include "src/api.h"
8 #include "src/api-natives.h" 8 #include "src/api-natives.h"
9 #include "src/arguments.h" 9 #include "src/arguments.h"
10 #include "src/base/once.h" 10 #include "src/base/once.h"
(...skipping 1834 matching lines...) Expand 10 before | Expand all | Expand 10 after
1845 // ES6 section 19.1.2.14 Object.keys ( O ) 1845 // ES6 section 19.1.2.14 Object.keys ( O )
1846 BUILTIN(ObjectKeys) { 1846 BUILTIN(ObjectKeys) {
1847 HandleScope scope(isolate); 1847 HandleScope scope(isolate);
1848 Handle<Object> object = args.atOrUndefined(isolate, 1); 1848 Handle<Object> object = args.atOrUndefined(isolate, 1);
1849 Handle<JSReceiver> receiver; 1849 Handle<JSReceiver> receiver;
1850 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, receiver, 1850 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, receiver,
1851 Object::ToObject(isolate, object)); 1851 Object::ToObject(isolate, object));
1852 1852
1853 Handle<FixedArray> keys; 1853 Handle<FixedArray> keys;
1854 int enum_length = receiver->map()->EnumLength(); 1854 int enum_length = receiver->map()->EnumLength();
1855 if (enum_length != kInvalidEnumCacheSentinel) { 1855 if (enum_length != kInvalidEnumCacheSentinel &&
1856 JSObject::cast(*receiver)->elements() ==
1857 isolate->heap()->empty_fixed_array()) {
Camillo Bruni 2016/02/12 13:04:21 Maybe add a HasNoElements helper at some point?
1856 DCHECK(receiver->IsJSObject()); 1858 DCHECK(receiver->IsJSObject());
1857 Handle<JSObject> js_object = Handle<JSObject>::cast(receiver); 1859 DCHECK(!JSObject::cast(*receiver)->HasNamedInterceptor());
1858 DCHECK(!js_object->HasNamedInterceptor()); 1860 DCHECK(!JSObject::cast(*receiver)->IsAccessCheckNeeded());
1859 DCHECK(!js_object->IsAccessCheckNeeded()); 1861 DCHECK(!receiver->map()->has_hidden_prototype());
1860 DCHECK(!js_object->map()->has_hidden_prototype()); 1862 DCHECK(JSObject::cast(*receiver)->HasFastProperties());
1861 DCHECK(js_object->HasFastProperties()); 1863 if (enum_length == 0) {
1862 if (js_object->elements() == isolate->heap()->empty_fixed_array()) { 1864 keys = isolate->factory()->empty_fixed_array();
1863 keys = isolate->factory()->NewFixedArray(enum_length); 1865 } else {
1864 if (enum_length != 0) { 1866 Handle<FixedArray> cache(
1865 Handle<FixedArray> cache( 1867 receiver->map()->instance_descriptors()->GetEnumCache());
1866 js_object->map()->instance_descriptors()->GetEnumCache()); 1868 keys = isolate->factory()->CopyFixedArrayUpTo(cache, enum_length);
Camillo Bruni 2016/02/12 13:04:21 This pattern probably as well... GetEnumCacheCopy
1867 keys = isolate->factory()->CopyFixedArrayUpTo(cache, enum_length);
1868 }
1869 } 1869 }
1870 } 1870 } else {
1871
1872 if (keys.is_null()) {
1873 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 1871 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
1874 isolate, keys, 1872 isolate, keys,
1875 JSReceiver::GetKeys(receiver, OWN_ONLY, ENUMERABLE_STRINGS, 1873 JSReceiver::GetKeys(receiver, OWN_ONLY, ENUMERABLE_STRINGS,
1876 CONVERT_TO_STRING)); 1874 CONVERT_TO_STRING));
1877 } 1875 }
1878 return *isolate->factory()->NewJSArrayWithElements(keys, FAST_ELEMENTS); 1876 return *isolate->factory()->NewJSArrayWithElements(keys, FAST_ELEMENTS);
1879 } 1877 }
1880 1878
1881 BUILTIN(ObjectValues) { 1879 BUILTIN(ObjectValues) {
1882 HandleScope scope(isolate); 1880 HandleScope scope(isolate);
(...skipping 2496 matching lines...) Expand 10 before | Expand all | Expand 10 after
4379 BUILTIN_LIST_C(DEFINE_BUILTIN_ACCESSOR_C) 4377 BUILTIN_LIST_C(DEFINE_BUILTIN_ACCESSOR_C)
4380 BUILTIN_LIST_A(DEFINE_BUILTIN_ACCESSOR_A) 4378 BUILTIN_LIST_A(DEFINE_BUILTIN_ACCESSOR_A)
4381 BUILTIN_LIST_H(DEFINE_BUILTIN_ACCESSOR_H) 4379 BUILTIN_LIST_H(DEFINE_BUILTIN_ACCESSOR_H)
4382 BUILTIN_LIST_DEBUG_A(DEFINE_BUILTIN_ACCESSOR_A) 4380 BUILTIN_LIST_DEBUG_A(DEFINE_BUILTIN_ACCESSOR_A)
4383 #undef DEFINE_BUILTIN_ACCESSOR_C 4381 #undef DEFINE_BUILTIN_ACCESSOR_C
4384 #undef DEFINE_BUILTIN_ACCESSOR_A 4382 #undef DEFINE_BUILTIN_ACCESSOR_A
4385 4383
4386 4384
4387 } // namespace internal 4385 } // namespace internal
4388 } // namespace v8 4386 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698