Changeset 36779 in webkit
- Timestamp:
- Sep 22, 2008 2:20:52 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r36778 r36779 1 2008-09-22 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Darin Adler. 4 5 Patch for https://bugs.webkit.org/show_bug.cgi?id=20982 6 Speed up the apply method of functions by special-casing array and 'arguments' objects 7 8 1% speedup on v8-raytrace. 9 10 Test: fast/js/function-apply.html 11 12 * kjs/Arguments.cpp: 13 (JSC::Arguments::fillArgList): 14 * kjs/Arguments.h: 15 * kjs/FunctionPrototype.cpp: 16 (JSC::functionProtoFuncApply): 17 * kjs/JSArray.cpp: 18 (JSC::JSArray::fillArgList): 19 * kjs/JSArray.h: 20 1 21 2008-09-22 Darin Adler <darin@apple.com> 2 22 -
trunk/JavaScriptCore/kjs/ArgList.h
r36263 r36779 65 65 #endif 66 66 { 67 } 68 69 void initialize(Register* buffer, size_t size) 70 { 71 ASSERT(!m_markSet); 72 ASSERT(isEmpty()); 73 74 m_buffer = buffer; 75 m_size = size; 76 #ifndef NDEBUG 77 m_isReadOnly = true; 78 #endif 67 79 } 68 80 -
trunk/JavaScriptCore/kjs/Arguments.cpp
r36753 r36779 92 92 } 93 93 94 void 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 94 127 bool Arguments::getOwnPropertySlot(ExecState* exec, unsigned i, PropertySlot& slot) 95 128 { -
trunk/JavaScriptCore/kjs/Arguments.h
r36743 r36779 44 44 virtual void mark(); 45 45 46 void fillArgList(ExecState*, ArgList&); 47 46 48 private: 47 49 virtual bool getOwnPropertySlot(ExecState*, const Identifier& propertyName, PropertySlot&); -
trunk/JavaScriptCore/kjs/FunctionPrototype.cpp
r36726 r36779 96 96 ArgList applyArgs; 97 97 if (!argArray->isUndefinedOrNull()) { 98 if (argArray->isObject() && 99 (static_cast<JSObject*>(argArray)->inherits(&JSArray::info) || 100 static_cast<JSObject*>(argArray)->inherits(&Arguments::info))) { 101 102 JSObject* argArrayObj = static_cast<JSObject*>(argArray); 103 unsigned int length = argArrayObj->get(exec, exec->propertyNames().length)->toUInt32(exec); 104 for (unsigned int i = 0; i < length; i++) 105 applyArgs.append(argArrayObj->get(exec, i)); 98 if (argArray->isObject()) { 99 if (static_cast<JSObject*>(argArray)->classInfo() == &Arguments::info) 100 static_cast<Arguments*>(argArray)->fillArgList(exec, applyArgs); 101 else if (exec->machine()->isJSArray(argArray)) 102 static_cast<JSArray*>(argArray)->fillArgList(exec, applyArgs); 103 else if (static_cast<JSObject*>(argArray)->inherits(&JSArray::info)) 104 static_cast<JSArray*>(argArray)->fillArgList(exec, applyArgs); 105 else 106 return throwError(exec, TypeError); 106 107 } else 107 108 return throwError(exec, TypeError); -
trunk/JavaScriptCore/kjs/JSArray.cpp
r36778 r36779 858 858 } 859 859 860 void JSArray::fillArgList(ExecState* exec, ArgList& args) 861 { 862 unsigned fastAccessLength = min(m_storage->m_length, m_fastAccessCutoff); 863 unsigned i = 0; 864 for (; i < fastAccessLength; ++i) 865 args.append(getIndex(i)); 866 for (; i < m_storage->m_length; ++i) 867 args.append(get(exec, i)); 868 } 869 860 870 unsigned JSArray::compactForSorting() 861 871 { -
trunk/JavaScriptCore/kjs/JSArray.h
r36778 r36779 75 75 } 76 76 77 void fillArgList(ExecState*, ArgList&); 78 77 79 protected: 78 80 virtual void put(ExecState*, const Identifier& propertyName, JSValue*, PutPropertySlot&); -
trunk/LayoutTests/ChangeLog
r36774 r36779 1 2008-09-22 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Darin Adler. 4 5 Test for https://bugs.webkit.org/show_bug.cgi?id=20982 6 7 * fast/js/function-apply-expected.txt: Added. 8 * fast/js/function-apply.html: Added. 9 * fast/js/resources/function-apply.js: Added. 10 1 11 2008-09-22 Simon Fraser <simon.fraser@apple.com> 2 12
Note: See TracChangeset
for help on using the changeset viewer.