Index: src/stub-cache.cc |
=================================================================== |
--- src/stub-cache.cc (revision 2303) |
+++ src/stub-cache.cc (working copy) |
@@ -174,12 +174,13 @@ |
Object* StubCache::ComputeLoadGlobal(String* name, |
JSGlobalObject* receiver, |
- JSGlobalPropertyCell* cell) { |
+ JSGlobalPropertyCell* cell, |
+ bool is_dont_delete) { |
Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, NORMAL); |
Object* code = receiver->map()->FindInCodeCache(name, flags); |
if (code->IsUndefined()) { |
LoadStubCompiler compiler; |
- code = compiler.CompileLoadGlobal(receiver, cell, name); |
+ code = compiler.CompileLoadGlobal(receiver, cell, name, is_dont_delete); |
if (code->IsFailure()) return code; |
LOG(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name)); |
Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code)); |
@@ -443,9 +444,10 @@ |
// caches. |
if (!function->is_compiled()) return Failure::InternalError(); |
// Compile the stub - only create stubs for fully compiled functions. |
- CallStubCompiler compiler(argc); |
- code = compiler.CompileCallConstant(object, holder, function, check, flags); |
+ CallStubCompiler compiler(argc, in_loop); |
+ code = compiler.CompileCallConstant(object, holder, function, check); |
if (code->IsFailure()) return code; |
+ ASSERT_EQ(flags, Code::cast(code)->flags()); |
LOG(CodeCreateEvent(Logger::CALL_IC_TAG, Code::cast(code), name)); |
Object* result = map->UpdateCodeCache(name, Code::cast(code)); |
if (result->IsFailure()) return result; |
@@ -476,9 +478,10 @@ |
argc); |
Object* code = map->FindInCodeCache(name, flags); |
if (code->IsUndefined()) { |
- CallStubCompiler compiler(argc); |
- code = compiler.CompileCallField(object, holder, index, name, flags); |
+ CallStubCompiler compiler(argc, in_loop); |
+ code = compiler.CompileCallField(object, holder, index, name); |
if (code->IsFailure()) return code; |
+ ASSERT_EQ(flags, Code::cast(code)->flags()); |
LOG(CodeCreateEvent(Logger::CALL_IC_TAG, Code::cast(code), name)); |
Object* result = map->UpdateCodeCache(name, Code::cast(code)); |
if (result->IsFailure()) return result; |
@@ -509,9 +512,10 @@ |
argc); |
Object* code = map->FindInCodeCache(name, flags); |
if (code->IsUndefined()) { |
- CallStubCompiler compiler(argc); |
+ CallStubCompiler compiler(argc, NOT_IN_LOOP); |
code = compiler.CompileCallInterceptor(object, holder, name); |
if (code->IsFailure()) return code; |
+ ASSERT_EQ(flags, Code::cast(code)->flags()); |
LOG(CodeCreateEvent(Logger::CALL_IC_TAG, Code::cast(code), name)); |
Object* result = map->UpdateCodeCache(name, Code::cast(code)); |
if (result->IsFailure()) return result; |
@@ -536,7 +540,8 @@ |
JSGlobalObject* receiver, |
JSGlobalPropertyCell* cell, |
JSFunction* function) { |
- Code::Flags flags = Code::ComputeMonomorphicFlags(Code::CALL_IC, NORMAL); |
+ Code::Flags flags = |
+ Code::ComputeMonomorphicFlags(Code::CALL_IC, NORMAL, in_loop, argc); |
Object* code = receiver->map()->FindInCodeCache(name, flags); |
if (code->IsUndefined()) { |
// If the function hasn't been compiled yet, we cannot do it now |
@@ -544,9 +549,10 @@ |
// internal error which will make sure we do not update any |
// caches. |
if (!function->is_compiled()) return Failure::InternalError(); |
- CallStubCompiler compiler(argc); |
+ CallStubCompiler compiler(argc, in_loop); |
code = compiler.CompileCallGlobal(receiver, cell, function, name); |
if (code->IsFailure()) return code; |
+ ASSERT_EQ(flags, Code::cast(code)->flags()); |
LOG(CodeCreateEvent(Logger::CALL_IC_TAG, Code::cast(code), name)); |
Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code)); |
if (result->IsFailure()) return code; |
@@ -992,7 +998,7 @@ |
int argc = arguments_.immediate(); |
Code::Flags flags = Code::ComputeMonomorphicFlags(Code::CALL_IC, |
type, |
- NOT_IN_LOOP, |
+ in_loop_, |
argc); |
return GetCodeWithFlags(flags, name); |
} |