OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1682 } | 1682 } |
1683 | 1683 |
1684 if (use_ic) { | 1684 if (use_ic) { |
1685 ASSERT(!object->IsJSGlobalProxy()); | 1685 ASSERT(!object->IsJSGlobalProxy()); |
1686 | 1686 |
1687 if (object->IsJSObject()) { | 1687 if (object->IsJSObject()) { |
1688 Handle<JSObject> receiver = Handle<JSObject>::cast(object); | 1688 Handle<JSObject> receiver = Handle<JSObject>::cast(object); |
1689 bool key_is_smi_like = key->IsSmi() || !key->ToSmi()->IsFailure(); | 1689 bool key_is_smi_like = key->IsSmi() || !key->ToSmi()->IsFailure(); |
1690 if (receiver->elements()->map() == | 1690 if (receiver->elements()->map() == |
1691 isolate()->heap()->non_strict_arguments_elements_map()) { | 1691 isolate()->heap()->non_strict_arguments_elements_map()) { |
1692 stub = non_strict_arguments_stub(); | 1692 if (strict_mode() == kNonStrictMode) { |
| 1693 stub = non_strict_arguments_stub(); |
| 1694 } |
1693 } else if (key_is_smi_like && | 1695 } else if (key_is_smi_like && |
1694 !(target().is_identical_to(non_strict_arguments_stub()))) { | 1696 !(target().is_identical_to(non_strict_arguments_stub()))) { |
1695 // We should go generic if receiver isn't a dictionary, but our | 1697 // We should go generic if receiver isn't a dictionary, but our |
1696 // prototype chain does have dictionary elements. This ensures that | 1698 // prototype chain does have dictionary elements. This ensures that |
1697 // other non-dictionary receivers in the polymorphic case benefit | 1699 // other non-dictionary receivers in the polymorphic case benefit |
1698 // from fast path keyed stores. | 1700 // from fast path keyed stores. |
1699 if (!(receiver->map()->DictionaryElementsInPrototypeChainOnly())) { | 1701 if (!(receiver->map()->DictionaryElementsInPrototypeChainOnly())) { |
1700 KeyedAccessStoreMode store_mode = | 1702 KeyedAccessStoreMode store_mode = |
1701 GetStoreMode(receiver, key, value); | 1703 GetStoreMode(receiver, key, value); |
1702 stub = StoreElementStub(receiver, store_mode); | 1704 stub = StoreElementStub(receiver, store_mode); |
(...skipping 1108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2811 #undef ADDR | 2813 #undef ADDR |
2812 }; | 2814 }; |
2813 | 2815 |
2814 | 2816 |
2815 Address IC::AddressFromUtilityId(IC::UtilityId id) { | 2817 Address IC::AddressFromUtilityId(IC::UtilityId id) { |
2816 return IC_utilities[id]; | 2818 return IC_utilities[id]; |
2817 } | 2819 } |
2818 | 2820 |
2819 | 2821 |
2820 } } // namespace v8::internal | 2822 } } // namespace v8::internal |
OLD | NEW |