Skip to content

Commit 7ee47ed

Browse files
javachefacebook-github-bot
authored andcommitted
Improve naming of template args in bridging (facebook#51418)
Summary: Improve readability Changelog: [Internal] Differential Revision: D74884371
1 parent ef17880 commit 7ee47ed

File tree

2 files changed

+69
-57
lines changed

2 files changed

+69
-57
lines changed

packages/react-native/ReactCommon/react/bridging/Base.h

+33-23
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ namespace detail {
3333
template <typename F>
3434
struct function_wrapper;
3535

36-
template <typename C, typename R, typename... Args>
37-
struct function_wrapper<R (C::*)(Args...)> {
38-
using type = std::function<R(Args...)>;
36+
template <typename ClassT, typename ReturnT, typename... ArgsT>
37+
struct function_wrapper<ReturnT (ClassT::*)(ArgsT...)> {
38+
using type = std::function<ReturnT(ArgsT...)>;
3939
};
4040

41-
template <typename C, typename R, typename... Args>
42-
struct function_wrapper<R (C::*)(Args...) const> {
43-
using type = std::function<R(Args...)>;
41+
template <typename ClassT, typename ReturnT, typename... ArgsT>
42+
struct function_wrapper<ReturnT (ClassT::*)(ArgsT...) const> {
43+
using type = std::function<ReturnT(ArgsT...)>;
4444
};
4545

4646
template <typename T, typename = void>
@@ -61,33 +61,43 @@ struct bridging_wrapper<
6161
template <typename T>
6262
using bridging_t = typename detail::bridging_wrapper<T>::type;
6363

64-
template <typename R, typename T, std::enable_if_t<is_jsi_v<T>, int> = 0>
65-
auto fromJs(jsi::Runtime& rt, T&& value, const std::shared_ptr<CallInvoker>&)
66-
-> decltype(static_cast<R>(
67-
std::move(convert(rt, std::forward<T>(value))))) {
68-
return static_cast<R>(std::move(convert(rt, std::forward<T>(value))));
64+
template <
65+
typename ReturnT,
66+
typename JSArgT,
67+
std::enable_if_t<is_jsi_v<JSArgT>, int> = 0>
68+
auto fromJs(
69+
jsi::Runtime& rt,
70+
JSArgT&& value,
71+
const std::shared_ptr<CallInvoker>&)
72+
-> decltype(static_cast<ReturnT>(
73+
std::move(convert(rt, std::forward<JSArgT>(value))))) {
74+
return static_cast<ReturnT>(
75+
std::move(convert(rt, std::forward<JSArgT>(value))));
6976
}
7077

71-
template <typename R, typename T>
72-
auto fromJs(jsi::Runtime& rt, T&& value, const std::shared_ptr<CallInvoker>&)
73-
-> decltype(Bridging<remove_cvref_t<R>>::fromJs(
78+
template <typename ReturnT, typename JSArgT>
79+
auto fromJs(
80+
jsi::Runtime& rt,
81+
JSArgT&& value,
82+
const std::shared_ptr<CallInvoker>&)
83+
-> decltype(Bridging<remove_cvref_t<ReturnT>>::fromJs(
7484
rt,
75-
convert(rt, std::forward<T>(value)))) {
76-
return Bridging<remove_cvref_t<R>>::fromJs(
77-
rt, convert(rt, std::forward<T>(value)));
85+
convert(rt, std::forward<JSArgT>(value)))) {
86+
return Bridging<remove_cvref_t<ReturnT>>::fromJs(
87+
rt, convert(rt, std::forward<JSArgT>(value)));
7888
}
7989

80-
template <typename R, typename T>
90+
template <typename ReturnT, typename JSArgT>
8191
auto fromJs(
8292
jsi::Runtime& rt,
83-
T&& value,
93+
JSArgT&& value,
8494
const std::shared_ptr<CallInvoker>& jsInvoker)
85-
-> decltype(Bridging<remove_cvref_t<R>>::fromJs(
95+
-> decltype(Bridging<remove_cvref_t<ReturnT>>::fromJs(
8696
rt,
87-
convert(rt, std::forward<T>(value)),
97+
convert(rt, std::forward<JSArgT>(value)),
8898
jsInvoker)) {
89-
return Bridging<remove_cvref_t<R>>::fromJs(
90-
rt, convert(rt, std::forward<T>(value)), jsInvoker);
99+
return Bridging<remove_cvref_t<ReturnT>>::fromJs(
100+
rt, convert(rt, std::forward<JSArgT>(value)), jsInvoker);
91101
}
92102

93103
template <typename T, std::enable_if_t<is_jsi_v<T>, int> = 0>

packages/react-native/ReactCommon/react/bridging/Class.h

+36-34
Original file line numberDiff line numberDiff line change
@@ -12,54 +12,55 @@
1212
namespace facebook::react::bridging {
1313

1414
template <
15-
typename T,
16-
typename C,
17-
typename R,
18-
typename... Args,
19-
typename... JSArgs>
20-
T callFromJs(
15+
typename JSReturnT,
16+
typename ClassT,
17+
typename ReturnT,
18+
typename... ArgsT,
19+
typename... JSArgsT>
20+
JSReturnT callFromJs(
2121
jsi::Runtime& rt,
22-
R (C::*method)(jsi::Runtime&, Args...),
22+
ReturnT (ClassT::*method)(jsi::Runtime&, ArgsT...),
2323
const std::shared_ptr<CallInvoker>& jsInvoker,
24-
C* instance,
25-
JSArgs&&... args) {
24+
ClassT* instance,
25+
JSArgsT&&... args) {
2626
static_assert(
27-
sizeof...(Args) == sizeof...(JSArgs), "Incorrect arguments length");
27+
sizeof...(ArgsT) == sizeof...(JSArgsT), "Incorrect arguments length");
2828
static_assert(
29-
(supportsFromJs<Args, JSArgs> && ...), "Incompatible arguments");
29+
(supportsFromJs<ArgsT, JSArgsT> && ...), "Incompatible arguments");
3030

31-
if constexpr (std::is_void_v<T>) {
31+
if constexpr (std::is_void_v<JSReturnT>) {
3232
(instance->*method)(
33-
rt, fromJs<Args>(rt, std::forward<JSArgs>(args), jsInvoker)...);
33+
rt, fromJs<ArgsT>(rt, std::forward<JSArgsT>(args), jsInvoker)...);
3434

35-
} else if constexpr (std::is_void_v<R>) {
35+
} else if constexpr (std::is_void_v<ReturnT>) {
3636
static_assert(
37-
std::is_same_v<T, jsi::Value>,
37+
std::is_same_v<JSReturnT, jsi::Value>,
3838
"Void functions may only return undefined");
3939

4040
(instance->*method)(
41-
rt, fromJs<Args>(rt, std::forward<JSArgs>(args), jsInvoker)...);
41+
rt, fromJs<ArgsT>(rt, std::forward<JSArgsT>(args), jsInvoker)...);
4242
return jsi::Value();
43-
44-
} else if constexpr (is_jsi_v<T> || supportsToJs<R, T>) {
45-
static_assert(supportsToJs<R, T>, "Incompatible return type");
46-
43+
} else if constexpr (
44+
is_jsi_v<JSReturnT> || supportsToJs<ReturnT, JSReturnT>) {
45+
static_assert(supportsToJs<ReturnT, JSReturnT>, "Incompatible return type");
4746
return toJs(
4847
rt,
4948
(instance->*method)(
50-
rt, fromJs<Args>(rt, std::forward<JSArgs>(args), jsInvoker)...),
49+
rt, fromJs<ArgsT>(rt, std::forward<JSArgsT>(args), jsInvoker)...),
5150
jsInvoker);
52-
} else if constexpr (is_optional_jsi_v<T>) {
51+
} else if constexpr (is_optional_jsi_v<JSReturnT>) {
5352
static_assert(
54-
is_optional_v<R>
55-
? supportsToJs<typename R::value_type, typename T::value_type>
56-
: supportsToJs<R, typename T::value_type>,
53+
is_optional_v<ReturnT>
54+
? supportsToJs<
55+
typename ReturnT::value_type,
56+
typename JSReturnT::value_type>
57+
: supportsToJs<ReturnT, typename JSReturnT::value_type>,
5758
"Incompatible return type");
5859

5960
auto result = toJs(
6061
rt,
6162
(instance->*method)(
62-
rt, fromJs<Args>(rt, std::forward<JSArgs>(args), jsInvoker)...),
63+
rt, fromJs<ArgsT>(rt, std::forward<JSArgsT>(args), jsInvoker)...),
6364
jsInvoker);
6465

6566
if constexpr (std::is_same_v<decltype(result), jsi::Value>) {
@@ -70,20 +71,21 @@ T callFromJs(
7071

7172
return convert(rt, std::move(result));
7273
} else {
73-
static_assert(std::is_convertible_v<R, T>, "Incompatible return type");
74+
static_assert(
75+
std::is_convertible_v<ReturnT, JSReturnT>, "Incompatible return type");
7476
return (instance->*method)(
75-
rt, fromJs<Args>(rt, std::forward<JSArgs>(args), jsInvoker)...);
77+
rt, fromJs<ArgsT>(rt, std::forward<JSArgsT>(args), jsInvoker)...);
7678
}
7779
}
7880

79-
template <typename R, typename... Args>
80-
constexpr size_t getParameterCount(R (*)(Args...)) {
81-
return sizeof...(Args);
81+
template <typename ReturnT, typename... ArgsT>
82+
constexpr size_t getParameterCount(ReturnT (*)(ArgsT...)) {
83+
return sizeof...(ArgsT);
8284
}
8385

84-
template <typename C, typename R, typename... Args>
85-
constexpr size_t getParameterCount(R (C::*)(Args...)) {
86-
return sizeof...(Args);
86+
template <typename Class, typename ReturnT, typename... ArgsT>
87+
constexpr size_t getParameterCount(ReturnT (Class::*)(ArgsT...)) {
88+
return sizeof...(ArgsT);
8789
}
8890

8991
} // namespace facebook::react::bridging

0 commit comments

Comments
 (0)