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

Unified Diff: src/stub-cache.cc

Issue 3522008: This is a little experiment to move Failure to a superclass above Object... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 10 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/runtime.cc ('k') | src/x64/macro-assembler-x64.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/stub-cache.cc
===================================================================
--- src/stub-cache.cc (revision 5559)
+++ src/stub-cache.cc (working copy)
@@ -114,13 +114,17 @@
Code::ComputeMonomorphicFlags(Code::LOAD_IC, NONEXISTENT);
Object* code = receiver->map()->FindInCodeCache(cache_name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t =
+ compiler.CompileLoadNonexistent(cache_name, receiver, last);
+ if (!t->ToObject(&code)) return t;
+ }
LoadStubCompiler compiler;
- code = compiler.CompileLoadNonexistent(cache_name, receiver, last);
- if (code->IsFailure()) return code;
PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), cache_name));
- Object* result =
- receiver->UpdateMapCodeCache(cache_name, Code::cast(code));
- if (result->IsFailure()) return result;
+ Object* result;
+ { TryAllocation t =
+ receiver->UpdateMapCodeCache(cache_name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
}
return code;
}
@@ -134,12 +138,16 @@
Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, FIELD);
Object* code = receiver->map()->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t =
+ compiler.CompileLoadField(receiver, holder, field_index, name);
+ if (!t->ToObject(&code)) return t;
+ }
LoadStubCompiler compiler;
- code = compiler.CompileLoadField(receiver, holder, field_index, name);
- if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -154,12 +162,16 @@
Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, CALLBACKS);
Object* code = receiver->map()->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t =
+ compiler.CompileLoadCallback(name, receiver, holder, callback);
+ if (!t->ToObject(&code)) return t;
+ }
LoadStubCompiler compiler;
- code = compiler.CompileLoadCallback(name, receiver, holder, callback);
- if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -174,12 +186,16 @@
Code::ComputeMonomorphicFlags(Code::LOAD_IC, CONSTANT_FUNCTION);
Object* code = receiver->map()->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t =
+ compiler.CompileLoadConstant(receiver, holder, value, name);
+ if (!t->ToObject(&code)) return t;
+ }
LoadStubCompiler compiler;
- code = compiler.CompileLoadConstant(receiver, holder, value, name);
- if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -192,12 +208,15 @@
Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, INTERCEPTOR);
Object* code = receiver->map()->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t = compiler.CompileLoadInterceptor(receiver, holder, name);
+ if (!t->ToObject(&code)) return t;
+ }
LoadStubCompiler compiler;
- code = compiler.CompileLoadInterceptor(receiver, holder, name);
- if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -224,9 +243,11 @@
name,
is_dont_delete);
if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -240,12 +261,16 @@
Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, FIELD);
Object* code = receiver->map()->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t =
+ compiler.CompileLoadField(name, receiver, holder, field_index);
+ if (!t->ToObject(&code)) return t;
+ }
KeyedLoadStubCompiler compiler;
- code = compiler.CompileLoadField(name, receiver, holder, field_index);
- if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -260,12 +285,16 @@
Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CONSTANT_FUNCTION);
Object* code = receiver->map()->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t =
+ compiler.CompileLoadConstant(name, receiver, holder, value);
+ if (!t->ToObject(&code)) return t;
+ }
KeyedLoadStubCompiler compiler;
- code = compiler.CompileLoadConstant(name, receiver, holder, value);
- if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -279,12 +308,15 @@
Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, INTERCEPTOR);
Object* code = receiver->map()->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t = compiler.CompileLoadInterceptor(receiver, holder, name);
+ if (!t->ToObject(&code)) return t;
+ }
KeyedLoadStubCompiler compiler;
- code = compiler.CompileLoadInterceptor(receiver, holder, name);
- if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -299,12 +331,16 @@
Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
Object* code = receiver->map()->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t =
+ compiler.CompileLoadCallback(name, receiver, holder, callback);
+ if (!t->ToObject(&code)) return t;
+ }
KeyedLoadStubCompiler compiler;
- code = compiler.CompileLoadCallback(name, receiver, holder, callback);
- if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -318,12 +354,15 @@
ASSERT(receiver->IsJSObject());
Object* code = receiver->map()->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t = compiler.CompileLoadArrayLength(name);
+ if (!t->ToObject(&code)) return t;
+ }
KeyedLoadStubCompiler compiler;
- code = compiler.CompileLoadArrayLength(name);
- if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -336,12 +375,15 @@
Map* map = receiver->map();
Object* code = map->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t = compiler.CompileLoadStringLength(name);
+ if (!t->ToObject(&code)) return t;
+ }
KeyedLoadStubCompiler compiler;
- code = compiler.CompileLoadStringLength(name);
- if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = map->UpdateCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
- Object* result = map->UpdateCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -353,12 +395,15 @@
Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
Object* code = receiver->map()->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t = compiler.CompileLoadFunctionPrototype(name);
+ if (!t->ToObject(&code)) return t;
+ }
KeyedLoadStubCompiler compiler;
- code = compiler.CompileLoadFunctionPrototype(name);
- if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -372,12 +417,16 @@
Code::Flags flags = Code::ComputeMonomorphicFlags(Code::STORE_IC, type);
Object* code = receiver->map()->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t =
+ compiler.CompileStoreField(receiver, field_index, transition, name);
+ if (!t->ToObject(&code)) return t;
+ }
StoreStubCompiler compiler;
- code = compiler.CompileStoreField(receiver, field_index, transition, name);
- if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -394,12 +443,15 @@
Code::Flags flags = Code::ComputeMonomorphicFlags(Code::STORE_IC, NORMAL);
Object* code = receiver->map()->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t = compiler.CompileStoreGlobal(receiver, cell, name);
+ if (!t->ToObject(&code)) return t;
+ }
StoreStubCompiler compiler;
- code = compiler.CompileStoreGlobal(receiver, cell, name);
- if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -412,12 +464,15 @@
Code::Flags flags = Code::ComputeMonomorphicFlags(Code::STORE_IC, CALLBACKS);
Object* code = receiver->map()->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t = compiler.CompileStoreCallback(receiver, callback, name);
+ if (!t->ToObject(&code)) return t;
+ }
StoreStubCompiler compiler;
- code = compiler.CompileStoreCallback(receiver, callback, name);
- if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -429,12 +484,15 @@
Code::ComputeMonomorphicFlags(Code::STORE_IC, INTERCEPTOR);
Object* code = receiver->map()->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t = compiler.CompileStoreInterceptor(receiver, name);
+ if (!t->ToObject(&code)) return t;
+ }
StoreStubCompiler compiler;
- code = compiler.CompileStoreInterceptor(receiver, name);
- if (code->IsFailure()) return code;
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
PROFILE(CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -446,13 +504,17 @@
Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_STORE_IC, type);
Object* code = receiver->map()->FindInCodeCache(name, flags);
if (code->IsUndefined()) {
+ { TryAllocation t =
+ compiler.CompileStoreField(receiver, field_index, transition, name);
+ if (!t->ToObject(&code)) return t;
+ }
KeyedStoreStubCompiler compiler;
- code = compiler.CompileStoreField(receiver, field_index, transition, name);
- if (code->IsFailure()) return code;
PROFILE(CodeCreateEvent(
+ Object* result;
+ { TryAllocation t = receiver->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
Logger::KEYED_STORE_IC_TAG, Code::cast(code), name));
- Object* result = receiver->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -496,14 +558,18 @@
// caches.
if (!function->is_compiled()) return Failure::InternalError();
// Compile the stub - only create stubs for fully compiled functions.
+ { TryAllocation t =
+ compiler.CompileCallConstant(object, holder, function, name, check);
+ if (!t->ToObject(&code)) return t;
+ }
CallStubCompiler compiler(argc, in_loop, kind, cache_holder);
- code = compiler.CompileCallConstant(object, holder, function, name, check);
- if (code->IsFailure()) return code;
ASSERT_EQ(flags, Code::cast(code)->flags());
PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
+ Object* result;
+ { TryAllocation t = map_holder->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
Code::cast(code), name));
- Object* result = map_holder->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -543,9 +609,11 @@
if (code->IsFailure()) return code;
ASSERT_EQ(flags, Code::cast(code)->flags());
PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
+ Object* result;
+ { TryAllocation t = map_holder->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
Code::cast(code), name));
- Object* result = map_holder->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -583,9 +651,11 @@
if (code->IsFailure()) return code;
ASSERT_EQ(flags, Code::cast(code)->flags());
PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
+ Object* result;
+ { TryAllocation t = map_holder->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
Code::cast(code), name));
- Object* result = map_holder->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -595,9 +665,11 @@
InLoopFlag in_loop,
Code::Kind kind,
String* name,
+ Object* code;
+ { TryAllocation t = ComputeCallNormal(argc, in_loop, kind);
+ if (!t->ToObject(&code)) return t;
+ }
JSObject* receiver) {
- Object* code = ComputeCallNormal(argc, in_loop, kind);
- if (code->IsFailure()) return code;
return code;
}
@@ -626,14 +698,18 @@
// internal error which will make sure we do not update any
// caches.
if (!function->is_compiled()) return Failure::InternalError();
+ { TryAllocation t =
+ compiler.CompileCallGlobal(receiver, holder, cell, function, name);
+ if (!t->ToObject(&code)) return t;
+ }
CallStubCompiler compiler(argc, in_loop, kind, cache_holder);
- code = compiler.CompileCallGlobal(receiver, holder, cell, function, name);
- if (code->IsFailure()) return code;
ASSERT_EQ(flags, Code::cast(code)->flags());
PROFILE(CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
+ Object* result;
+ { TryAllocation t = map_holder->UpdateMapCodeCache(name, Code::cast(code));
+ if (!t->ToObject(&result)) return t;
+ }
Code::cast(code), name));
- Object* result = map_holder->UpdateMapCodeCache(name, Code::cast(code));
- if (result->IsFailure()) return result;
}
return code;
}
@@ -954,9 +1030,11 @@
* lookup if interceptor failed.
*/
Object* LoadPropertyWithInterceptorForLoad(Arguments args) {
+ Object* result;
+ { TryAllocation t = LoadWithInterceptor(&args, &attr);
+ if (!t->ToObject(&result)) return t;
+ }
PropertyAttributes attr = NONE;
- Object* result = LoadWithInterceptor(&args, &attr);
- if (result->IsFailure()) return result;
// If the property is present, return it.
if (attr != ABSENT) return result;
« no previous file with comments | « src/runtime.cc ('k') | src/x64/macro-assembler-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698