Ignore:
Timestamp:
Sep 22, 2008, 2:20:52 PM (17 years ago)
Author:
[email protected]
Message:

JavaScriptCore:

2008-09-22 Sam Weinig <[email protected]>

Reviewed by Darin Adler.

Patch for https://bugs.webkit.org/show_bug.cgi?id=20982
Speed up the apply method of functions by special-casing array and 'arguments' objects

1% speedup on v8-raytrace.

Test: fast/js/function-apply.html

  • kjs/Arguments.cpp: (JSC::Arguments::fillArgList):
  • kjs/Arguments.h:
  • kjs/FunctionPrototype.cpp: (JSC::functionProtoFuncApply):
  • kjs/JSArray.cpp: (JSC::JSArray::fillArgList):
  • kjs/JSArray.h:

LayoutTests:

2008-09-22 Sam Weinig <[email protected]>

Reviewed by Darin Adler.

Test for https://bugs.webkit.org/show_bug.cgi?id=20982

  • fast/js/function-apply-expected.txt: Added.
  • fast/js/function-apply.html: Added.
  • fast/js/resources/function-apply.js: Added.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/Arguments.cpp

    r36753 r36779  
    9292}
    9393
     94void Arguments::fillArgList(ExecState* exec, ArgList& args)
     95{
     96    if (!d->deletedArguments) {
     97        if (d->numParameters == d->numArguments) {
     98            args.initialize(&d->activation->registerAt(d->firstArgumentIndex), d->numArguments);
     99            return;
     100        }
     101
     102        unsigned parametersLength = min(d->numParameters, d->numArguments);
     103        unsigned i = 0;
     104        for (; i < parametersLength; ++i)
     105            args.append(d->activation->uncheckedSymbolTableGetValue(d->firstArgumentIndex + i));
     106        for (; i < d->numArguments; ++i)
     107            args.append(d->extraArguments[i - d->numParameters]);
     108        return;
     109    }
     110
     111    unsigned parametersLength = min(d->numParameters, d->numArguments);
     112    unsigned i = 0;
     113    for (; i < parametersLength; ++i) {
     114        if (!d->deletedArguments[i])
     115            args.append(d->activation->uncheckedSymbolTableGetValue(d->firstArgumentIndex + i));
     116        else
     117            args.append(get(exec, i));
     118    }
     119    for (; i < d->numArguments; ++i) {
     120        if (!d->deletedArguments[i])
     121            args.append(d->extraArguments[i - d->numParameters]);
     122        else
     123            args.append(get(exec, i));
     124    }
     125}
     126
    94127bool Arguments::getOwnPropertySlot(ExecState* exec, unsigned i, PropertySlot& slot)
    95128{
Note: See TracChangeset for help on using the changeset viewer.