Ignore:
Timestamp:
Sep 26, 2008, 7:36:15 PM (17 years ago)
Author:
[email protected]
Message:

JavaScriptCore:

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

Reviewed by Darin Adler.

Patch for https://bugs.webkit.org/show_bug.cgi?id=21152
Speedup static property get/put

Convert getting/setting static property values to use static functions
instead of storing an integer and switching in getValueProperty/putValueProperty.

  • kjs/JSObject.cpp: (JSC::JSObject::deleteProperty): (JSC::JSObject::getPropertyAttributes):
  • kjs/MathObject.cpp: (JSC::MathObject::getOwnPropertySlot):
  • kjs/NumberConstructor.cpp: (JSC::numberConstructorNaNValue): (JSC::numberConstructorNegInfinity): (JSC::numberConstructorPosInfinity): (JSC::numberConstructorMaxValue): (JSC::numberConstructorMinValue):
  • kjs/PropertySlot.h: (JSC::PropertySlot::):
  • kjs/RegExpConstructor.cpp: (JSC::regExpConstructorDollar1): (JSC::regExpConstructorDollar2): (JSC::regExpConstructorDollar3): (JSC::regExpConstructorDollar4): (JSC::regExpConstructorDollar5): (JSC::regExpConstructorDollar6): (JSC::regExpConstructorDollar7): (JSC::regExpConstructorDollar8): (JSC::regExpConstructorDollar9): (JSC::regExpConstructorInput): (JSC::regExpConstructorMultiline): (JSC::regExpConstructorLastMatch): (JSC::regExpConstructorLastParen): (JSC::regExpConstructorLeftContext): (JSC::regExpConstructorRightContext): (JSC::setRegExpConstructorInput): (JSC::setRegExpConstructorMultiline): (JSC::RegExpConstructor::setInput): (JSC::RegExpConstructor::setMultiline): (JSC::RegExpConstructor::multiline):
  • kjs/RegExpConstructor.h:
  • kjs/RegExpObject.cpp: (JSC::regExpObjectGlobal): (JSC::regExpObjectIgnoreCase): (JSC::regExpObjectMultiline): (JSC::regExpObjectSource): (JSC::regExpObjectLastIndex): (JSC::setRegExpObjectLastIndex):
  • kjs/RegExpObject.h: (JSC::RegExpObject::setLastIndex): (JSC::RegExpObject::lastIndex): (JSC::RegExpObject::RegExpObjectData::RegExpObjectData):
  • kjs/StructureID.cpp: (JSC::StructureID::getEnumerablePropertyNames):
  • kjs/create_hash_table:
  • kjs/lexer.cpp: (JSC::Lexer::lex):
  • kjs/lookup.cpp: (JSC::HashTable::createTable): (JSC::HashTable::deleteTable): (JSC::setUpStaticFunctionSlot):
  • kjs/lookup.h: (JSC::HashEntry::initialize): (JSC::HashEntry::setKey): (JSC::HashEntry::key): (JSC::HashEntry::attributes): (JSC::HashEntry::function): (JSC::HashEntry::functionLength): (JSC::HashEntry::propertyGetter): (JSC::HashEntry::propertyPutter): (JSC::HashEntry::lexerValue): (JSC::HashEntry::): (JSC::HashTable::entry): (JSC::getStaticPropertySlot): (JSC::getStaticValueSlot): (JSC::lookupPut):

WebCore:

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

Reviewed by Darin Adler.

Patch for https://bugs.webkit.org/show_bug.cgi?id=21152
Speedup static property get/put

  • DerivedSources.make:
  • GNUmakefile.am:
  • WebCore.pro:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • bindings/js/JSDOMBinding.cpp:
  • bindings/js/JSDOMBinding.h:
  • bindings/js/JSDOMWindowBase.cpp: (WebCore::getDOMConstructor): (WebCore::jsDOMWindowBaseCrypto): (WebCore::jsDOMWindowBaseEvent): (WebCore::jsDOMWindowBaseImage): (WebCore::jsDOMWindowBaseMessageChannel): (WebCore::jsDOMWindowBaseOption): (WebCore::jsDOMWindowBaseXMLHttpRequest): (WebCore::jsDOMWindowBaseAudio): (WebCore::jsDOMWindowBaseXSLTProcessor): (WebCore::jsDOMWindowBaseOnabort): (WebCore::jsDOMWindowBaseOnblur): (WebCore::jsDOMWindowBaseOnchange): (WebCore::jsDOMWindowBaseOnclick): (WebCore::jsDOMWindowBaseOndblclick): (WebCore::jsDOMWindowBaseOnerror): (WebCore::jsDOMWindowBaseOnfocus): (WebCore::jsDOMWindowBaseOnkeydown): (WebCore::jsDOMWindowBaseOnkeypress): (WebCore::jsDOMWindowBaseOnkeyup): (WebCore::jsDOMWindowBaseOnload): (WebCore::jsDOMWindowBaseOnmousedown): (WebCore::jsDOMWindowBaseOnmousemove): (WebCore::jsDOMWindowBaseOnmouseout): (WebCore::jsDOMWindowBaseOnmouseover): (WebCore::jsDOMWindowBaseOnmouseup): (WebCore::jsDOMWindowBaseOnMouseWheel): (WebCore::jsDOMWindowBaseOnreset): (WebCore::jsDOMWindowBaseOnresize): (WebCore::jsDOMWindowBaseOnscroll): (WebCore::jsDOMWindowBaseOnsearch): (WebCore::jsDOMWindowBaseOnselect): (WebCore::jsDOMWindowBaseOnsubmit): (WebCore::jsDOMWindowBaseOnbeforeunload): (WebCore::jsDOMWindowBaseOnunload): (WebCore::jsDOMWindowBaseOnWebKitAnimationStart): (WebCore::jsDOMWindowBaseOnWebKitAnimationIteration): (WebCore::jsDOMWindowBaseOnWebKitAnimationEnd): (WebCore::jsDOMWindowBaseOnWebKitTransitionEnd): (WebCore::JSDOMWindowBase::getOwnPropertySlot): (WebCore::JSDOMWindowBase::put): (WebCore::setJSDOMWindowBaseOnabort): (WebCore::setJSDOMWindowBaseOnblur): (WebCore::setJSDOMWindowBaseOnchange): (WebCore::setJSDOMWindowBaseOnclick): (WebCore::setJSDOMWindowBaseOndblclick): (WebCore::setJSDOMWindowBaseOnerror): (WebCore::setJSDOMWindowBaseOnfocus): (WebCore::setJSDOMWindowBaseOnkeydown): (WebCore::setJSDOMWindowBaseOnkeypress): (WebCore::setJSDOMWindowBaseOnkeyup): (WebCore::setJSDOMWindowBaseOnload): (WebCore::setJSDOMWindowBaseOnmousedown): (WebCore::setJSDOMWindowBaseOnmousemove): (WebCore::setJSDOMWindowBaseOnmouseout): (WebCore::setJSDOMWindowBaseOnmouseover): (WebCore::setJSDOMWindowBaseOnmouseup): (WebCore::setJSDOMWindowBaseOnMouseWheel): (WebCore::setJSDOMWindowBaseOnreset): (WebCore::setJSDOMWindowBaseOnresize): (WebCore::setJSDOMWindowBaseOnscroll): (WebCore::setJSDOMWindowBaseOnsearch): (WebCore::setJSDOMWindowBaseOnselect): (WebCore::setJSDOMWindowBaseOnsubmit): (WebCore::setJSDOMWindowBaseOnbeforeunload): (WebCore::setJSDOMWindowBaseOnunload): (WebCore::setJSDOMWindowBaseOnWebKitAnimationStart): (WebCore::setJSDOMWindowBaseOnWebKitAnimationIteration): (WebCore::setJSDOMWindowBaseOnWebKitAnimationEnd): (WebCore::setJSDOMWindowBaseOnWebKitTransitionEnd): (WebCore::setJSDOMWindowBaseEvent): (WebCore::setJSDOMWindowBaseAudio): (WebCore::setJSDOMWindowBaseImage): (WebCore::setJSDOMWindowBaseMessageChannel): (WebCore::setJSDOMWindowBaseOption): (WebCore::setJSDOMWindowBaseXMLHttpRequest): (WebCore::setJSDOMWindowBaseXSLTProcessor):
  • bindings/js/JSDOMWindowBase.h:
  • bindings/js/JSDOMWindowCustom.cpp: (WebCore::nonCachingStaticCloseFunctionGetter): (WebCore::nonCachingStaticBlurFunctionGetter): (WebCore::nonCachingStaticFocusFunctionGetter): (WebCore::nonCachingStaticPostMessageFunctionGetter):
  • bindings/js/JSDOMWindowCustom.h: (WebCore::JSDOMWindow::customGetOwnPropertySlot):
  • bindings/js/JSEventTargetBase.cpp:
  • bindings/js/JSEventTargetBase.h: (WebCore::JSEventTargetBasePrototype::getOwnPropertySlot): (WebCore::JSEventTargetBasePrototype::classInfo):
  • bindings/js/JSEventTargetNode.cpp: (WebCore::): (WebCore::JSEventTargetNode::getOwnPropertySlot): (WebCore::JSEventTargetNode::put):
  • bindings/js/JSEventTargetNode.h: (WebCore::JSEventTargetNode::classInfo): (WebCore::JSEventTargetNode::prototypeClassName):
  • bindings/js/JSEventTargetSVGElementInstance.cpp: (WebCore::): (WebCore::JSEventTargetSVGElementInstance::getOwnPropertySlot): (WebCore::JSEventTargetSVGElementInstance::put):
  • bindings/js/JSEventTargetSVGElementInstance.h: (WebCore::JSEventTargetSVGElementInstance::classInfo): (WebCore::JSEventTargetSVGElementInstance::prototypeClassName):
  • bindings/js/JSHTMLInputElementCustom.cpp: (WebCore::JSHTMLInputElement::customGetOwnPropertySlot):
  • bindings/js/JSHistoryCustom.cpp: (WebCore::nonCachingStaticBackFunctionGetter): (WebCore::nonCachingStaticForwardFunctionGetter): (WebCore::nonCachingStaticGoFunctionGetter): (WebCore::JSHistory::customGetOwnPropertySlot):
  • bindings/js/JSLocationCustom.cpp: (WebCore::nonCachingStaticReplaceFunctionGetter): (WebCore::nonCachingStaticReloadFunctionGetter): (WebCore::nonCachingStaticAssignFunctionGetter): (WebCore::JSLocation::customGetOwnPropertySlot): (WebCore::JSLocation::customPut):
  • bindings/scripts/CodeGeneratorJS.pm:
File:
1 edited

Legend:

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

    r36784 r36977  
    2121#include "config.h"
    2222#include "RegExpConstructor.h"
    23 #include "RegExpConstructor.lut.h"
    2423
    2524#include "ArrayPrototype.h"
     
    3534namespace JSC {
    3635
     36static JSValue* regExpConstructorInput(ExecState*, const Identifier&, const PropertySlot&);
     37static JSValue* regExpConstructorMultiline(ExecState*, const Identifier&, const PropertySlot&);
     38static JSValue* regExpConstructorLastMatch(ExecState*, const Identifier&, const PropertySlot&);
     39static JSValue* regExpConstructorLastParen(ExecState*, const Identifier&, const PropertySlot&);
     40static JSValue* regExpConstructorLeftContext(ExecState*, const Identifier&, const PropertySlot&);
     41static JSValue* regExpConstructorRightContext(ExecState*, const Identifier&, const PropertySlot&);
     42static JSValue* regExpConstructorDollar1(ExecState*, const Identifier&, const PropertySlot&);
     43static JSValue* regExpConstructorDollar2(ExecState*, const Identifier&, const PropertySlot&);
     44static JSValue* regExpConstructorDollar3(ExecState*, const Identifier&, const PropertySlot&);
     45static JSValue* regExpConstructorDollar4(ExecState*, const Identifier&, const PropertySlot&);
     46static JSValue* regExpConstructorDollar5(ExecState*, const Identifier&, const PropertySlot&);
     47static JSValue* regExpConstructorDollar6(ExecState*, const Identifier&, const PropertySlot&);
     48static JSValue* regExpConstructorDollar7(ExecState*, const Identifier&, const PropertySlot&);
     49static JSValue* regExpConstructorDollar8(ExecState*, const Identifier&, const PropertySlot&);
     50static JSValue* regExpConstructorDollar9(ExecState*, const Identifier&, const PropertySlot&);
     51
     52static void setRegExpConstructorInput(ExecState*, JSObject*, JSValue*);
     53static void setRegExpConstructorMultiline(ExecState*, JSObject*, JSValue*);
     54
     55} // namespace JSC
     56
     57#include "RegExpConstructor.lut.h"
     58
     59namespace JSC {
     60
    3761ASSERT_CLASS_FITS_IN_CELL(RegExpConstructor);
    3862
     
    4165/* Source for RegExpConstructor.lut.h
    4266@begin regExpConstructorTable
    43     input           RegExpConstructor::Input          None
    44     $_              RegExpConstructor::Input          DontEnum
    45     multiline       RegExpConstructor::Multiline      None
    46     $*              RegExpConstructor::Multiline      DontEnum
    47     lastMatch       RegExpConstructor::LastMatch      DontDelete|ReadOnly
    48     $&              RegExpConstructor::LastMatch      DontDelete|ReadOnly|DontEnum
    49     lastParen       RegExpConstructor::LastParen      DontDelete|ReadOnly
    50     $+              RegExpConstructor::LastParen      DontDelete|ReadOnly|DontEnum
    51     leftContext     RegExpConstructor::LeftContext    DontDelete|ReadOnly
    52     $`              RegExpConstructor::LeftContext    DontDelete|ReadOnly|DontEnum
    53     rightContext    RegExpConstructor::RightContext   DontDelete|ReadOnly
    54     $'              RegExpConstructor::RightContext   DontDelete|ReadOnly|DontEnum
    55     $1              RegExpConstructor::Dollar1        DontDelete|ReadOnly
    56     $2              RegExpConstructor::Dollar2        DontDelete|ReadOnly
    57     $3              RegExpConstructor::Dollar3        DontDelete|ReadOnly
    58     $4              RegExpConstructor::Dollar4        DontDelete|ReadOnly
    59     $5              RegExpConstructor::Dollar5        DontDelete|ReadOnly
    60     $6              RegExpConstructor::Dollar6        DontDelete|ReadOnly
    61     $7              RegExpConstructor::Dollar7        DontDelete|ReadOnly
    62     $8              RegExpConstructor::Dollar8        DontDelete|ReadOnly
    63     $9              RegExpConstructor::Dollar9        DontDelete|ReadOnly
     67    input           regExpConstructorInput          None
     68    $_              regExpConstructorInput          DontEnum
     69    multiline       regExpConstructorMultiline      None
     70    $*              regExpConstructorMultiline      DontEnum
     71    lastMatch       regExpConstructorLastMatch      DontDelete|ReadOnly
     72    $&              regExpConstructorLastMatch      DontDelete|ReadOnly|DontEnum
     73    lastParen       regExpConstructorLastParen      DontDelete|ReadOnly
     74    $+              regExpConstructorLastParen      DontDelete|ReadOnly|DontEnum
     75    leftContext     regExpConstructorLeftContext    DontDelete|ReadOnly
     76    $`              regExpConstructorLeftContext    DontDelete|ReadOnly|DontEnum
     77    rightContext    regExpConstructorRightContext   DontDelete|ReadOnly
     78    $'              regExpConstructorRightContext   DontDelete|ReadOnly|DontEnum
     79    $1              regExpConstructorDollar1        DontDelete|ReadOnly
     80    $2              regExpConstructorDollar2        DontDelete|ReadOnly
     81    $3              regExpConstructorDollar3        DontDelete|ReadOnly
     82    $4              regExpConstructorDollar4        DontDelete|ReadOnly
     83    $5              regExpConstructorDollar5        DontDelete|ReadOnly
     84    $6              regExpConstructorDollar6        DontDelete|ReadOnly
     85    $7              regExpConstructorDollar7        DontDelete|ReadOnly
     86    $8              regExpConstructorDollar8        DontDelete|ReadOnly
     87    $9              regExpConstructorDollar9        DontDelete|ReadOnly
    6488@end
    6589*/
     
    203227}
    204228
    205 JSValue* RegExpConstructor::getValueProperty(ExecState* exec, int token) const
    206 {
    207     switch (token) {
    208         case Dollar1:
    209             return getBackref(exec, 1);
    210         case Dollar2:
    211             return getBackref(exec, 2);
    212         case Dollar3:
    213             return getBackref(exec, 3);
    214         case Dollar4:
    215             return getBackref(exec, 4);
    216         case Dollar5:
    217             return getBackref(exec, 5);
    218         case Dollar6:
    219             return getBackref(exec, 6);
    220         case Dollar7:
    221             return getBackref(exec, 7);
    222         case Dollar8:
    223             return getBackref(exec, 8);
    224         case Dollar9:
    225             return getBackref(exec, 9);
    226         case Input:
    227             return jsString(exec, d->input);
    228         case Multiline:
    229             return jsBoolean(d->multiline);
    230         case LastMatch:
    231             return getBackref(exec, 0);
    232         case LastParen:
    233             return getLastParen(exec);
    234         case LeftContext:
    235             return getLeftContext(exec);
    236         case RightContext:
    237             return getRightContext(exec);
    238         default:
    239             ASSERT_NOT_REACHED();
    240     }
    241 
    242     return jsEmptyString(exec);
     229JSValue* regExpConstructorDollar1(ExecState* exec, const Identifier&, const PropertySlot& slot)
     230{
     231    return static_cast<RegExpConstructor*>(slot.slotBase())->getBackref(exec, 1);
     232}
     233
     234JSValue* regExpConstructorDollar2(ExecState* exec, const Identifier&, const PropertySlot& slot)
     235{
     236    return static_cast<RegExpConstructor*>(slot.slotBase())->getBackref(exec, 2);
     237}
     238
     239JSValue* regExpConstructorDollar3(ExecState* exec, const Identifier&, const PropertySlot& slot)
     240{
     241    return static_cast<RegExpConstructor*>(slot.slotBase())->getBackref(exec, 3);
     242}
     243
     244JSValue* regExpConstructorDollar4(ExecState* exec, const Identifier&, const PropertySlot& slot)
     245{
     246    return static_cast<RegExpConstructor*>(slot.slotBase())->getBackref(exec, 4);
     247}
     248
     249JSValue* regExpConstructorDollar5(ExecState* exec, const Identifier&, const PropertySlot& slot)
     250{
     251    return static_cast<RegExpConstructor*>(slot.slotBase())->getBackref(exec, 5);
     252}
     253
     254JSValue* regExpConstructorDollar6(ExecState* exec, const Identifier&, const PropertySlot& slot)
     255{
     256    return static_cast<RegExpConstructor*>(slot.slotBase())->getBackref(exec, 6);
     257}
     258
     259JSValue* regExpConstructorDollar7(ExecState* exec, const Identifier&, const PropertySlot& slot)
     260{
     261    return static_cast<RegExpConstructor*>(slot.slotBase())->getBackref(exec, 7);
     262}
     263
     264JSValue* regExpConstructorDollar8(ExecState* exec, const Identifier&, const PropertySlot& slot)
     265{
     266    return static_cast<RegExpConstructor*>(slot.slotBase())->getBackref(exec, 8);
     267}
     268
     269JSValue* regExpConstructorDollar9(ExecState* exec, const Identifier&, const PropertySlot& slot)
     270{
     271    return static_cast<RegExpConstructor*>(slot.slotBase())->getBackref(exec, 9);
     272}
     273
     274JSValue* regExpConstructorInput(ExecState* exec, const Identifier&, const PropertySlot& slot)
     275{
     276    return jsString(exec, static_cast<RegExpConstructor*>(slot.slotBase())->input());
     277}
     278
     279JSValue* regExpConstructorMultiline(ExecState*, const Identifier&, const PropertySlot& slot)
     280{
     281    return jsBoolean(static_cast<RegExpConstructor*>(slot.slotBase())->multiline());
     282}
     283
     284JSValue* regExpConstructorLastMatch(ExecState* exec, const Identifier&, const PropertySlot& slot)
     285{
     286    return static_cast<RegExpConstructor*>(slot.slotBase())->getBackref(exec, 0);
     287}
     288
     289JSValue* regExpConstructorLastParen(ExecState* exec, const Identifier&, const PropertySlot& slot)
     290{
     291    return static_cast<RegExpConstructor*>(slot.slotBase())->getLastParen(exec);
     292}
     293
     294JSValue* regExpConstructorLeftContext(ExecState* exec, const Identifier&, const PropertySlot& slot)
     295{
     296    return static_cast<RegExpConstructor*>(slot.slotBase())->getLeftContext(exec);
     297}
     298
     299JSValue* regExpConstructorRightContext(ExecState* exec, const Identifier&, const PropertySlot& slot)
     300{
     301    return static_cast<RegExpConstructor*>(slot.slotBase())->getRightContext(exec);
    243302}
    244303
     
    248307}
    249308
    250 void RegExpConstructor::putValueProperty(ExecState* exec, int token, JSValue* value)
    251 {
    252     switch (token) {
    253         case Input:
    254             d->input = value->toString(exec);
    255             break;
    256         case Multiline:
    257             d->multiline = value->toBoolean(exec);
    258             break;
    259         default:
    260             ASSERT_NOT_REACHED();
    261     }
     309void setRegExpConstructorInput(ExecState* exec, JSObject* baseObject, JSValue* value)
     310{
     311    static_cast<RegExpConstructor*>(baseObject)->setInput(value->toString(exec));
     312}
     313
     314void setRegExpConstructorMultiline(ExecState* exec, JSObject* baseObject, JSValue* value)
     315{
     316    static_cast<RegExpConstructor*>(baseObject)->setMultiline(value->toBoolean(exec));
    262317}
    263318 
     
    306361}
    307362
     363void RegExpConstructor::setInput(const UString& input)
     364{
     365    d->input = input;
     366}
     367
    308368const UString& RegExpConstructor::input() const
    309369{
     
    313373}
    314374
     375void RegExpConstructor::setMultiline(bool multiline)
     376{
     377    d->multiline = multiline;
     378}
     379
     380bool RegExpConstructor::multiline() const
     381{
     382    return d->multiline;
     383}
     384
    315385} // namespace JSC
Note: See TracChangeset for help on using the changeset viewer.