Ignore:
Timestamp:
Oct 10, 2018, 11:29:44 AM (7 years ago)
Author:
[email protected]
Message:

[JSC] Rename createXXX to tryCreateXXX if it can return RefPtr
https://bugs.webkit.org/show_bug.cgi?id=190429

Reviewed by Saam Barati.

Source/JavaScriptCore:

Some createXXX functions can fail. But sometimes the caller does not perform error checking.
To make it explicit that these functions can fail, we rename these functions from createXXX
to tryCreateXXX. In this patch, we focus on non-JS-managed factory functions. If the factory
function does not fail, it should return Ref<>. Otherwise, it should be named as tryCreateXXX
and it should return RefPtr<>.

This patch mainly focuses on TypedArray factory functions. Previously, these functions are
RefPtr<XXXArray> create(...). This patch changes them to RefPtr<XXXArray> tryCreate(...).
And we also introduce Ref<XXXArray> create(...) function which internally performs
RELEASE_ASSERT on the result of tryCreate(...).

And we also convert OpaqueJSString::create to OpaqueJSString::tryCreate since it can fail.

This change actually finds one place which does not perform any null checkings while it uses
RefPtr<> create(...) function.

  • API/JSCallbackObjectFunctions.h:

(JSC::JSCallbackObject<Parent>::getOwnPropertySlot):
(JSC::JSCallbackObject<Parent>::put):
(JSC::JSCallbackObject<Parent>::putByIndex):
(JSC::JSCallbackObject<Parent>::deleteProperty):
(JSC::JSCallbackObject<Parent>::callbackGetter):

  • API/JSClassRef.h:

(StaticValueEntry::StaticValueEntry):

  • API/JSContext.mm:

(-[JSContext evaluateScript:withSourceURL:]):
(-[JSContext setName:]):

  • API/JSContextRef.cpp:

(JSGlobalContextCopyName):
(JSContextCreateBacktrace):

  • API/JSObjectRef.cpp:

(JSObjectCopyPropertyNames):

  • API/JSScriptRef.cpp:
  • API/JSStringRef.cpp:

(JSStringCreateWithCharactersNoCopy):

  • API/JSValue.mm:

(+[JSValue valueWithNewRegularExpressionFromPattern:flags:inContext:]):
(+[JSValue valueWithNewErrorFromMessage:inContext:]):
(+[JSValue valueWithNewSymbolFromDescription:inContext:]):
(performPropertyOperation):
(-[JSValue invokeMethod:withArguments:]):
(containerValueToObject):
(objectToValueWithoutCopy):
(objectToValue):

  • API/JSValueRef.cpp:

(JSValueCreateJSONString):
(JSValueToStringCopy):

  • API/OpaqueJSString.cpp:

(OpaqueJSString::tryCreate):
(OpaqueJSString::create): Deleted.

  • API/OpaqueJSString.h:
  • API/glib/JSCContext.cpp:

(evaluateScriptInContext):

  • API/glib/JSCValue.cpp:

(jsc_value_new_string_from_bytes):

  • ftl/FTLLazySlowPath.h:

(JSC::FTL::LazySlowPath::createGenerator):

  • ftl/FTLLazySlowPathCall.h:

(JSC::FTL::createLazyCallGenerator):

  • ftl/FTLOSRExit.cpp:

(JSC::FTL::OSRExitDescriptor::emitOSRExit):
(JSC::FTL::OSRExitDescriptor::emitOSRExitLater):
(JSC::FTL::OSRExitDescriptor::prepareOSRExitHandle):

  • ftl/FTLOSRExit.h:
  • ftl/FTLPatchpointExceptionHandle.cpp:

(JSC::FTL::PatchpointExceptionHandle::create):
(JSC::FTL::PatchpointExceptionHandle::createHandle):

  • ftl/FTLPatchpointExceptionHandle.h:
  • heap/EdenGCActivityCallback.h:

(JSC::GCActivityCallback::tryCreateEdenTimer):
(JSC::GCActivityCallback::createEdenTimer): Deleted.

  • heap/FullGCActivityCallback.h:

(JSC::GCActivityCallback::tryCreateFullTimer):
(JSC::GCActivityCallback::createFullTimer): Deleted.

  • heap/GCActivityCallback.h:
  • heap/Heap.cpp:

(JSC::Heap::Heap):

  • inspector/AsyncStackTrace.cpp:

(Inspector::AsyncStackTrace::create):

  • inspector/AsyncStackTrace.h:
  • jsc.cpp:

(fillBufferWithContentsOfFile):

  • runtime/ArrayBuffer.h:
  • runtime/GenericTypedArrayView.h:
  • runtime/GenericTypedArrayViewInlines.h:

(JSC::GenericTypedArrayView<Adaptor>::create):
(JSC::GenericTypedArrayView<Adaptor>::tryCreate):
(JSC::GenericTypedArrayView<Adaptor>::createUninitialized):
(JSC::GenericTypedArrayView<Adaptor>::tryCreateUninitialized):
(JSC::GenericTypedArrayView<Adaptor>::subarray const):

  • runtime/JSArrayBufferView.cpp:

(JSC::JSArrayBufferView::possiblySharedImpl):

  • runtime/JSGenericTypedArrayViewInlines.h:

(JSC::JSGenericTypedArrayView<Adaptor>::possiblySharedTypedImpl):
(JSC::JSGenericTypedArrayView<Adaptor>::unsharedTypedImpl):

  • wasm/WasmMemory.cpp:

(JSC::Wasm::Memory::create):
(JSC::Wasm::Memory::tryCreate):

  • wasm/WasmMemory.h:
  • wasm/WasmTable.cpp:

(JSC::Wasm::Table::tryCreate):
(JSC::Wasm::Table::create): Deleted.

  • wasm/WasmTable.h:
  • wasm/js/JSWebAssemblyInstance.cpp:

(JSC::JSWebAssemblyInstance::create):

  • wasm/js/JSWebAssemblyMemory.cpp:

(JSC::JSWebAssemblyMemory::JSWebAssemblyMemory):

  • wasm/js/WebAssemblyMemoryConstructor.cpp:

(JSC::constructJSWebAssemblyMemory):

  • wasm/js/WebAssemblyModuleRecord.cpp:

(JSC::WebAssemblyModuleRecord::link):

  • wasm/js/WebAssemblyTableConstructor.cpp:

(JSC::constructJSWebAssemblyTable):

Source/WebCore:

Use tryCreate or new create. If we use new create, we can use Ref<> and remove null check.

  • Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:

(WebCore::CDMSessionClearKey::cachedKeyForKeyID const):

  • Modules/plugins/QuickTimePluginReplacement.mm:

(WebCore::jsValueWithDictionaryInContext):

  • Modules/webaudio/AudioBuffer.cpp:

(WebCore::AudioBuffer::AudioBuffer):
(WebCore::AudioBuffer::getChannelData):

  • Modules/webvr/VREyeParameters.cpp:

(WebCore::VREyeParameters::offset const):

  • Modules/webvr/VRFrameData.cpp:

(WebCore::matrixToArray):

  • Modules/webvr/VRPose.cpp:

(WebCore::optionalFloat3ToJSCArray):
(WebCore::VRPose::position const):
(WebCore::VRPose::orientation const):

  • Modules/webvr/VRStageParameters.cpp:

(WebCore::VRStageParameters::sittingToStandingTransform const):

  • bindings/js/ReadableStreamDefaultController.h:

(WebCore::ReadableStreamDefaultController::enqueue):

  • bindings/js/SerializedScriptValue.cpp:

(WebCore::CloneDeserializer::readArrayBufferView):

  • crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:

(WebCore::CryptoKeyRSA::algorithm const):

  • crypto/mac/CryptoKeyRSAMac.cpp:

(WebCore::CryptoKeyRSA::algorithm const):

  • css/DOMMatrixReadOnly.cpp:

(WebCore::DOMMatrixReadOnly::toFloat32Array const):
(WebCore::DOMMatrixReadOnly::toFloat64Array const):

  • css/FontFace.cpp:

(WebCore::FontFace::create):

  • dom/TextEncoder.cpp:

(WebCore::TextEncoder::encode const):

  • html/ImageData.cpp:

(WebCore::ImageData::ImageData):

  • html/ImageData.h:

(WebCore::ImageData::data const):
(): Deleted.

  • html/canvas/WebGL2RenderingContext.cpp:

(WebCore::WebGL2RenderingContext::bufferData):
(WebCore::WebGL2RenderingContext::bufferSubData):
(WebCore::WebGL2RenderingContext::getInternalformatParameter):
(WebCore::WebGL2RenderingContext::getParameter):

  • html/canvas/WebGLRenderingContext.cpp:

(WebCore::WebGLRenderingContext::getParameter):

  • html/canvas/WebGLRenderingContextBase.cpp:

(WebCore::WebGLRenderingContextBase::getUniform):
(WebCore::WebGLRenderingContextBase::getVertexAttrib):
(WebCore::WebGLRenderingContextBase::getWebGLFloatArrayParameter):
(WebCore::WebGLRenderingContextBase::getWebGLIntArrayParameter):

  • platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:

(WebCore::MediaPlayerPrivateAVFoundation::extractKeyURIKeyIDAndCertificateFromInitData):

  • platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:

(WebCore::CDMSessionAVFoundationCF::generateKeyRequest):

  • platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:

(WebCore::AVFWrapper::shouldWaitForLoadingOfResource):

  • platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:

(WebCore::CDMSessionAVContentKeySession::generateKeyRequest):
(WebCore::CDMSessionAVContentKeySession::releaseKeys):
(WebCore::CDMSessionAVContentKeySession::update):
(WebCore::CDMSessionAVContentKeySession::generateKeyReleaseMessage):

  • platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:

(WebCore::CDMSessionAVFoundationObjC::generateKeyRequest):

  • platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:

(WebCore::CDMSessionAVStreamSession::generateKeyRequest):
(WebCore::CDMSessionAVStreamSession::releaseKeys):
(WebCore::CDMSessionAVStreamSession::generateKeyReleaseMessage):

  • platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:

(WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):

  • platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:

(WebCore::MediaSampleAVFObjC::getRGBAImageData const):

  • platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

(WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):

  • platform/graphics/cairo/ImageBufferCairo.cpp:

(WebCore::getImageData):

  • platform/graphics/cg/ImageBufferDataCG.cpp:

(WebCore::ImageBufferData::getData const):

  • platform/graphics/filters/FEGaussianBlur.cpp:

(WebCore::FEGaussianBlur::platformApplySoftware):

  • platform/graphics/filters/FilterEffect.cpp:

(WebCore::FilterEffect::unmultipliedResult):
(WebCore::FilterEffect::premultipliedResult):
(WebCore::FilterEffect::copyUnmultipliedResult):
(WebCore::FilterEffect::copyPremultipliedResult):
(WebCore::FilterEffect::createUnmultipliedImageResult):
(WebCore::FilterEffect::createPremultipliedImageResult):

  • platform/graphics/win/ImageBufferDataDirect2D.cpp:

(WebCore::ImageBufferData::getData const):

  • platform/mac/SerializedPlatformRepresentationMac.mm:

(WebCore::jsValueWithDictionaryInContext):

  • platform/mock/mediasource/MockBox.cpp:

(WebCore::MockBox::peekType):
(WebCore::MockBox::peekLength):
(WebCore::MockTrackBox::MockTrackBox):
(WebCore::MockInitializationBox::MockInitializationBox):
(WebCore::MockSampleBox::MockSampleBox):

  • rendering/shapes/Shape.cpp:

(WebCore::Shape::createRasterShape):

  • testing/LegacyMockCDM.cpp:

(WebCore::initDataPrefix):
(WebCore::keyPrefix):
(WebCore::keyRequest):

Source/WebKit:

Use tryCreate or new create. If we use new create, we can use Ref<> and remove null check.

  • Shared/API/c/WKString.cpp:

(WKStringCopyJSString):

  • WebProcess/Automation/WebAutomationSessionProxy.cpp:

(WebKit::toJSValue):
(WebKit::callPropertyFunction):
(WebKit::WebAutomationSessionProxy::scriptObjectForFrame):
(WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction):

  • WebProcess/Plugins/PDF/PDFPlugin.mm:

(WebKit::PDFPlugin::runScriptsInPDFDocument):

Source/WebKitLegacy/ios:

Use tryCreate or new create. If we use new create, we can use Ref<> and remove null check.

  • WebView/WebPDFViewIOS.mm:

(-[WebPDFView finishedLoadingWithDataSource:]):

  • WebView/WebPDFViewPlaceholder.mm:

(-[WebPDFViewPlaceholder _evaluateJSForDocument:]):

Source/WebKitLegacy/mac:

Use tryCreate or new create. If we use new create, we can use Ref<> and remove null check.

  • WebView/WebPDFRepresentation.mm:

(-[WebPDFRepresentation finishedLoadingWithDataSource:]):

Tools:

  • TestWebKitAPI/Tests/WebCore/mac/GPUBuffer.mm:

(TestWebKitAPI::TEST_F):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/API/JSCallbackObjectFunctions.h

    r236066 r237009  
    156156            if (JSObjectHasPropertyCallback hasProperty = jsClass->hasProperty) {
    157157                if (!propertyNameRef)
    158                     propertyNameRef = OpaqueJSString::create(name);
     158                    propertyNameRef = OpaqueJSString::tryCreate(name);
    159159                JSLock::DropAllLocks dropAllLocks(exec);
    160160                if (hasProperty(ctx, thisRef, propertyNameRef.get())) {
     
    164164            } else if (JSObjectGetPropertyCallback getProperty = jsClass->getProperty) {
    165165                if (!propertyNameRef)
    166                     propertyNameRef = OpaqueJSString::create(name);
     166                    propertyNameRef = OpaqueJSString::tryCreate(name);
    167167                JSValueRef exception = 0;
    168168                JSValueRef value;
     
    253253            if (JSObjectSetPropertyCallback setProperty = jsClass->setProperty) {
    254254                if (!propertyNameRef)
    255                     propertyNameRef = OpaqueJSString::create(name);
     255                    propertyNameRef = OpaqueJSString::tryCreate(name);
    256256                JSValueRef exception = 0;
    257257                bool result;
     
    317317        if (JSObjectSetPropertyCallback setProperty = jsClass->setProperty) {
    318318            if (!propertyNameRef)
    319                 propertyNameRef = OpaqueJSString::create(propertyName.impl());
     319                propertyNameRef = OpaqueJSString::tryCreate(propertyName.impl());
    320320            JSValueRef exception = 0;
    321321            bool result;
     
    376376            if (JSObjectDeletePropertyCallback deleteProperty = jsClass->deleteProperty) {
    377377                if (!propertyNameRef)
    378                     propertyNameRef = OpaqueJSString::create(name);
     378                    propertyNameRef = OpaqueJSString::tryCreate(name);
    379379                JSValueRef exception = 0;
    380380                bool result;
     
    680680            if (JSObjectGetPropertyCallback getProperty = jsClass->getProperty) {
    681681                if (!propertyNameRef)
    682                     propertyNameRef = OpaqueJSString::create(name);
     682                    propertyNameRef = OpaqueJSString::tryCreate(name);
    683683                JSValueRef exception = 0;
    684684                JSValueRef value;
Note: See TracChangeset for help on using the changeset viewer.