-
darin@apple.com authored
2008-09-20 Darin Adler <darin@apple.com> Reviewed by Maciej Stachowiak. - finish https://bugs.webkit.org/show_bug.cgi?id=20858 make each distinct C++ class get a distinct JSC::Structure This also includes some optimizations that make the change an overall small speedup. Without those it was a bit of a slowdown. * API/JSCallbackConstructor.cpp: (JSC::JSCallbackConstructor::JSCallbackConstructor): Take a structure. * API/JSCallbackConstructor.h: Ditto. * API/JSCallbackFunction.cpp: (JSC::JSCallbackFunction::JSCallbackFunction): Pass a structure. * API/JSCallbackObject.h: Take a structure. * API/JSCallbackObjectFunctions.h: (JSC::JSCallbackObject::JSCallbackObject): Ditto. * API/JSClassRef.cpp: (OpaqueJSClass::prototype): Pass in a structure. Call setPrototype if there's a custom prototype involved. * API/JSObjectRef.cpp: (JSObjectMake): Ditto. (JSObjectMakeConstructor): Pass in a structure. * JavaScriptCore.exp: Updated. * VM/Machine.cpp: (JSC::jsLess): Added a special case for when both arguments are strings. This avoids converting both strings to with UString::toDouble. (JSC::jsLessEq): Ditto. (JSC::Machine::privateExecute): Pass in a structure. (JSC::Machine::cti_op_construct_JSConstruct): Ditto. (JSC::Machine::cti_op_new_regexp): Ditto. (JSC::Machine::cti_op_is_string): Ditto. * VM/Machine.h: Made isJSString public so it can be used in the CTI. * kjs/Arguments.cpp: (JSC::Arguments::Arguments): Pass in a structure. * kjs/JSCell.h: Mark constructor explicit. * kjs/JSGlobalObject.cpp: (JSC::markIfNeeded): Added an overload for marking structures. (JSC::JSGlobalObject::reset): Eliminate code to set data members to zero. We now do that in the constructor, and we no longer use this anywhere except in the constructor. Added code to create structures. Pass structures rather than prototypes when creating objects. (JSC::JSGlobalObject::mark): Mark the structures. * kjs/JSGlobalObject.h: Removed unneeded class declarations. Added initializers for raw pointers in JSGlobalObjectData so everything starts with a 0. Added structure data and accessor functions. * kjs/JSImmediate.cpp: (JSC::JSImmediate::nonInlineNaN): Added. * kjs/JSImmediate.h: (JSC::JSImmediate::toDouble): Rewrote to avoid PIC branches. * kjs/JSNumberCell.cpp: (JSC::jsNumberCell): Made non-inline to avoid PIC branches in functions that call this one. (JSC::jsNaN): Ditto. * kjs/JSNumberCell.h: Ditto. * kjs/JSObject.h: Removed constructor that takes a prototype. All callers now pass structures. * kjs/ArrayConstructor.cpp: (JSC::ArrayConstructor::ArrayConstructor): (JSC::constructArrayWithSizeQuirk): * kjs/ArrayConstructor.h: * kjs/ArrayPrototype.cpp: (JSC::ArrayPrototype::ArrayPrototype): * kjs/ArrayPrototype.h: * kjs/BooleanConstructor.cpp: (JSC::BooleanConstructor::BooleanConstructor): (JSC::constructBoolean): (JSC::constructBooleanFromImmediateBoolean): * kjs/BooleanConstructor.h: * kjs/BooleanObject.cpp: (JSC::BooleanObject::BooleanObject): * kjs/BooleanObject.h: * kjs/BooleanPrototype.cpp: (JSC::BooleanPrototype::BooleanPrototype): * kjs/BooleanPrototype.h: * kjs/DateConstructor.cpp: (JSC::DateConstructor::DateConstructor): (JSC::constructDate): * kjs/DateConstructor.h: * kjs/DateInstance.cpp: (JSC::DateInstance::DateInstance): * kjs/DateInstance.h: * kjs/DatePrototype.cpp: (JSC::DatePrototype::DatePrototype): * kjs/DatePrototype.h: * kjs/ErrorConstructor.cpp: (JSC::ErrorConstructor::ErrorConstructor): (JSC::constructError): * kjs/ErrorConstructor.h: * kjs/ErrorInstance.cpp: (JSC::ErrorInstance::ErrorInstance): * kjs/ErrorInstance.h: * kjs/ErrorPrototype.cpp: (JSC::ErrorPrototype::ErrorPrototype): * kjs/ErrorPrototype.h: * kjs/FunctionConstructor.cpp: (JSC::FunctionConstructor::FunctionConstructor): * kjs/FunctionConstructor.h: * kjs/FunctionPrototype.cpp: (JSC::FunctionPrototype::FunctionPrototype): (JSC::FunctionPrototype::addFunctionProperties): * kjs/FunctionPrototype.h: * kjs/GlobalEvalFunction.cpp: (JSC::GlobalEvalFunction::GlobalEvalFunction): * kjs/GlobalEvalFunction.h: * kjs/InternalFunction.cpp: (JSC::InternalFunction::InternalFunction): * kjs/InternalFunction.h: (JSC::InternalFunction::InternalFunction): * kjs/JSArray.cpp: (JSC::JSArray::JSArray): (JSC::constructEmptyArray): (JSC::constructArray): * kjs/JSArray.h: * kjs/JSFunction.cpp: (JSC::JSFunction::JSFunction): (JSC::JSFunction::construct): * kjs/JSObject.cpp: (JSC::constructEmptyObject): * kjs/JSString.cpp: (JSC::StringObject::create): * kjs/JSWrapperObject.h: * kjs/MathObject.cpp: (JSC::MathObject::MathObject): * kjs/MathObject.h: * kjs/NativeErrorConstructor.cpp: (JSC::NativeErrorConstructor::NativeErrorConstructor): (JSC::NativeErrorConstructor::construct): * kjs/NativeErrorConstructor.h: * kjs/NativeErrorPrototype.cpp: (JSC::NativeErrorPrototype::NativeErrorPrototype): * kjs/NativeErrorPrototype.h: * kjs/NumberConstructor.cpp: (JSC::NumberConstructor::NumberConstructor): (JSC::constructWithNumberConstructor): * kjs/NumberConstructor.h: * kjs/NumberObject.cpp: (JSC::NumberObject::NumberObject): (JSC::constructNumber): (JSC::constructNumberFromImmediateNumber): * kjs/NumberObject.h: * kjs/NumberPrototype.cpp: (JSC::NumberPrototype::NumberPrototype): * kjs/NumberPrototype.h: * kjs/ObjectConstructor.cpp: (JSC::ObjectConstructor::ObjectConstructor): (JSC::constructObject): * kjs/ObjectConstructor.h: * kjs/ObjectPrototype.cpp: (JSC::ObjectPrototype::ObjectPrototype): * kjs/ObjectPrototype.h: * kjs/PrototypeFunction.cpp: (JSC::PrototypeFunction::PrototypeFunction): * kjs/PrototypeFunction.h: * kjs/RegExpConstructor.cpp: (JSC::RegExpConstructor::RegExpConstructor): (JSC::RegExpMatchesArray::RegExpMatchesArray): (JSC::constructRegExp): * kjs/RegExpConstructor.h: * kjs/RegExpObject.cpp: (JSC::RegExpObject::RegExpObject): * kjs/RegExpObject.h: * kjs/RegExpPrototype.cpp: (JSC::RegExpPrototype::RegExpPrototype): * kjs/RegExpPrototype.h: * kjs/Shell.cpp: (GlobalObject::GlobalObject): * kjs/StringConstructor.cpp: (JSC::StringConstructor::StringConstructor): (JSC::constructWithStringConstructor): * kjs/StringConstructor.h: * kjs/StringObject.cpp: (JSC::StringObject::StringObject): * kjs/StringObject.h: * kjs/StringObjectThatMasqueradesAsUndefined.h: (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): * kjs/StringPrototype.cpp: (JSC::StringPrototype::StringPrototype): * kjs/StringPrototype.h: Take and pass structures. WebCore: 2008-09-20 Darin Adler <darin@apple.com> Reviewed by Maciej Stachowiak. - finish https://bugs.webkit.org/show_bug.cgi?id=20858 make each distinct C++ class get a distinct JSC::Structure * bindings/js/JSCSSStyleDeclarationCustom.cpp: (WebCore::JSCSSStyleDeclaration::nameGetter): Pass in a structure ID. Note that this makes a new structure every time -- we could optimize this slightly be caching and reusing a single one. * bridge/runtime_method.cpp: (JSC::RuntimeMethod::RuntimeMethod): Create a unique structure using getDOMStructure. * bridge/runtime_method.h: (JSC::RuntimeMethod::createPrototype): Added createPrototype so getDOMStructure will work. * bindings/js/JSDOMWindowShell.cpp: (WebCore::JSDOMWindowShell::JSDOMWindowShell): Initialize m_window to 0; needed in case garbage collection happens while creating the JSDOMWindow. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@36726 268f45cc-cd09-0410-ab3c-d52691b4dbfc
8281d838