[WebIDL] Factor out IsExceptionOr check from toJS/toJSNewlyCreated signature
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 25 Sep 2017 23:27:02 +0000 (23:27 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 25 Sep 2017 23:27:02 +0000 (23:27 +0000)
https://bugs.webkit.org/show_bug.cgi?id=177457

Patch by Sam Weinig <sam@webkit.org> on 2017-09-25
Reviewed by Youenn Fablet.

Add new type, IsExceptionOr, that factors out the previously repeated logic of determining
if a type is an ExceptionOr template type.

* bindings/js/JSDOMConvertBase.h:
(WebCore::toJS):
(WebCore::toJSNewlyCreated):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@222480 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/bindings/js/JSDOMConvertBase.h

index d934b90..0fd09e0 100644 (file)
@@ -1,3 +1,17 @@
+2017-09-25  Sam Weinig  <sam@webkit.org>
+
+        [WebIDL] Factor out IsExceptionOr check from toJS/toJSNewlyCreated signature
+        https://bugs.webkit.org/show_bug.cgi?id=177457
+
+        Reviewed by Youenn Fablet.
+
+        Add new type, IsExceptionOr, that factors out the previously repeated logic of determining
+        if a type is an ExceptionOr template type.
+
+        * bindings/js/JSDOMConvertBase.h:
+        (WebCore::toJS):
+        (WebCore::toJSNewlyCreated):
+
 2017-09-25  Basuke Suzuki  <Basuke.Suzuki@sony.com>
 
         [Curl] Refactor and improve methods in the CurlHandle
index 9ab8e59..8608221 100644 (file)
@@ -86,6 +86,11 @@ template<typename T, typename ExceptionThrower> inline typename Converter<T>::Re
     return Converter<T>::convert(state, value, globalObject, std::forward<ExceptionThrower>(exceptionThrower));
 }
 
+
+template <typename T>
+struct IsExceptionOr : public std::integral_constant<bool, WTF::IsTemplate<std::decay_t<T>, ExceptionOr>::value> { };
+
+
 // Conversion from Implementation -> JSValue
 template<typename T> struct JSConverter;
 
@@ -93,12 +98,12 @@ template<typename T, typename U> inline JSC::JSValue toJS(U&&);
 template<typename T, typename U> inline JSC::JSValue toJS(JSC::ExecState&, U&&);
 template<typename T, typename U> inline JSC::JSValue toJS(JSC::ExecState&, JSDOMGlobalObject&, U&&);
 template<typename T, typename U> inline JSC::JSValue toJSNewlyCreated(JSC::ExecState&, JSDOMGlobalObject&, U&&);
-template<typename T, typename U> inline auto toJS(JSC::ExecState&, JSC::ThrowScope&, U&&) -> std::enable_if_t<WTF::IsTemplate<std::decay_t<U>, ExceptionOr>::value, JSC::JSValue>;
-template<typename T, typename U> inline auto toJS(JSC::ExecState&, JSC::ThrowScope&, U&&) -> std::enable_if_t<!WTF::IsTemplate<std::decay_t<U>, ExceptionOr>::value, JSC::JSValue>;
-template<typename T, typename U> inline auto toJS(JSC::ExecState&, JSDOMGlobalObject&, JSC::ThrowScope&, U&&) -> std::enable_if_t<WTF::IsTemplate<std::decay_t<U>, ExceptionOr>::value, JSC::JSValue>;
-template<typename T, typename U> inline auto toJS(JSC::ExecState&, JSDOMGlobalObject&, JSC::ThrowScope&, U&&) -> std::enable_if_t<!WTF::IsTemplate<std::decay_t<U>, ExceptionOr>::value, JSC::JSValue>;
-template<typename T, typename U> inline auto toJSNewlyCreated(JSC::ExecState&, JSDOMGlobalObject&, JSC::ThrowScope&, U&&) -> std::enable_if_t<WTF::IsTemplate<std::decay_t<U>, ExceptionOr>::value, JSC::JSValue>;
-template<typename T, typename U> inline auto toJSNewlyCreated(JSC::ExecState&, JSDOMGlobalObject&, JSC::ThrowScope&, U&&) -> std::enable_if_t<!WTF::IsTemplate<std::decay_t<U>, ExceptionOr>::value, JSC::JSValue>;
+template<typename T, typename U> inline auto toJS(JSC::ExecState&, JSC::ThrowScope&, U&&) -> std::enable_if_t<IsExceptionOr<U>::value, JSC::JSValue>;
+template<typename T, typename U> inline auto toJS(JSC::ExecState&, JSC::ThrowScope&, U&&) -> std::enable_if_t<!IsExceptionOr<U>::value, JSC::JSValue>;
+template<typename T, typename U> inline auto toJS(JSC::ExecState&, JSDOMGlobalObject&, JSC::ThrowScope&, U&&) -> std::enable_if_t<IsExceptionOr<U>::value, JSC::JSValue>;
+template<typename T, typename U> inline auto toJS(JSC::ExecState&, JSDOMGlobalObject&, JSC::ThrowScope&, U&&) -> std::enable_if_t<!IsExceptionOr<U>::value, JSC::JSValue>;
+template<typename T, typename U> inline auto toJSNewlyCreated(JSC::ExecState&, JSDOMGlobalObject&, JSC::ThrowScope&, U&&) -> std::enable_if_t<IsExceptionOr<U>::value, JSC::JSValue>;
+template<typename T, typename U> inline auto toJSNewlyCreated(JSC::ExecState&, JSDOMGlobalObject&, JSC::ThrowScope&, U&&) -> std::enable_if_t<!IsExceptionOr<U>::value, JSC::JSValue>;
 
 template<typename T, bool needsState = JSConverter<T>::needsState, bool needsGlobalObject = JSConverter<T>::needsGlobalObject>
 struct JSConverterOverloader;
@@ -157,7 +162,7 @@ template<typename T, typename U> inline JSC::JSValue toJSNewlyCreated(JSC::ExecS
     return JSConverter<T>::convertNewlyCreated(state, globalObject, std::forward<U>(value));
 }
 
-template<typename T, typename U> inline auto toJS(JSC::ExecState& state, JSC::ThrowScope& throwScope, U&& value) -> std::enable_if_t<WTF::IsTemplate<std::decay_t<U>, ExceptionOr>::value, JSC::JSValue>
+template<typename T, typename U> inline auto toJS(JSC::ExecState& state, JSC::ThrowScope& throwScope, U&& value) -> std::enable_if_t<IsExceptionOr<U>::value, JSC::JSValue>
 {
     if (UNLIKELY(value.hasException())) {
         propagateException(state, throwScope, value.releaseException());
@@ -167,12 +172,12 @@ template<typename T, typename U> inline auto toJS(JSC::ExecState& state, JSC::Th
     return toJS<T>(state, value.releaseReturnValue());
 }
 
-template<typename T, typename U> inline auto toJS(JSC::ExecState& state, JSC::ThrowScope&, U&& value) -> std::enable_if_t<!WTF::IsTemplate<std::decay_t<U>, ExceptionOr>::value, JSC::JSValue>
+template<typename T, typename U> inline auto toJS(JSC::ExecState& state, JSC::ThrowScope&, U&& value) -> std::enable_if_t<!IsExceptionOr<U>::value, JSC::JSValue>
 {
     return toJS<T>(state, std::forward<U>(value));
 }
 
-template<typename T, typename U> inline auto toJS(JSC::ExecState& state, JSDOMGlobalObject& globalObject, JSC::ThrowScope& throwScope, U&& value) -> std::enable_if_t<WTF::IsTemplate<std::decay_t<U>, ExceptionOr>::value, JSC::JSValue>
+template<typename T, typename U> inline auto toJS(JSC::ExecState& state, JSDOMGlobalObject& globalObject, JSC::ThrowScope& throwScope, U&& value) -> std::enable_if_t<IsExceptionOr<U>::value, JSC::JSValue>
 {
     if (UNLIKELY(value.hasException())) {
         propagateException(state, throwScope, value.releaseException());
@@ -182,12 +187,12 @@ template<typename T, typename U> inline auto toJS(JSC::ExecState& state, JSDOMGl
     return toJS<T>(state, globalObject, value.releaseReturnValue());
 }
 
-template<typename T, typename U> inline auto toJS(JSC::ExecState& state, JSDOMGlobalObject& globalObject, JSC::ThrowScope&, U&& value) -> std::enable_if_t<!WTF::IsTemplate<std::decay_t<U>, ExceptionOr>::value, JSC::JSValue>
+template<typename T, typename U> inline auto toJS(JSC::ExecState& state, JSDOMGlobalObject& globalObject, JSC::ThrowScope&, U&& value) -> std::enable_if_t<!IsExceptionOr<U>::value, JSC::JSValue>
 {
     return toJS<T>(state, globalObject, std::forward<U>(value));
 }
 
-template<typename T, typename U> inline auto toJSNewlyCreated(JSC::ExecState& state, JSDOMGlobalObject& globalObject, JSC::ThrowScope& throwScope, U&& value) -> std::enable_if_t<WTF::IsTemplate<std::decay_t<U>, ExceptionOr>::value, JSC::JSValue>
+template<typename T, typename U> inline auto toJSNewlyCreated(JSC::ExecState& state, JSDOMGlobalObject& globalObject, JSC::ThrowScope& throwScope, U&& value) -> std::enable_if_t<IsExceptionOr<U>::value, JSC::JSValue>
 {
     if (UNLIKELY(value.hasException())) {
         propagateException(state, throwScope, value.releaseException());
@@ -197,7 +202,7 @@ template<typename T, typename U> inline auto toJSNewlyCreated(JSC::ExecState& st
     return toJSNewlyCreated<T>(state, globalObject, value.releaseReturnValue());
 }
 
-template<typename T, typename U> inline auto toJSNewlyCreated(JSC::ExecState& state, JSDOMGlobalObject& globalObject, JSC::ThrowScope&, U&& value) -> std::enable_if_t<!WTF::IsTemplate<std::decay_t<U>, ExceptionOr>::value, JSC::JSValue>
+template<typename T, typename U> inline auto toJSNewlyCreated(JSC::ExecState& state, JSDOMGlobalObject& globalObject, JSC::ThrowScope&, U&& value) -> std::enable_if_t<!IsExceptionOr<U>::value, JSC::JSValue>
 {
     return toJSNewlyCreated<T>(state, globalObject, std::forward<U>(value));
 }