JavaScriptCore:

2008-09-26  Sam Weinig  <sam@webkit.org>

        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  <sam@webkit.org>

        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:



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@36977 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/JavaScriptCore/kjs/NumberConstructor.cpp b/JavaScriptCore/kjs/NumberConstructor.cpp
index ec8a69f..476fbd5 100644
--- a/JavaScriptCore/kjs/NumberConstructor.cpp
+++ b/JavaScriptCore/kjs/NumberConstructor.cpp
@@ -21,7 +21,6 @@
 
 #include "config.h"
 #include "NumberConstructor.h"
-#include "NumberConstructor.lut.h"
 
 #include "NumberObject.h"
 #include "NumberPrototype.h"
@@ -30,17 +29,30 @@
 
 ASSERT_CLASS_FITS_IN_CELL(NumberConstructor);
 
+static JSValue* numberConstructorNaNValue(ExecState*, const Identifier&, const PropertySlot&);
+static JSValue* numberConstructorNegInfinity(ExecState*, const Identifier&, const PropertySlot&);
+static JSValue* numberConstructorPosInfinity(ExecState*, const Identifier&, const PropertySlot&);
+static JSValue* numberConstructorMaxValue(ExecState*, const Identifier&, const PropertySlot&);
+static JSValue* numberConstructorMinValue(ExecState*, const Identifier&, const PropertySlot&);
+
+} // namespace JSC
+
+#include "NumberConstructor.lut.h"
+
+namespace JSC {
+
 const ClassInfo NumberConstructor::info = { "Function", &InternalFunction::info, 0, ExecState::numberTable };
 
-/* Source for NumberObject.lut.h
+/* Source for NumberConstructor.lut.h
 @begin numberTable
-  NaN                   NumberConstructor::NaNValue       DontEnum|DontDelete|ReadOnly
-  NEGATIVE_INFINITY     NumberConstructor::NegInfinity    DontEnum|DontDelete|ReadOnly
-  POSITIVE_INFINITY     NumberConstructor::PosInfinity    DontEnum|DontDelete|ReadOnly
-  MAX_VALUE             NumberConstructor::MaxValue       DontEnum|DontDelete|ReadOnly
-  MIN_VALUE             NumberConstructor::MinValue       DontEnum|DontDelete|ReadOnly
+   NaN                   numberConstructorNaNValue       DontEnum|DontDelete|ReadOnly
+   NEGATIVE_INFINITY     numberConstructorNegInfinity    DontEnum|DontDelete|ReadOnly
+   POSITIVE_INFINITY     numberConstructorPosInfinity    DontEnum|DontDelete|ReadOnly
+   MAX_VALUE             numberConstructorMaxValue       DontEnum|DontDelete|ReadOnly
+   MIN_VALUE             numberConstructorMinValue       DontEnum|DontDelete|ReadOnly
 @end
 */
+
 NumberConstructor::NumberConstructor(ExecState* exec, PassRefPtr<StructureID> structure, NumberPrototype* numberPrototype)
     : InternalFunction(exec, structure, Identifier(exec, numberPrototype->info.className))
 {
@@ -56,23 +68,29 @@
     return getStaticValueSlot<NumberConstructor, InternalFunction>(exec, ExecState::numberTable(exec), this, propertyName, slot);
 }
 
-JSValue* NumberConstructor::getValueProperty(ExecState* exec, int token) const
+JSValue* numberConstructorNaNValue(ExecState* exec, const Identifier&, const PropertySlot&)
 {
-    // ECMA 15.7.3
-    switch (token) {
-        case NaNValue:
-            return jsNaN(exec);
-        case NegInfinity:
-            return jsNumberCell(exec, -Inf);
-        case PosInfinity:
-            return jsNumberCell(exec, Inf);
-        case MaxValue:
-            return jsNumberCell(exec, 1.7976931348623157E+308);
-        case MinValue:
-            return jsNumberCell(exec, 5E-324);
-    }
-    ASSERT_NOT_REACHED();
-    return jsNull();
+    return jsNaN(exec);
+}
+
+JSValue* numberConstructorNegInfinity(ExecState* exec, const Identifier&, const PropertySlot&)
+{
+    return jsNumberCell(exec, -Inf);
+}
+
+JSValue* numberConstructorPosInfinity(ExecState* exec, const Identifier&, const PropertySlot&)
+{
+    return jsNumberCell(exec, Inf);
+}
+
+JSValue* numberConstructorMaxValue(ExecState* exec, const Identifier&, const PropertySlot&)
+{
+    return jsNumberCell(exec, 1.7976931348623157E+308);
+}
+
+JSValue* numberConstructorMinValue(ExecState* exec, const Identifier&, const PropertySlot&)
+{
+    return jsNumberCell(exec, 5E-324);
 }
 
 // ECMA 15.7.1