| Index: src/stub-cache.cc
|
| diff --git a/src/stub-cache.cc b/src/stub-cache.cc
|
| index 47e7f64c44cc591ce1865c9a3bdb61e500f14811..a84cb9fcbdd357f1eb0a81ba1fd44ab61bf34704 100644
|
| --- a/src/stub-cache.cc
|
| +++ b/src/stub-cache.cc
|
| @@ -1402,14 +1402,6 @@ RUNTIME_FUNCTION(MaybeObject*, KeyedLoadPropertyWithInterceptor) {
|
|
|
|
|
| Handle<Code> StubCompiler::CompileCallInitialize(Code::Flags flags) {
|
| - CALL_HEAP_FUNCTION(isolate(),
|
| - (set_failure(NULL), TryCompileCallInitialize(flags)),
|
| - Code);
|
| -}
|
| -
|
| -
|
| -MaybeObject* StubCompiler::TryCompileCallInitialize(Code::Flags flags) {
|
| - HandleScope scope(isolate());
|
| int argc = Code::ExtractArgumentsCountFromFlags(flags);
|
| Code::Kind kind = Code::ExtractKindFromFlags(flags);
|
| Code::ExtraICState extra_state = Code::ExtractExtraICStateFromFlags(flags);
|
| @@ -1418,19 +1410,13 @@ MaybeObject* StubCompiler::TryCompileCallInitialize(Code::Flags flags) {
|
| } else {
|
| KeyedCallIC::GenerateInitialize(masm(), argc);
|
| }
|
| - Object* result;
|
| - { MaybeObject* maybe_result =
|
| - GetCodeWithFlags(flags, "CompileCallInitialize");
|
| - if (!maybe_result->ToObject(&result)) return maybe_result;
|
| - }
|
| + Handle<Code> code = GetCodeWithFlags(flags, "CompileCallInitialize");
|
| isolate()->counters()->call_initialize_stubs()->Increment();
|
| - Code* code = Code::cast(result);
|
| - USE(code);
|
| PROFILE(isolate(),
|
| CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_INITIALIZE_TAG),
|
| - code, code->arguments_count()));
|
| - GDBJIT(AddCode(GDBJITInterface::CALL_INITIALIZE, Code::cast(code)));
|
| - return result;
|
| + *code, code->arguments_count()));
|
| + GDBJIT(AddCode(GDBJITInterface::CALL_INITIALIZE, *code));
|
| + return code;
|
| }
|
|
|
|
|
| @@ -1455,7 +1441,7 @@ MaybeObject* StubCompiler::TryCompileCallPreMonomorphic(Code::Flags flags) {
|
| }
|
| Object* result;
|
| { MaybeObject* maybe_result =
|
| - GetCodeWithFlags(flags, "CompileCallPreMonomorphic");
|
| + TryGetCodeWithFlags(flags, "CompileCallPreMonomorphic");
|
| if (!maybe_result->ToObject(&result)) return maybe_result;
|
| }
|
| isolate()->counters()->call_premonomorphic_stubs()->Increment();
|
| @@ -1489,7 +1475,7 @@ MaybeObject* StubCompiler::TryCompileCallNormal(Code::Flags flags) {
|
| KeyedCallIC::GenerateNormal(masm(), argc);
|
| }
|
| Object* result;
|
| - { MaybeObject* maybe_result = GetCodeWithFlags(flags, "CompileCallNormal");
|
| + { MaybeObject* maybe_result = TryGetCodeWithFlags(flags, "CompileCallNormal");
|
| if (!maybe_result->ToObject(&result)) return maybe_result;
|
| }
|
| isolate()->counters()->call_normal_stubs()->Increment();
|
| @@ -1522,7 +1508,7 @@ MaybeObject* StubCompiler::TryCompileCallMegamorphic(Code::Flags flags) {
|
| }
|
| Object* result;
|
| { MaybeObject* maybe_result =
|
| - GetCodeWithFlags(flags, "CompileCallMegamorphic");
|
| + TryGetCodeWithFlags(flags, "CompileCallMegamorphic");
|
| if (!maybe_result->ToObject(&result)) return maybe_result;
|
| }
|
| isolate()->counters()->call_megamorphic_stubs()->Increment();
|
| @@ -1550,7 +1536,7 @@ MaybeObject* StubCompiler::TryCompileCallArguments(Code::Flags flags) {
|
| Code::Kind kind = Code::ExtractKindFromFlags(flags);
|
| Object* result;
|
| { MaybeObject* maybe_result =
|
| - GetCodeWithFlags(flags, "CompileCallArguments");
|
| + TryGetCodeWithFlags(flags, "CompileCallArguments");
|
| if (!maybe_result->ToObject(&result)) return maybe_result;
|
| }
|
| Code* code = Code::cast(result);
|
| @@ -1581,7 +1567,7 @@ MaybeObject* StubCompiler::TryCompileCallMiss(Code::Flags flags) {
|
| KeyedCallIC::GenerateMiss(masm(), argc);
|
| }
|
| Object* result;
|
| - { MaybeObject* maybe_result = GetCodeWithFlags(flags, "CompileCallMiss");
|
| + { MaybeObject* maybe_result = TryGetCodeWithFlags(flags, "CompileCallMiss");
|
| if (!maybe_result->ToObject(&result)) return maybe_result;
|
| }
|
| isolate()->counters()->call_megamorphic_stubs()->Increment();
|
| @@ -1608,7 +1594,7 @@ MaybeObject* StubCompiler::TryCompileCallDebugBreak(Code::Flags flags) {
|
| Debug::GenerateCallICDebugBreak(masm());
|
| Object* result;
|
| { MaybeObject* maybe_result =
|
| - GetCodeWithFlags(flags, "CompileCallDebugBreak");
|
| + TryGetCodeWithFlags(flags, "CompileCallDebugBreak");
|
| if (!maybe_result->ToObject(&result)) return maybe_result;
|
| }
|
| Code* code = Code::cast(result);
|
| @@ -1644,7 +1630,7 @@ MaybeObject* StubCompiler::TryCompileCallDebugPrepareStepIn(Code::Flags flags) {
|
| }
|
| Object* result;
|
| { MaybeObject* maybe_result =
|
| - GetCodeWithFlags(flags, "CompileCallDebugPrepareStepIn");
|
| + TryGetCodeWithFlags(flags, "CompileCallDebugPrepareStepIn");
|
| if (!maybe_result->ToObject(&result)) return maybe_result;
|
| }
|
| Code* code = Code::cast(result);
|
| @@ -1660,8 +1646,21 @@ MaybeObject* StubCompiler::TryCompileCallDebugPrepareStepIn(Code::Flags flags) {
|
|
|
| #undef CALL_LOGGER_TAG
|
|
|
| -MaybeObject* StubCompiler::GetCodeWithFlags(Code::Flags flags,
|
| +Handle<Code> StubCompiler::GetCodeWithFlags(Code::Flags flags,
|
| const char* name) {
|
| + // Create code object in the heap.
|
| + CodeDesc desc;
|
| + masm_.GetCode(&desc);
|
| + Handle<Code> code = factory()->NewCode(desc, flags, masm_.CodeObject());
|
| +#ifdef ENABLE_DISASSEMBLER
|
| + if (FLAG_print_code_stubs) code->Disassemble(name);
|
| +#endif
|
| + return code;
|
| +}
|
| +
|
| +
|
| +MaybeObject* StubCompiler::TryGetCodeWithFlags(Code::Flags flags,
|
| + const char* name) {
|
| // Check for allocation failures during stub compilation.
|
| if (failure_->IsFailure()) return failure_;
|
|
|
| @@ -1678,11 +1677,12 @@ MaybeObject* StubCompiler::GetCodeWithFlags(Code::Flags flags,
|
| }
|
|
|
|
|
| -MaybeObject* StubCompiler::GetCodeWithFlags(Code::Flags flags, String* name) {
|
| +MaybeObject* StubCompiler::TryGetCodeWithFlags(Code::Flags flags,
|
| + String* name) {
|
| if (FLAG_print_code_stubs && (name != NULL)) {
|
| - return GetCodeWithFlags(flags, *name->ToCString());
|
| + return TryGetCodeWithFlags(flags, *name->ToCString());
|
| }
|
| - return GetCodeWithFlags(flags, reinterpret_cast<char*>(NULL));
|
| + return TryGetCodeWithFlags(flags, reinterpret_cast<char*>(NULL));
|
| }
|
|
|
|
|
| @@ -1703,7 +1703,7 @@ void StubCompiler::LookupPostInterceptor(JSObject* holder,
|
|
|
| MaybeObject* LoadStubCompiler::GetCode(PropertyType type, String* name) {
|
| Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, type);
|
| - MaybeObject* result = GetCodeWithFlags(flags, name);
|
| + MaybeObject* result = TryGetCodeWithFlags(flags, name);
|
| if (!result->IsFailure()) {
|
| PROFILE(isolate(),
|
| CodeCreateEvent(Logger::LOAD_IC_TAG,
|
| @@ -1722,7 +1722,7 @@ MaybeObject* KeyedLoadStubCompiler::GetCode(PropertyType type,
|
| InlineCacheState state) {
|
| Code::Flags flags = Code::ComputeFlags(
|
| Code::KEYED_LOAD_IC, state, Code::kNoExtraICState, type);
|
| - MaybeObject* result = GetCodeWithFlags(flags, name);
|
| + MaybeObject* result = TryGetCodeWithFlags(flags, name);
|
| if (!result->IsFailure()) {
|
| PROFILE(isolate(),
|
| CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG,
|
| @@ -1739,7 +1739,7 @@ MaybeObject* KeyedLoadStubCompiler::GetCode(PropertyType type,
|
| MaybeObject* StoreStubCompiler::GetCode(PropertyType type, String* name) {
|
| Code::Flags flags =
|
| Code::ComputeMonomorphicFlags(Code::STORE_IC, type, strict_mode_);
|
| - MaybeObject* result = GetCodeWithFlags(flags, name);
|
| + MaybeObject* result = TryGetCodeWithFlags(flags, name);
|
| if (!result->IsFailure()) {
|
| PROFILE(isolate(),
|
| CodeCreateEvent(Logger::STORE_IC_TAG,
|
| @@ -1758,7 +1758,7 @@ MaybeObject* KeyedStoreStubCompiler::GetCode(PropertyType type,
|
| InlineCacheState state) {
|
| Code::Flags flags =
|
| Code::ComputeFlags(Code::KEYED_STORE_IC, state, strict_mode_, type);
|
| - MaybeObject* result = GetCodeWithFlags(flags, name);
|
| + MaybeObject* result = TryGetCodeWithFlags(flags, name);
|
| if (!result->IsFailure()) {
|
| PROFILE(isolate(),
|
| CodeCreateEvent(Logger::KEYED_STORE_IC_TAG,
|
| @@ -1846,7 +1846,7 @@ MaybeObject* CallStubCompiler::GetCode(PropertyType type, String* name) {
|
| extra_state_,
|
| cache_holder_,
|
| argc);
|
| - return GetCodeWithFlags(flags, name);
|
| + return TryGetCodeWithFlags(flags, name);
|
| }
|
|
|
|
|
| @@ -1862,7 +1862,7 @@ MaybeObject* CallStubCompiler::GetCode(JSFunction* function) {
|
| MaybeObject* ConstructStubCompiler::GetCode() {
|
| Code::Flags flags = Code::ComputeFlags(Code::STUB);
|
| Object* result;
|
| - { MaybeObject* maybe_result = GetCodeWithFlags(flags, "ConstructStub");
|
| + { MaybeObject* maybe_result = TryGetCodeWithFlags(flags, "ConstructStub");
|
| if (!maybe_result->ToObject(&result)) return maybe_result;
|
| }
|
| Code* code = Code::cast(result);
|
|
|