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

Side by Side Diff: src/ic/ic.cc

Issue 1149053004: Make KeyedStores from a sloppy arguments array use a handler. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Code comments. Created 5 years, 6 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 | « src/ic/ic.h ('k') | src/ic/ic-compiler.cc » ('j') | 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/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/arguments.h" 9 #include "src/arguments.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 2029 matching lines...) Expand 10 before | Expand all | Expand 10 after
2040 } 2040 }
2041 } 2041 }
2042 2042
2043 if (use_ic) { 2043 if (use_ic) {
2044 DCHECK(!object->IsAccessCheckNeeded()); 2044 DCHECK(!object->IsAccessCheckNeeded());
2045 2045
2046 if (object->IsJSObject()) { 2046 if (object->IsJSObject()) {
2047 Handle<JSObject> receiver = Handle<JSObject>::cast(object); 2047 Handle<JSObject> receiver = Handle<JSObject>::cast(object);
2048 bool key_is_smi_like = !Object::ToSmi(isolate(), key).is_null(); 2048 bool key_is_smi_like = !Object::ToSmi(isolate(), key).is_null();
2049 if (receiver->elements()->map() == 2049 if (receiver->elements()->map() ==
2050 isolate()->heap()->sloppy_arguments_elements_map()) { 2050 isolate()->heap()->sloppy_arguments_elements_map() &&
2051 if (is_sloppy(language_mode())) { 2051 !is_sloppy(language_mode())) {
2052 stub = sloppy_arguments_stub(); 2052 TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "arguments receiver");
2053 } else { 2053 } else if (key_is_smi_like) {
2054 TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "arguments receiver");
2055 }
2056 } else if (key_is_smi_like &&
2057 !(target().is_identical_to(sloppy_arguments_stub()))) {
2058 // We should go generic if receiver isn't a dictionary, but our 2054 // We should go generic if receiver isn't a dictionary, but our
2059 // prototype chain does have dictionary elements. This ensures that 2055 // prototype chain does have dictionary elements. This ensures that
2060 // other non-dictionary receivers in the polymorphic case benefit 2056 // other non-dictionary receivers in the polymorphic case benefit
2061 // from fast path keyed stores. 2057 // from fast path keyed stores.
2062 if (!(receiver->map()->DictionaryElementsInPrototypeChainOnly())) { 2058 if (!(receiver->map()->DictionaryElementsInPrototypeChainOnly())) {
2063 KeyedAccessStoreMode store_mode = GetStoreMode(receiver, key, value); 2059 KeyedAccessStoreMode store_mode = GetStoreMode(receiver, key, value);
2064 stub = StoreElementStub(receiver, store_mode); 2060 stub = StoreElementStub(receiver, store_mode);
2065 } else { 2061 } else {
2066 TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "dictionary prototype"); 2062 TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "dictionary prototype");
2067 } 2063 }
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after
2905 static const Address IC_utilities[] = { 2901 static const Address IC_utilities[] = {
2906 #define ADDR(name) FUNCTION_ADDR(name), 2902 #define ADDR(name) FUNCTION_ADDR(name),
2907 IC_UTIL_LIST(ADDR) NULL 2903 IC_UTIL_LIST(ADDR) NULL
2908 #undef ADDR 2904 #undef ADDR
2909 }; 2905 };
2910 2906
2911 2907
2912 Address IC::AddressFromUtilityId(IC::UtilityId id) { return IC_utilities[id]; } 2908 Address IC::AddressFromUtilityId(IC::UtilityId id) { return IC_utilities[id]; }
2913 } 2909 }
2914 } // namespace v8::internal 2910 } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/ic/ic.h ('k') | src/ic/ic-compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698