Ignore:
Timestamp:
Dec 5, 2013, 7:03:24 PM (12 years ago)
Author:
[email protected]
Message:

Refactor static getter function prototype to include thisValue in addition to the base object
https://bugs.webkit.org/show_bug.cgi?id=124461

Reviewed by Geoffrey Garen.

Source/JavaScriptCore:

Add thisValue parameter to static getter prototype, and switch
from JSValue to EncodedJSValue for parameters and return value.

Currently none of the static getters use the thisValue, but
separating out the refactoring will prevent future changes
from getting lost in the noise of refactoring. This means
that this patch does not result in any change in behaviour.

  • API/JSCallbackObject.h:
  • API/JSCallbackObjectFunctions.h:

(JSC::::asCallbackObject):
(JSC::::staticFunctionGetter):
(JSC::::callbackGetter):

  • jit/JITOperations.cpp:
  • runtime/JSActivation.cpp:

(JSC::JSActivation::argumentsGetter):

  • runtime/JSActivation.h:
  • runtime/JSFunction.cpp:

(JSC::JSFunction::argumentsGetter):
(JSC::JSFunction::callerGetter):
(JSC::JSFunction::lengthGetter):
(JSC::JSFunction::nameGetter):

  • runtime/JSFunction.h:
  • runtime/JSObject.h:

(JSC::PropertySlot::getValue):

  • runtime/NumberConstructor.cpp:

(JSC::numberConstructorNaNValue):
(JSC::numberConstructorNegInfinity):
(JSC::numberConstructorPosInfinity):
(JSC::numberConstructorMaxValue):
(JSC::numberConstructorMinValue):

  • runtime/PropertySlot.h:
  • runtime/RegExpConstructor.cpp:

(JSC::asRegExpConstructor):
(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):

  • runtime/RegExpObject.cpp:

(JSC::asRegExpObject):
(JSC::regExpObjectGlobal):
(JSC::regExpObjectIgnoreCase):
(JSC::regExpObjectMultiline):
(JSC::regExpObjectSource):

Source/WebCore:

Change bindings codegen to produce static getter functions
with the correct types. Also update the many custom implementations
to the new type.

No change in behaviour.

  • bindings/js/JSCSSStyleDeclarationCustom.cpp:

(WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
(WebCore::cssPropertyGetterCallback):

  • bindings/js/JSDOMBinding.cpp:

(WebCore::objectToStringFunctionGetter):

  • bindings/js/JSDOMBinding.h:
  • bindings/js/JSDOMMimeTypeArrayCustom.cpp:

(WebCore::JSDOMMimeTypeArray::nameGetter):

  • bindings/js/JSDOMPluginArrayCustom.cpp:

(WebCore::JSDOMPluginArray::nameGetter):

  • bindings/js/JSDOMPluginCustom.cpp:

(WebCore::JSDOMPlugin::nameGetter):

  • bindings/js/JSDOMStringMapCustom.cpp:

(WebCore::JSDOMStringMap::nameGetter):

  • bindings/js/JSDOMWindowCustom.cpp:

(WebCore::nonCachingStaticFunctionGetter):
(WebCore::childFrameGetter):
(WebCore::indexGetter):
(WebCore::namedItemGetter):

  • bindings/js/JSHTMLAllCollectionCustom.cpp:

(WebCore::JSHTMLAllCollection::nameGetter):

  • bindings/js/JSHTMLCollectionCustom.cpp:

(WebCore::JSHTMLCollection::nameGetter):

  • bindings/js/JSHTMLDocumentCustom.cpp:

(WebCore::JSHTMLDocument::nameGetter):

  • bindings/js/JSHTMLFormControlsCollectionCustom.cpp:

(WebCore::JSHTMLFormControlsCollection::nameGetter):

  • bindings/js/JSHTMLFormElementCustom.cpp:

(WebCore::JSHTMLFormElement::nameGetter):

  • bindings/js/JSHTMLFrameSetElementCustom.cpp:

(WebCore::JSHTMLFrameSetElement::nameGetter):

  • bindings/js/JSHistoryCustom.cpp:

(WebCore::nonCachingStaticBackFunctionGetter):
(WebCore::nonCachingStaticForwardFunctionGetter):
(WebCore::nonCachingStaticGoFunctionGetter):

  • bindings/js/JSJavaScriptCallFrameCustom.cpp:

(WebCore::JSJavaScriptCallFrame::scopeType):

  • bindings/js/JSLocationCustom.cpp:

(WebCore::nonCachingStaticReplaceFunctionGetter):
(WebCore::nonCachingStaticReloadFunctionGetter):
(WebCore::nonCachingStaticAssignFunctionGetter):

  • bindings/js/JSNamedNodeMapCustom.cpp:

(WebCore::JSNamedNodeMap::nameGetter):

  • bindings/js/JSNodeListCustom.cpp:

(WebCore::JSNodeList::nameGetter):

  • bindings/js/JSPluginElementFunctions.cpp:

(WebCore::pluginElementPropertyGetter):

  • bindings/js/JSPluginElementFunctions.h:
  • bindings/js/JSRTCStatsResponseCustom.cpp:

(WebCore::JSRTCStatsResponse::nameGetter):

  • bindings/js/JSStorageCustom.cpp:

(WebCore::JSStorage::nameGetter):

  • bindings/js/JSStyleSheetListCustom.cpp:

(WebCore::JSStyleSheetList::nameGetter):

  • bindings/scripts/CodeGeneratorJS.pm:

(GenerateHeader):
(GenerateImplementation):
(GenerateParametersCheck):

  • bridge/runtime_array.cpp:

(JSC::RuntimeArray::lengthGetter):
(JSC::RuntimeArray::indexGetter):

  • bridge/runtime_array.h:
  • bridge/runtime_method.cpp:

(JSC::RuntimeMethod::lengthGetter):

  • bridge/runtime_method.h:
  • bridge/runtime_object.cpp:

(JSC::Bindings::RuntimeObject::fallbackObjectGetter):
(JSC::Bindings::RuntimeObject::fieldGetter):
(JSC::Bindings::RuntimeObject::methodGetter):

  • bridge/runtime_object.h:

Source/WebKit2:

Update the WK2 JSC usage to the new static getter API

  • WebProcess/Plugins/Netscape/JSNPMethod.cpp:

(WebKit::callMethod):

  • WebProcess/Plugins/Netscape/JSNPObject.cpp:

(WebKit::callNPJSObject):
(WebKit::constructWithConstructor):
(WebKit::JSNPObject::propertyGetter):
(WebKit::JSNPObject::methodGetter):

  • WebProcess/Plugins/Netscape/JSNPObject.h:
  • WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:

(WebKit::NPRuntimeObjectMap::getOrCreateNPObject):
(WebKit::NPRuntimeObjectMap::finalize):

  • WebProcess/WebPage/WebFrame.cpp:

(WebKit::WebFrame::frameForContext):
(WebKit::WebFrame::counterValue):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/runtime/JSFunction.cpp

    r160204 r160208  
    213213}
    214214
    215 JSValue JSFunction::argumentsGetter(ExecState* exec, JSValue slotBase, PropertyName)
    216 {
    217     JSFunction* thisObj = jsCast<JSFunction*>(slotBase);
     215EncodedJSValue JSFunction::argumentsGetter(ExecState* exec, EncodedJSValue slotBase, EncodedJSValue, PropertyName)
     216{
     217    JSFunction* thisObj = jsCast<JSFunction*>(JSValue::decode(slotBase));
    218218    ASSERT(!thisObj->isHostFunction());
    219219
    220     return retrieveArguments(exec, thisObj);
     220    return JSValue::encode(retrieveArguments(exec, thisObj));
    221221}
    222222
     
    268268}
    269269
    270 JSValue JSFunction::callerGetter(ExecState* exec, JSValue slotBase, PropertyName)
    271 {
    272     JSFunction* thisObj = jsCast<JSFunction*>(slotBase);
     270EncodedJSValue JSFunction::callerGetter(ExecState* exec, EncodedJSValue slotBase, EncodedJSValue, PropertyName)
     271{
     272    JSFunction* thisObj = jsCast<JSFunction*>(JSValue::decode(slotBase));
    273273    ASSERT(!thisObj->isHostFunction());
    274274    JSValue caller = retrieveCallerFunction(exec, thisObj);
     
    276276    // See ES5.1 15.3.5.4 - Function.caller may not be used to retrieve a strict caller.
    277277    if (!caller.isObject() || !asObject(caller)->inherits(JSFunction::info()))
    278         return caller;
     278        return JSValue::encode(caller);
    279279    JSFunction* function = jsCast<JSFunction*>(caller);
    280280    if (function->isHostFunction() || !function->jsExecutable()->isStrictMode())
    281         return caller;
    282     return throwTypeError(exec, ASCIILiteral("Function.caller used to retrieve strict caller"));
    283 }
    284 
    285 JSValue JSFunction::lengthGetter(ExecState*, JSValue slotBase, PropertyName)
    286 {
    287     JSFunction* thisObj = jsCast<JSFunction*>(slotBase);
     281        return JSValue::encode(caller);
     282    return JSValue::encode(throwTypeError(exec, ASCIILiteral("Function.caller used to retrieve strict caller")));
     283}
     284
     285EncodedJSValue JSFunction::lengthGetter(ExecState*, EncodedJSValue slotBase, EncodedJSValue, PropertyName)
     286{
     287    JSFunction* thisObj = jsCast<JSFunction*>(JSValue::decode(slotBase));
    288288    ASSERT(!thisObj->isHostFunction());
    289     return jsNumber(thisObj->jsExecutable()->parameterCount());
    290 }
    291 
    292 JSValue JSFunction::nameGetter(ExecState*, JSValue slotBase, PropertyName)
    293 {
    294     JSFunction* thisObj = jsCast<JSFunction*>(slotBase);
     289    return JSValue::encode(jsNumber(thisObj->jsExecutable()->parameterCount()));
     290}
     291
     292EncodedJSValue JSFunction::nameGetter(ExecState*, EncodedJSValue slotBase, EncodedJSValue, PropertyName)
     293{
     294    JSFunction* thisObj = jsCast<JSFunction*>(JSValue::decode(slotBase));
    295295    ASSERT(!thisObj->isHostFunction());
    296     return thisObj->jsExecutable()->nameValue();
     296    return JSValue::encode(thisObj->jsExecutable()->nameValue());
    297297}
    298298
Note: See TracChangeset for help on using the changeset viewer.