Reviewed by Maciej.
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 9 Nov 2007 05:50:19 +0000 (05:50 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 9 Nov 2007 05:50:19 +0000 (05:50 +0000)
commit0167086c11eb6721a89718cee585b15033d5596b
tree642ab9e9381d308524c2ee32de7aaf95214eb168
parenta9755a7cee22ea56f626d32c94c1f3ce20aa8375
    Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=15906
          getting characters by indexing into a string is very slow

        This fixes one source of the slowness -- the conversion to an unused
        Identifier as we call the get function from the slot -- but doesn't
        fix others, such as the fact that we have to allocate a new UString::Rep
        for every single character.

        Speeds up string-base64 30%, and at least 0.5% overall.
        But does slow down access-fannkuch quite a bit. Might be worth
        revisiting in the future to see what we can do about that (although
        I did look at a profile for a while).

        * kjs/property_slot.h: Add a new marker for "numeric" property slots;
        slots where we don't need to pass the identifier to the get function.
        (KJS::PropertySlot::getValue): Added code to call the numeric get function.
        (KJS::PropertySlot::setCustomNumeric): Added.
        * kjs/string_object.cpp:
        (KJS::StringInstance::indexGetter): Changed to use substr() instead
        of constructing a wholly new UString each time.
        (KJS::stringInstanceNumericPropertyGetter): Added. Like indexGetter, but
        takes advantage of setCustomNumeric to avoid creating an Identifier.
        (KJS::StringInstance::getOwnPropertySlot): Changed to use setCustomNumeric.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@27633 268f45cc-cd09-0410-ab3c-d52691b4dbfc
JavaScriptCore/ChangeLog
JavaScriptCore/kjs/property_slot.h
JavaScriptCore/kjs/string_object.cpp