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

Side by Side Diff: src/ic.cc

Issue 351853005: Split SetProperty(...attributes, strictmode) into AddProperty(...attributes) and SetProperty(...… (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « src/ia32/ic-ia32.cc ('k') | src/math.js » ('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/codegen.h" 10 #include "src/codegen.h"
(...skipping 1725 matching lines...) Expand 10 before | Expand all | Expand 10 after
1736 1736
1737 MaybeHandle<Object> KeyedStoreIC::Store(Handle<Object> object, 1737 MaybeHandle<Object> KeyedStoreIC::Store(Handle<Object> object,
1738 Handle<Object> key, 1738 Handle<Object> key,
1739 Handle<Object> value) { 1739 Handle<Object> value) {
1740 if (MigrateDeprecated(object)) { 1740 if (MigrateDeprecated(object)) {
1741 Handle<Object> result; 1741 Handle<Object> result;
1742 ASSIGN_RETURN_ON_EXCEPTION( 1742 ASSIGN_RETURN_ON_EXCEPTION(
1743 isolate(), 1743 isolate(),
1744 result, 1744 result,
1745 Runtime::SetObjectProperty( 1745 Runtime::SetObjectProperty(
1746 isolate(), object, key, value, NONE, strict_mode()), 1746 isolate(), object, key, value, strict_mode()),
1747 Object); 1747 Object);
1748 return result; 1748 return result;
1749 } 1749 }
1750 1750
1751 // Check for non-string values that can be converted into an 1751 // Check for non-string values that can be converted into an
1752 // internalized string directly or is representable as a smi. 1752 // internalized string directly or is representable as a smi.
1753 key = TryConvertKey(key, isolate()); 1753 key = TryConvertKey(key, isolate());
1754 1754
1755 Handle<Object> store_handle; 1755 Handle<Object> store_handle;
1756 Handle<Code> stub = generic_stub(); 1756 Handle<Code> stub = generic_stub();
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1804 } 1804 }
1805 } 1805 }
1806 } 1806 }
1807 } 1807 }
1808 1808
1809 if (store_handle.is_null()) { 1809 if (store_handle.is_null()) {
1810 ASSIGN_RETURN_ON_EXCEPTION( 1810 ASSIGN_RETURN_ON_EXCEPTION(
1811 isolate(), 1811 isolate(),
1812 store_handle, 1812 store_handle,
1813 Runtime::SetObjectProperty( 1813 Runtime::SetObjectProperty(
1814 isolate(), object, key, value, NONE, strict_mode()), 1814 isolate(), object, key, value, strict_mode()),
1815 Object); 1815 Object);
1816 } 1816 }
1817 1817
1818 if (!is_target_set()) { 1818 if (!is_target_set()) {
1819 Code* generic = *generic_stub(); 1819 Code* generic = *generic_stub();
1820 if (*stub == generic) { 1820 if (*stub == generic) {
1821 TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "set generic"); 1821 TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "set generic");
1822 } 1822 }
1823 ASSERT(!stub.is_null()); 1823 ASSERT(!stub.is_null());
1824 set_target(*stub); 1824 set_target(*stub);
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
2136 ASSERT(args.length() == 3); 2136 ASSERT(args.length() == 3);
2137 StoreIC ic(IC::NO_EXTRA_FRAME, isolate); 2137 StoreIC ic(IC::NO_EXTRA_FRAME, isolate);
2138 Handle<Object> object = args.at<Object>(0); 2138 Handle<Object> object = args.at<Object>(0);
2139 Handle<Object> key = args.at<Object>(1); 2139 Handle<Object> key = args.at<Object>(1);
2140 Handle<Object> value = args.at<Object>(2); 2140 Handle<Object> value = args.at<Object>(2);
2141 StrictMode strict_mode = ic.strict_mode(); 2141 StrictMode strict_mode = ic.strict_mode();
2142 Handle<Object> result; 2142 Handle<Object> result;
2143 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 2143 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
2144 isolate, result, 2144 isolate, result,
2145 Runtime::SetObjectProperty( 2145 Runtime::SetObjectProperty(
2146 isolate, object, key, value, NONE, strict_mode)); 2146 isolate, object, key, value, strict_mode));
2147 return *result; 2147 return *result;
2148 } 2148 }
2149 2149
2150 2150
2151 RUNTIME_FUNCTION(KeyedStoreIC_Slow) { 2151 RUNTIME_FUNCTION(KeyedStoreIC_Slow) {
2152 HandleScope scope(isolate); 2152 HandleScope scope(isolate);
2153 ASSERT(args.length() == 3); 2153 ASSERT(args.length() == 3);
2154 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate); 2154 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate);
2155 Handle<Object> object = args.at<Object>(0); 2155 Handle<Object> object = args.at<Object>(0);
2156 Handle<Object> key = args.at<Object>(1); 2156 Handle<Object> key = args.at<Object>(1);
2157 Handle<Object> value = args.at<Object>(2); 2157 Handle<Object> value = args.at<Object>(2);
2158 StrictMode strict_mode = ic.strict_mode(); 2158 StrictMode strict_mode = ic.strict_mode();
2159 Handle<Object> result; 2159 Handle<Object> result;
2160 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 2160 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
2161 isolate, result, 2161 isolate, result,
2162 Runtime::SetObjectProperty( 2162 Runtime::SetObjectProperty(
2163 isolate, object, key, value, NONE, strict_mode)); 2163 isolate, object, key, value, strict_mode));
2164 return *result; 2164 return *result;
2165 } 2165 }
2166 2166
2167 2167
2168 RUNTIME_FUNCTION(ElementsTransitionAndStoreIC_Miss) { 2168 RUNTIME_FUNCTION(ElementsTransitionAndStoreIC_Miss) {
2169 Logger::TimerEventScope timer( 2169 Logger::TimerEventScope timer(
2170 isolate, Logger::TimerEventScope::v8_ic_miss); 2170 isolate, Logger::TimerEventScope::v8_ic_miss);
2171 HandleScope scope(isolate); 2171 HandleScope scope(isolate);
2172 ASSERT(args.length() == 4); 2172 ASSERT(args.length() == 4);
2173 KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate); 2173 KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate);
2174 Handle<Object> value = args.at<Object>(0); 2174 Handle<Object> value = args.at<Object>(0);
2175 Handle<Map> map = args.at<Map>(1); 2175 Handle<Map> map = args.at<Map>(1);
2176 Handle<Object> key = args.at<Object>(2); 2176 Handle<Object> key = args.at<Object>(2);
2177 Handle<Object> object = args.at<Object>(3); 2177 Handle<Object> object = args.at<Object>(3);
2178 StrictMode strict_mode = ic.strict_mode(); 2178 StrictMode strict_mode = ic.strict_mode();
2179 if (object->IsJSObject()) { 2179 if (object->IsJSObject()) {
2180 JSObject::TransitionElementsKind(Handle<JSObject>::cast(object), 2180 JSObject::TransitionElementsKind(Handle<JSObject>::cast(object),
2181 map->elements_kind()); 2181 map->elements_kind());
2182 } 2182 }
2183 Handle<Object> result; 2183 Handle<Object> result;
2184 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 2184 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
2185 isolate, result, 2185 isolate, result,
2186 Runtime::SetObjectProperty( 2186 Runtime::SetObjectProperty(
2187 isolate, object, key, value, NONE, strict_mode)); 2187 isolate, object, key, value, strict_mode));
2188 return *result; 2188 return *result;
2189 } 2189 }
2190 2190
2191 2191
2192 BinaryOpIC::State::State(Isolate* isolate, ExtraICState extra_ic_state) 2192 BinaryOpIC::State::State(Isolate* isolate, ExtraICState extra_ic_state)
2193 : isolate_(isolate) { 2193 : isolate_(isolate) {
2194 op_ = static_cast<Token::Value>( 2194 op_ = static_cast<Token::Value>(
2195 FIRST_TOKEN + OpField::decode(extra_ic_state)); 2195 FIRST_TOKEN + OpField::decode(extra_ic_state));
2196 mode_ = OverwriteModeField::decode(extra_ic_state); 2196 mode_ = OverwriteModeField::decode(extra_ic_state);
2197 fixed_right_arg_ = Maybe<int>( 2197 fixed_right_arg_ = Maybe<int>(
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after
3079 #undef ADDR 3079 #undef ADDR
3080 }; 3080 };
3081 3081
3082 3082
3083 Address IC::AddressFromUtilityId(IC::UtilityId id) { 3083 Address IC::AddressFromUtilityId(IC::UtilityId id) {
3084 return IC_utilities[id]; 3084 return IC_utilities[id];
3085 } 3085 }
3086 3086
3087 3087
3088 } } // namespace v8::internal 3088 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/ia32/ic-ia32.cc ('k') | src/math.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698