Array.prototype.concat should allocate output storage only once.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 14 Apr 2014 18:04:20 +0000 (18:04 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 14 Apr 2014 18:04:20 +0000 (18:04 +0000)
commit49d79b5239d674f669c28e51575c30c3bbc56047
tree47997826198c7f0e71e38a6be1ede38204f02256
parent6961deb4a1355b1e8c3d993b3089dbf1fc28081a
Array.prototype.concat should allocate output storage only once.
<https://webkit.org/b/131609>

Do a first pass across 'this' and any arguments to compute the
final size of the resulting array from Array.prototype.concat.
This avoids having to grow the output incrementally as we go.

This also includes two other micro-optimizations:

- Mark getProperty() with ALWAYS_INLINE.

- Use JSArray::length() instead of taking the generic property
  lookup path when we know an argument is an Array.

My MBP says ~3% progression on Dromaeo/jslib-traverse-jquery.

Reviewed by Oliver & Darin.

* runtime/ArrayPrototype.cpp:
(JSC::getProperty):
(JSC::arrayProtoFuncConcat):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167255 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/ArrayPrototype.cpp