| Index: src/stub-cache.cc
|
| ===================================================================
|
| --- src/stub-cache.cc (revision 3935)
|
| +++ src/stub-cache.cc (working copy)
|
| @@ -105,7 +105,7 @@
|
| if (code->IsFailure()) return code;
|
| LOG(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
|
| Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
|
| - if (result->IsFailure()) return code;
|
| + if (result->IsFailure()) return result;
|
| }
|
| return Set(name, receiver->map(), Code::cast(code));
|
| }
|
| @@ -124,7 +124,7 @@
|
| if (code->IsFailure()) return code;
|
| LOG(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
|
| Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
|
| - if (result->IsFailure()) return code;
|
| + if (result->IsFailure()) return result;
|
| }
|
| return Set(name, receiver->map(), Code::cast(code));
|
| }
|
| @@ -143,7 +143,7 @@
|
| if (code->IsFailure()) return code;
|
| LOG(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
|
| Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
|
| - if (result->IsFailure()) return code;
|
| + if (result->IsFailure()) return result;
|
| }
|
| return Set(name, receiver->map(), Code::cast(code));
|
| }
|
| @@ -160,7 +160,7 @@
|
| if (code->IsFailure()) return code;
|
| LOG(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
|
| Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
|
| - if (result->IsFailure()) return code;
|
| + if (result->IsFailure()) return result;
|
| }
|
| return Set(name, receiver->map(), Code::cast(code));
|
| }
|
| @@ -189,7 +189,7 @@
|
| if (code->IsFailure()) return code;
|
| LOG(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
|
| Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
|
| - if (result->IsFailure()) return code;
|
| + if (result->IsFailure()) return result;
|
| }
|
| return Set(name, receiver->map(), Code::cast(code));
|
| }
|
| @@ -351,7 +351,7 @@
|
| if (code->IsFailure()) return code;
|
| LOG(CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
|
| Object* result = receiver->map()->UpdateCodeCache(name, Code::cast(code));
|
| - if (result->IsFailure()) return code;
|
| + if (result->IsFailure()) return result;
|
| }
|
| return Set(name, receiver->map(), Code::cast(code));
|
| }
|
| @@ -484,7 +484,10 @@
|
| Object* code = map->FindInCodeCache(name, flags);
|
| if (code->IsUndefined()) {
|
| CallStubCompiler compiler(argc, in_loop);
|
| - code = compiler.CompileCallField(object, holder, index, name);
|
| + code = compiler.CompileCallField(JSObject::cast(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));
|
| @@ -518,7 +521,9 @@
|
| Object* code = map->FindInCodeCache(name, flags);
|
| if (code->IsUndefined()) {
|
| CallStubCompiler compiler(argc, NOT_IN_LOOP);
|
| - code = compiler.CompileCallInterceptor(object, holder, name);
|
| + code = compiler.CompileCallInterceptor(JSObject::cast(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));
|
| @@ -561,7 +566,7 @@
|
| 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;
|
| + if (result->IsFailure()) return result;
|
| }
|
| return Set(name, receiver->map(), Code::cast(code));
|
| }
|
| @@ -920,6 +925,13 @@
|
| }
|
|
|
|
|
| +Object* KeyedLoadPropertyWithInterceptor(Arguments args) {
|
| + JSObject* receiver = JSObject::cast(args[0]);
|
| + uint32_t index = Smi::cast(args[1])->value();
|
| + return receiver->GetElementWithInterceptor(receiver, index);
|
| +}
|
| +
|
| +
|
| Object* StubCompiler::CompileCallInitialize(Code::Flags flags) {
|
| HandleScope scope;
|
| int argc = Code::ExtractArgumentsCountFromFlags(flags);
|
| @@ -1058,11 +1070,13 @@
|
| return GetCodeWithFlags(flags, reinterpret_cast<char*>(NULL));
|
| }
|
|
|
| +
|
| void StubCompiler::LookupPostInterceptor(JSObject* holder,
|
| String* name,
|
| LookupResult* lookup) {
|
| holder->LocalLookupRealNamedProperty(name, lookup);
|
| - if (lookup->IsNotFound()) {
|
| + if (!lookup->IsProperty()) {
|
| + lookup->NotFound();
|
| Object* proto = holder->GetPrototype();
|
| if (proto != Heap::null_value()) {
|
| proto->Lookup(name, lookup);
|
|
|