Handle array construction on native code.
authorsgjesse@chromium.org <sgjesse@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 16 Sep 2009 11:17:57 +0000 (11:17 +0000)
committersgjesse@chromium.org <sgjesse@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 16 Sep 2009 11:17:57 +0000 (11:17 +0000)
commit677c043feea6b94812ee7e9f43ef097c787cbfc1
treea4c760ab585f637b8ee9362ff0d498f9d9b69cbd
parentfb2897bcf9cd6ba44d21cc8e3834ae3f06b92b7e
Handle array construction on native code.

The construction of arrays when using the the Array function either as a constructor or a normal function is now handled fully in generated code in most cases. Only when Array is called with one argument which is either negative or abowe JSObject::kInitialMaxFastElementArray (which is currently 1000) or if the allocated object cannot fit in the room left in new space is the runtime system entered.

Two new native code built-in functions are added one for normal invocation and one for the construct call. The existing C++ builtin is renamed, but kept. When the normal invocation cannot be handled in generated code the C++ builtin is called. When the construct invocation cannot be handled in native code the generic construct stub is called (which will end up in the C++ builtin through a construct trampoline).

One thing that might be changed is preserving esi (constructor function) during the handling of a construct call. We know precisily what function we where calling anyway and can just reload it. This could remove the parameter construct_call to ArrayNativeCode and remove the handling of this from that function.

The X64 and ARM implementations are not part of this changelist.
Review URL: http://codereview.chromium.org/193125

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2899 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
src/arm/builtins-arm.cc
src/bootstrapper.cc
src/builtins.cc
src/builtins.h
src/ia32/builtins-ia32.cc
src/v8-counters.h
src/x64/builtins-x64.cc
test/mjsunit/array-construtor.js [new file with mode: 0644]