Reviewed by Geoff.
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 1 Jan 2008 19:13:40 +0000 (19:13 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 1 Jan 2008 19:13:40 +0000 (19:13 +0000)
commitc290f61c182ac81d726afc20f67f4b48b8786a5c
tree0e6211b898f84ce53c181929ac6f18ab7878f988
parent1f7c8666700c369ce8717e8a87a83ad51f8271ab
    Reviewed by Geoff.

        - http://bugs.webkit.org/show_bug.cgi?id=16683
          speed up function calls by making ScopeChain::push cheaper

        This gives a 1.019x speedup on SunSpider.

        After doing this, I realized this probably will be obsolete when the optimization
        to avoid creating an activation object is done. When we do that one we should check
        if rolling this out will speed things up, since this does add overhead at the time
        you copy the scope chain.

        * kjs/object.h: Removed the ScopeChain::release function. It was
        marked inline, and called in exactly one place, so moved it there.
        No idea why it was in this header file!

        * kjs/scope_chain.cpp: Removed the overload of the ScopeChain::push
        function that takes another ScopeChain. It was unused. I think we used
        it over in WebCore at one point, but not any more.

        * kjs/scope_chain.h: Changed ScopeChainNode into a struct rather than
        a class, got rid of its constructor so we can have one that's uninitialized,
        and moved the refCount into a derived struct, ScopeChainHeapNode. Made _node
        mutable so it can be changed in the moveToHeap function. Changed the copy
        constructor and assignment operator to call moveToHeap, since the top node
        can't be shared when it's embedded in another ScopeChain object. Updated
        functions as needed to handle the case where the first object isn't on the
        heap or to add casts for cases where it's guaranteed to be. Changed the push
        function to always put the new node into the ScopeChain object; it will get
        put onto the heap when needed later.

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