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

Side by Side Diff: src/ic.cc

Issue 62333002: Handlify Runtime::SetObjectProperty (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: whitespace Created 7 years, 1 month 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/handles.cc ('k') | src/runtime.h » ('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 // 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 1918 matching lines...) Expand 10 before | Expand all | Expand 10 after
1929 } 1929 }
1930 } 1930 }
1931 } 1931 }
1932 1932
1933 1933
1934 MaybeObject* KeyedStoreIC::Store(Handle<Object> object, 1934 MaybeObject* KeyedStoreIC::Store(Handle<Object> object,
1935 Handle<Object> key, 1935 Handle<Object> key,
1936 Handle<Object> value, 1936 Handle<Object> value,
1937 ICMissMode miss_mode) { 1937 ICMissMode miss_mode) {
1938 if (MigrateDeprecated(object)) { 1938 if (MigrateDeprecated(object)) {
1939 return Runtime::SetObjectPropertyOrFail( 1939 Handle<Object> result = Runtime::SetObjectProperty(isolate(), object,
1940 isolate(), object , key, value, NONE, strict_mode()); 1940 key,
1941 value,
1942 NONE,
1943 strict_mode());
1944 RETURN_IF_EMPTY_HANDLE(isolate(), result);
1945 return *result;
1941 } 1946 }
1942 1947
1943 // Check for values that can be converted into an internalized string directly 1948 // Check for values that can be converted into an internalized string directly
1944 // or is representable as a smi. 1949 // or is representable as a smi.
1945 key = TryConvertKey(key, isolate()); 1950 key = TryConvertKey(key, isolate());
1946 1951
1947 MaybeObject* maybe_object = NULL; 1952 MaybeObject* maybe_object = NULL;
1948 Handle<Code> stub = generic_stub(); 1953 Handle<Code> stub = generic_stub();
1949 1954
1950 if (key->IsInternalizedString()) { 1955 if (key->IsInternalizedString()) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1995 if (!is_target_set()) { 2000 if (!is_target_set()) {
1996 if (*stub == *generic_stub()) { 2001 if (*stub == *generic_stub()) {
1997 TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "set generic"); 2002 TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "set generic");
1998 } 2003 }
1999 ASSERT(!stub.is_null()); 2004 ASSERT(!stub.is_null());
2000 set_target(*stub); 2005 set_target(*stub);
2001 TRACE_IC("StoreIC", key); 2006 TRACE_IC("StoreIC", key);
2002 } 2007 }
2003 2008
2004 if (maybe_object) return maybe_object; 2009 if (maybe_object) return maybe_object;
2005 return Runtime::SetObjectPropertyOrFail( 2010 Handle<Object> result = Runtime::SetObjectProperty(isolate(), object, key,
2006 isolate(), object , key, value, NONE, strict_mode()); 2011 value,
2012 NONE,
2013 strict_mode());
2014 RETURN_IF_EMPTY_HANDLE(isolate(), result);
2015 return *result;
2007 } 2016 }
2008 2017
2009 2018
2010 #undef TRACE_IC 2019 #undef TRACE_IC
2011 2020
2012 2021
2013 // ---------------------------------------------------------------------------- 2022 // ----------------------------------------------------------------------------
2014 // Static IC stub generators. 2023 // Static IC stub generators.
2015 // 2024 //
2016 2025
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
2227 2236
2228 2237
2229 RUNTIME_FUNCTION(MaybeObject*, StoreIC_Slow) { 2238 RUNTIME_FUNCTION(MaybeObject*, StoreIC_Slow) {
2230 HandleScope scope(isolate); 2239 HandleScope scope(isolate);
2231 ASSERT(args.length() == 3); 2240 ASSERT(args.length() == 3);
2232 StoreIC ic(IC::NO_EXTRA_FRAME, isolate); 2241 StoreIC ic(IC::NO_EXTRA_FRAME, isolate);
2233 Handle<Object> object = args.at<Object>(0); 2242 Handle<Object> object = args.at<Object>(0);
2234 Handle<Object> key = args.at<Object>(1); 2243 Handle<Object> key = args.at<Object>(1);
2235 Handle<Object> value = args.at<Object>(2); 2244 Handle<Object> value = args.at<Object>(2);
2236 StrictModeFlag strict_mode = ic.strict_mode(); 2245 StrictModeFlag strict_mode = ic.strict_mode();
2237 return Runtime::SetObjectProperty(isolate, 2246 Handle<Object> result = Runtime::SetObjectProperty(isolate, object, key,
2238 object, 2247 value,
2239 key, 2248 NONE,
2240 value, 2249 strict_mode);
2241 NONE, 2250 RETURN_IF_EMPTY_HANDLE(isolate, result);
2242 strict_mode); 2251 return *result;
2243 } 2252 }
2244 2253
2245 2254
2246 RUNTIME_FUNCTION(MaybeObject*, KeyedStoreIC_Slow) { 2255 RUNTIME_FUNCTION(MaybeObject*, KeyedStoreIC_Slow) {
2247 HandleScope scope(isolate); 2256 HandleScope scope(isolate);
2248 ASSERT(args.length() == 3); 2257 ASSERT(args.length() == 3);
2249 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate); 2258 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate);
2250 Handle<Object> object = args.at<Object>(0); 2259 Handle<Object> object = args.at<Object>(0);
2251 Handle<Object> key = args.at<Object>(1); 2260 Handle<Object> key = args.at<Object>(1);
2252 Handle<Object> value = args.at<Object>(2); 2261 Handle<Object> value = args.at<Object>(2);
2253 StrictModeFlag strict_mode = ic.strict_mode(); 2262 StrictModeFlag strict_mode = ic.strict_mode();
2254 return Runtime::SetObjectProperty(isolate, 2263 Handle<Object> result = Runtime::SetObjectProperty(isolate, object, key,
2255 object, 2264 value,
2256 key, 2265 NONE,
2257 value, 2266 strict_mode);
2258 NONE, 2267 RETURN_IF_EMPTY_HANDLE(isolate, result);
2259 strict_mode); 2268 return *result;
2260 } 2269 }
2261 2270
2262 2271
2263 RUNTIME_FUNCTION(MaybeObject*, KeyedStoreIC_MissForceGeneric) { 2272 RUNTIME_FUNCTION(MaybeObject*, KeyedStoreIC_MissForceGeneric) {
2264 HandleScope scope(isolate); 2273 HandleScope scope(isolate);
2265 ASSERT(args.length() == 3); 2274 ASSERT(args.length() == 3);
2266 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate); 2275 KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate);
2267 Handle<Object> receiver = args.at<Object>(0); 2276 Handle<Object> receiver = args.at<Object>(0);
2268 Handle<Object> key = args.at<Object>(1); 2277 Handle<Object> key = args.at<Object>(1);
2269 ic.UpdateState(receiver, key); 2278 ic.UpdateState(receiver, key);
2270 return ic.Store(receiver, key, args.at<Object>(2), MISS_FORCE_GENERIC); 2279 return ic.Store(receiver, key, args.at<Object>(2), MISS_FORCE_GENERIC);
2271 } 2280 }
2272 2281
2273 2282
2274 RUNTIME_FUNCTION(MaybeObject*, ElementsTransitionAndStoreIC_Miss) { 2283 RUNTIME_FUNCTION(MaybeObject*, ElementsTransitionAndStoreIC_Miss) {
2275 HandleScope scope(isolate); 2284 HandleScope scope(isolate);
2276 ASSERT(args.length() == 4); 2285 ASSERT(args.length() == 4);
2277 KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate); 2286 KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate);
2278 Handle<Object> value = args.at<Object>(0); 2287 Handle<Object> value = args.at<Object>(0);
2279 Handle<Map> map = args.at<Map>(1); 2288 Handle<Map> map = args.at<Map>(1);
2280 Handle<Object> key = args.at<Object>(2); 2289 Handle<Object> key = args.at<Object>(2);
2281 Handle<Object> object = args.at<Object>(3); 2290 Handle<Object> object = args.at<Object>(3);
2282 StrictModeFlag strict_mode = ic.strict_mode(); 2291 StrictModeFlag strict_mode = ic.strict_mode();
2283 if (object->IsJSObject()) { 2292 if (object->IsJSObject()) {
2284 JSObject::TransitionElementsKind(Handle<JSObject>::cast(object), 2293 JSObject::TransitionElementsKind(Handle<JSObject>::cast(object),
2285 map->elements_kind()); 2294 map->elements_kind());
2286 } 2295 }
2287 return Runtime::SetObjectProperty(isolate, 2296 Handle<Object> result = Runtime::SetObjectProperty(isolate, object, key,
2288 object, 2297 value,
2289 key, 2298 NONE,
2290 value, 2299 strict_mode);
2291 NONE, 2300 RETURN_IF_EMPTY_HANDLE(isolate, result);
2292 strict_mode); 2301 return *result;
2293 } 2302 }
2294 2303
2295 2304
2296 const char* BinaryOpIC::GetName(TypeInfo type_info) { 2305 const char* BinaryOpIC::GetName(TypeInfo type_info) {
2297 switch (type_info) { 2306 switch (type_info) {
2298 case UNINITIALIZED: return "Uninitialized"; 2307 case UNINITIALIZED: return "Uninitialized";
2299 case SMI: return "Smi"; 2308 case SMI: return "Smi";
2300 case INT32: return "Int32"; 2309 case INT32: return "Int32";
2301 case NUMBER: return "Number"; 2310 case NUMBER: return "Number";
2302 case ODDBALL: return "Oddball"; 2311 case ODDBALL: return "Oddball";
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
2737 #undef ADDR 2746 #undef ADDR
2738 }; 2747 };
2739 2748
2740 2749
2741 Address IC::AddressFromUtilityId(IC::UtilityId id) { 2750 Address IC::AddressFromUtilityId(IC::UtilityId id) {
2742 return IC_utilities[id]; 2751 return IC_utilities[id];
2743 } 2752 }
2744 2753
2745 2754
2746 } } // namespace v8::internal 2755 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/handles.cc ('k') | src/runtime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698