Index: src/ia32/stub-cache-ia32.cc |
=================================================================== |
--- src/ia32/stub-cache-ia32.cc (revision 4394) |
+++ src/ia32/stub-cache-ia32.cc (working copy) |
@@ -1948,7 +1948,33 @@ |
} |
+Object* LoadStubCompiler::CompileLoadNonExisting(JSObject* object) { |
+ // ----------- S t a t e ------------- |
+ // -- eax : receiver |
+ // -- ecx : name |
+ // -- esp[0] : return address |
+ // ----------------------------------- |
+ Label miss; |
+ // Check the maps of the full prototype chain. |
+ JSObject* last = object; |
+ while (last->GetPrototype() != Heap::null_value()) { |
+ last = JSObject::cast(last->GetPrototype()); |
+ } |
+ CheckPrototypes(object, eax, last, ebx, edx, Heap::empty_string(), &miss); |
+ |
+ // Return undefined if maps of the full prototype chain is still the same. |
+ __ mov(eax, Factory::undefined_value()); |
+ __ 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, |