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