| Index: src/stub-cache.cc
|
| diff --git a/src/stub-cache.cc b/src/stub-cache.cc
|
| index 67002a36b17abdba2a2a136ff226f00ed2237d5f..751798d80365bc859a18a2782fd5e67ddbf8e88f 100644
|
| --- a/src/stub-cache.cc
|
| +++ b/src/stub-cache.cc
|
| @@ -1208,6 +1208,40 @@ Register BaseLoadStoreStubCompiler::HandlerFrontend(Handle<JSObject> object,
|
| }
|
|
|
|
|
| +void LoadStubCompiler::NonexistentHandlerFrontend(
|
| + Handle<JSObject> object,
|
| + Handle<JSObject> last,
|
| + Handle<Name> name,
|
| + Label* success,
|
| + Handle<GlobalObject> global) {
|
| + Label miss;
|
| +
|
| + Register holder =
|
| + HandlerFrontendHeader(object, receiver(), last, name, &miss);
|
| +
|
| + if (!last->HasFastProperties() &&
|
| + !last->IsJSGlobalObject() &&
|
| + !last->IsJSGlobalProxy()) {
|
| + if (!name->IsUniqueName()) {
|
| + ASSERT(name->IsString());
|
| + name = factory()->InternalizeString(Handle<String>::cast(name));
|
| + }
|
| + ASSERT(last->property_dictionary()->FindEntry(*name) ==
|
| + NameDictionary::kNotFound);
|
| + GenerateDictionaryNegativeLookup(masm(), &miss, holder, name,
|
| + scratch2(), scratch3());
|
| + }
|
| +
|
| + // If the last object in the prototype chain is a global object,
|
| + // check that the global property cell is empty.
|
| + if (!global.is_null()) {
|
| + GenerateCheckPropertyCell(masm(), global, name, scratch2(), &miss);
|
| + }
|
| +
|
| + HandlerFrontendFooter(name, success, &miss);
|
| +}
|
| +
|
| +
|
| Handle<Code> LoadStubCompiler::CompileLoadField(
|
| Handle<JSObject> object,
|
| Handle<JSObject> holder,
|
|
|