| Index: src/x64/stub-cache-x64.cc
|
| ===================================================================
|
| --- src/x64/stub-cache-x64.cc (revision 4394)
|
| +++ src/x64/stub-cache-x64.cc (working copy)
|
| @@ -1144,6 +1144,36 @@
|
| }
|
|
|
|
|
| +Object* LoadStubCompiler::CompileLoadNonExisting(JSObject* object) {
|
| + // ----------- S t a t e -------------
|
| + // -- rcx : name
|
| + // -- rsp[0] : return address
|
| + // -- rsp[8] : receiver
|
| + // -----------------------------------
|
| + Label miss;
|
| +
|
| + // Load receiver.
|
| + __ movq(rax, Operand(rsp, kPointerSize));
|
| +
|
| + // Check the maps of the full prototype chain.
|
| + JSObject* last = object;
|
| + while (last->GetPrototype() != Heap::null_value()) {
|
| + last = JSObject::cast(last->GetPrototype());
|
| + }
|
| + CheckPrototypes(object, rax, last, rbx, rdx, Heap::empty_string(), &miss);
|
| +
|
| + // Return undefined if maps of the full prototype chain is still the same.
|
| + __ LoadRoot(rax, Heap::kUndefinedValueRootIndex);
|
| + __ ret(0);
|
| +
|
| + __ bind(&miss);
|
| + GenerateLoadMiss(masm(), Code::LOAD_IC);
|
| +
|
| + // Return the generated code.
|
| + return GetCode(NON_EXISTING, Heap::empty_string());
|
| +}
|
| +
|
| +
|
| Object* LoadStubCompiler::CompileLoadField(JSObject* object,
|
| JSObject* holder,
|
| int index,
|
|
|