Index: src/stub-cache.cc |
diff --git a/src/stub-cache.cc b/src/stub-cache.cc |
index 52e7f4cf3dfa8fc7581c63dca111b718fd86b96d..a4e89facbdf5c2479dd61f62fb0b3898b7262aec 100644 |
--- a/src/stub-cache.cc |
+++ b/src/stub-cache.cc |
@@ -1118,6 +1118,33 @@ Handle<Code> StoreStubCompiler::CompileStoreField(Handle<JSObject> object, |
} |
+Handle<Code> StoreStubCompiler::CompileStoreArrayLength(Handle<JSObject> object, |
+ LookupResult* lookup, |
+ Handle<Name> name) { |
+ // This accepts as a receiver anything JSArray::SetElementsLength accepts |
+ // (currently anything except for external arrays which means anything with |
+ // elements of FixedArray type). Value must be a number, but only smis are |
+ // accepted as the most common case. |
+ Label miss; |
+ |
+ // It is not necessary to check object since all the necessary checks are |
Toon Verwaest
2014/03/17 15:12:10
Remove this comment. This is true for all ICs.
Igor Sheludko
2014/03/17 15:43:17
Done.
|
+ // done at stub installation time. |
+ |
+ // Check that value is a smi. |
+ __ JumpIfNotSmi(value(), &miss); |
+ |
+ // Generate tail call to StoreIC_ArrayLength. |
+ GenerateStoreArrayLength(); |
+ |
+ // Handle miss case. |
+ __ bind(&miss); |
+ TailCallBuiltin(masm(), MissBuiltin(kind())); |
+ |
+ // Return the generated code. |
+ return GetCode(kind(), Code::FAST, name); |
+} |
+ |
+ |
Handle<Code> StoreStubCompiler::CompileStoreViaSetter( |
Handle<JSObject> object, |
Handle<JSObject> holder, |