Ignore:
Timestamp:
May 12, 2009, 1:58:56 AM (16 years ago)
Author:
[email protected]
Message:

Improve function call forwarding performance

Reviewed by Gavin Barraclough

Make creation of the Arguments object occur lazily, so it
is not necessarily created for every function that references
it. Then add logic to Function.apply to allow it to avoid
allocating the Arguments object at all. Helps a lot with
the function forwarding/binding logic in jQuery, Prototype,
and numerous other JS libraries.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/parser/Nodes.cpp

    r43479 r43559  
    460460            generator.emitNode(thisRegister.get(), m_args->m_listNode->m_expr);
    461461            ArgumentListNode* args = m_args->m_listNode->m_next;
    462             generator.emitNode(argsRegister.get(), args->m_expr);
     462            bool isArgumentsApply = false;
     463            if (args->m_expr->isResolveNode()) {
     464                ResolveNode* resolveNode = static_cast<ResolveNode*>(args->m_expr);
     465                isArgumentsApply = generator.willResolveToArguments(resolveNode->identifier());
     466                if (isArgumentsApply)
     467                    generator.emitMove(argsRegister.get(), generator.uncheckedRegisterForArguments());
     468            }
     469            if (!isArgumentsApply)
     470                generator.emitNode(argsRegister.get(), args->m_expr);
    463471            while ((args = args->m_next))
    464472                generator.emitNode(args->m_expr);
Note: See TracChangeset for help on using the changeset viewer.