Log Message
Make IPC::Arguments a variadic template https://bugs.webkit.org/show_bug.cgi?id=131684
Reviewed by Darin Adler. Make IPC::Arguments a variadic template that uses the template parameter pack to further define the std::tuple ValueType and is used to define the std::tuple container of the values passed into the container. * Platform/IPC/Arguments.h: (IPC::Arguments::Arguments): (IPC::Arguments::encode): (IPC::Arguments::decode): (IPC::Arguments0::encode): Deleted. (IPC::Arguments0::decode): Deleted. (IPC::Arguments1::Arguments1): Deleted. (IPC::Arguments1::encode): Deleted. (IPC::Arguments1::decode): Deleted. (IPC::Arguments2::Arguments2): Deleted. (IPC::Arguments2::encode): Deleted. (IPC::Arguments2::decode): Deleted. (IPC::Arguments3::Arguments3): Deleted. (IPC::Arguments3::encode): Deleted. (IPC::Arguments3::decode): Deleted. (IPC::Arguments4::Arguments4): Deleted. (IPC::Arguments4::encode): Deleted. (IPC::Arguments4::decode): Deleted. (IPC::Arguments5::Arguments5): Deleted. (IPC::Arguments5::encode): Deleted. (IPC::Arguments5::decode): Deleted. (IPC::Arguments6::Arguments6): Deleted. (IPC::Arguments6::encode): Deleted. (IPC::Arguments6::decode): Deleted. (IPC::Arguments7::Arguments7): Deleted. (IPC::Arguments7::encode): Deleted. (IPC::Arguments7::decode): Deleted. (IPC::Arguments8::Arguments8): Deleted. (IPC::Arguments8::encode): Deleted. (IPC::Arguments8::decode): Deleted. (IPC::Arguments10::Arguments10): Deleted. (IPC::Arguments10::encode): Deleted. (IPC::Arguments10::decode): Deleted. * Scripts/webkit2/LegacyMessages-expected.h: * Scripts/webkit2/Messages-expected.h: * Scripts/webkit2/messages.py: Clean up the code a bit. (reply_parameter_type): (arguments_type): (reply_type): (decode_type): (arguments_type_old): Deleted. (base_class): Deleted. (delayed_reply_type): Deleted.
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (167398 => 167399)
--- trunk/Source/WebKit2/ChangeLog 2014-04-16 23:40:53 UTC (rev 167398)
+++ trunk/Source/WebKit2/ChangeLog 2014-04-16 23:46:59 UTC (rev 167399)
@@ -1,3 +1,58 @@
+2014-04-16 Zan Dobersek <zdober...@igalia.com>
+
+ Make IPC::Arguments a variadic template
+ https://bugs.webkit.org/show_bug.cgi?id=131684
+
+ Reviewed by Darin Adler.
+
+ Make IPC::Arguments a variadic template that uses the template parameter pack to further
+ define the std::tuple ValueType and is used to define the std::tuple container of the
+ values passed into the container.
+
+ * Platform/IPC/Arguments.h:
+ (IPC::Arguments::Arguments):
+ (IPC::Arguments::encode):
+ (IPC::Arguments::decode):
+ (IPC::Arguments0::encode): Deleted.
+ (IPC::Arguments0::decode): Deleted.
+ (IPC::Arguments1::Arguments1): Deleted.
+ (IPC::Arguments1::encode): Deleted.
+ (IPC::Arguments1::decode): Deleted.
+ (IPC::Arguments2::Arguments2): Deleted.
+ (IPC::Arguments2::encode): Deleted.
+ (IPC::Arguments2::decode): Deleted.
+ (IPC::Arguments3::Arguments3): Deleted.
+ (IPC::Arguments3::encode): Deleted.
+ (IPC::Arguments3::decode): Deleted.
+ (IPC::Arguments4::Arguments4): Deleted.
+ (IPC::Arguments4::encode): Deleted.
+ (IPC::Arguments4::decode): Deleted.
+ (IPC::Arguments5::Arguments5): Deleted.
+ (IPC::Arguments5::encode): Deleted.
+ (IPC::Arguments5::decode): Deleted.
+ (IPC::Arguments6::Arguments6): Deleted.
+ (IPC::Arguments6::encode): Deleted.
+ (IPC::Arguments6::decode): Deleted.
+ (IPC::Arguments7::Arguments7): Deleted.
+ (IPC::Arguments7::encode): Deleted.
+ (IPC::Arguments7::decode): Deleted.
+ (IPC::Arguments8::Arguments8): Deleted.
+ (IPC::Arguments8::encode): Deleted.
+ (IPC::Arguments8::decode): Deleted.
+ (IPC::Arguments10::Arguments10): Deleted.
+ (IPC::Arguments10::encode): Deleted.
+ (IPC::Arguments10::decode): Deleted.
+ * Scripts/webkit2/LegacyMessages-expected.h:
+ * Scripts/webkit2/Messages-expected.h:
+ * Scripts/webkit2/messages.py: Clean up the code a bit.
+ (reply_parameter_type):
+ (arguments_type):
+ (reply_type):
+ (decode_type):
+ (arguments_type_old): Deleted.
+ (base_class): Deleted.
+ (delayed_reply_type): Deleted.
+
2014-04-16 Tim Horton <timothy_hor...@apple.com>
Deduplicate LayerTreeContext
Modified: trunk/Source/WebKit2/Platform/IPC/Arguments.h (167398 => 167399)
--- trunk/Source/WebKit2/Platform/IPC/Arguments.h 2014-04-16 23:40:53 UTC (rev 167398)
+++ trunk/Source/WebKit2/Platform/IPC/Arguments.h 2014-04-16 23:46:59 UTC (rev 167399)
@@ -71,321 +71,28 @@
}
};
-struct Arguments0 {
- typedef std::tuple<> ValueType;
+template<typename... Types>
+struct Arguments {
+ typedef std::tuple<typename std::decay<Types>::type...> ValueType;
- void encode(ArgumentEncoder&) const
+ Arguments(Types&&... values)
+ : arguments(std::forward<Types>(values)...)
{
}
- static bool decode(ArgumentDecoder&, Arguments0&)
- {
- return true;
- }
-};
-
-template<typename T1> struct Arguments1 {
- typedef std::tuple<typename std::remove_const<typename std::remove_reference<T1>::type>::type> ValueType;
-
- Arguments1()
- {
- }
-
- Arguments1(T1 t1)
- : argument1(t1)
- {
- }
-
void encode(ArgumentEncoder& encoder) const
{
- encoder << argument1;
+ ArgumentCoder<std::tuple<Types...>>::encode(encoder, arguments);
}
- static bool decode(ArgumentDecoder& decoder, Arguments1& result)
+ static bool decode(ArgumentDecoder& decoder, Arguments& result)
{
- return decoder.decode(result.argument1);
+ return ArgumentCoder<std::tuple<Types...>>::decode(decoder, result.arguments);
}
-
- T1 argument1;
-};
-
-template<typename T1, typename T2> struct Arguments2 : Arguments1<T1> {
- typedef std::tuple<typename std::remove_const<typename std::remove_reference<T1>::type>::type,
- typename std::remove_const<typename std::remove_reference<T2>::type>::type> ValueType;
- Arguments2()
- {
- }
-
- Arguments2(T1 t1, T2 t2)
- : Arguments1<T1>(t1)
- , argument2(t2)
- {
- }
-
- void encode(ArgumentEncoder& encoder) const
- {
- Arguments1<T1>::encode(encoder);
- encoder << argument2;
- }
-
- static bool decode(ArgumentDecoder& decoder, Arguments2& result)
- {
- if (!Arguments1<T1>::decode(decoder, result))
- return false;
-
- return decoder.decode(result.argument2);
- }
-
- T2 argument2;
+ std::tuple<Types...> arguments;
};
-template<typename T1, typename T2, typename T3> struct Arguments3 : Arguments2<T1, T2> {
- typedef std::tuple<typename std::remove_const<typename std::remove_reference<T1>::type>::type,
- typename std::remove_const<typename std::remove_reference<T2>::type>::type,
- typename std::remove_const<typename std::remove_reference<T3>::type>::type> ValueType;
-
- Arguments3()
- {
- }
-
- Arguments3(T1 t1, T2 t2, T3 t3)
- : Arguments2<T1, T2>(t1, t2)
- , argument3(t3)
- {
- }
-
- void encode(ArgumentEncoder& encoder) const
- {
- Arguments2<T1, T2>::encode(encoder);
- encoder << argument3;
- }
-
- static bool decode(ArgumentDecoder& decoder, Arguments3& result)
- {
- if (!Arguments2<T1, T2>::decode(decoder, result))
- return false;
-
- return decoder.decode(result.argument3);
- }
-
- T3 argument3;
-};
-
-template<typename T1, typename T2, typename T3, typename T4> struct Arguments4 : Arguments3<T1, T2, T3> {
- typedef std::tuple<typename std::remove_const<typename std::remove_reference<T1>::type>::type,
- typename std::remove_const<typename std::remove_reference<T2>::type>::type,
- typename std::remove_const<typename std::remove_reference<T3>::type>::type,
- typename std::remove_const<typename std::remove_reference<T4>::type>::type> ValueType;
-
- Arguments4()
- {
- }
-
- Arguments4(T1 t1, T2 t2, T3 t3, T4 t4)
- : Arguments3<T1, T2, T3>(t1, t2, t3)
- , argument4(t4)
- {
- }
-
- void encode(ArgumentEncoder& encoder) const
- {
- Arguments3<T1, T2, T3>::encode(encoder);
- encoder << argument4;
- }
-
- static bool decode(ArgumentDecoder& decoder, Arguments4& result)
- {
- if (!Arguments3<T1, T2, T3>::decode(decoder, result))
- return false;
-
- return decoder.decode(result.argument4);
- }
-
- T4 argument4;
-};
-
-template<typename T1, typename T2, typename T3, typename T4, typename T5> struct Arguments5 : Arguments4<T1, T2, T3, T4> {
- typedef std::tuple<typename std::remove_const<typename std::remove_reference<T1>::type>::type,
- typename std::remove_const<typename std::remove_reference<T2>::type>::type,
- typename std::remove_const<typename std::remove_reference<T3>::type>::type,
- typename std::remove_const<typename std::remove_reference<T4>::type>::type,
- typename std::remove_const<typename std::remove_reference<T5>::type>::type> ValueType;
-
- Arguments5()
- {
- }
-
- Arguments5(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
- : Arguments4<T1, T2, T3, T4>(t1, t2, t3, t4)
- , argument5(t5)
- {
- }
-
- void encode(ArgumentEncoder& encoder) const
- {
- Arguments4<T1, T2, T3, T4>::encode(encoder);
- encoder << argument5;
- }
-
- static bool decode(ArgumentDecoder& decoder, Arguments5& result)
- {
- if (!Arguments4<T1, T2, T3, T4>::decode(decoder, result))
- return false;
-
- return decoder.decode(result.argument5);
- }
-
- T5 argument5;
-};
-
-template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6> struct Arguments6 : Arguments5<T1, T2, T3, T4, T5> {
- typedef std::tuple<typename std::remove_const<typename std::remove_reference<T1>::type>::type,
- typename std::remove_const<typename std::remove_reference<T2>::type>::type,
- typename std::remove_const<typename std::remove_reference<T3>::type>::type,
- typename std::remove_const<typename std::remove_reference<T4>::type>::type,
- typename std::remove_const<typename std::remove_reference<T5>::type>::type,
- typename std::remove_const<typename std::remove_reference<T6>::type>::type> ValueType;
-
- Arguments6()
- {
- }
-
- Arguments6(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
- : Arguments5<T1, T2, T3, T4, T5>(t1, t2, t3, t4, t5)
- , argument6(t6)
- {
- }
-
- void encode(ArgumentEncoder& encoder) const
- {
- Arguments5<T1, T2, T3, T4, T5>::encode(encoder);
- encoder << argument6;
- }
-
- static bool decode(ArgumentDecoder& decoder, Arguments6& result)
- {
- if (!Arguments5<T1, T2, T3, T4, T5>::decode(decoder, result))
- return false;
-
- return decoder.decode(result.argument6);
- }
-
- T6 argument6;
-};
-
-template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7> struct Arguments7 : Arguments6<T1, T2, T3, T4, T5, T6> {
- typedef std::tuple<typename std::remove_const<typename std::remove_reference<T1>::type>::type,
- typename std::remove_const<typename std::remove_reference<T2>::type>::type,
- typename std::remove_const<typename std::remove_reference<T3>::type>::type,
- typename std::remove_const<typename std::remove_reference<T4>::type>::type,
- typename std::remove_const<typename std::remove_reference<T5>::type>::type,
- typename std::remove_const<typename std::remove_reference<T6>::type>::type,
- typename std::remove_const<typename std::remove_reference<T7>::type>::type> ValueType;
-
- Arguments7()
- {
- }
-
- Arguments7(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
- : Arguments6<T1, T2, T3, T4, T5, T6>(t1, t2, t3, t4, t5, t6)
- , argument7(t7)
- {
- }
-
- void encode(ArgumentEncoder& encoder) const
- {
- Arguments6<T1, T2, T3, T4, T5, T6>::encode(encoder);
- encoder << argument7;
- }
-
- static bool decode(ArgumentDecoder& decoder, Arguments7& result)
- {
- if (!Arguments6<T1, T2, T3, T4, T5, T6>::decode(decoder, result))
- return false;
-
- return decoder.decode(result.argument7);
- }
-
- T7 argument7;
-};
-
-template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8> struct Arguments8 : Arguments7<T1, T2, T3, T4, T5, T6, T7> {
- typedef std::tuple<typename std::remove_const<typename std::remove_reference<T1>::type>::type,
- typename std::remove_const<typename std::remove_reference<T2>::type>::type,
- typename std::remove_const<typename std::remove_reference<T3>::type>::type,
- typename std::remove_const<typename std::remove_reference<T4>::type>::type,
- typename std::remove_const<typename std::remove_reference<T5>::type>::type,
- typename std::remove_const<typename std::remove_reference<T6>::type>::type,
- typename std::remove_const<typename std::remove_reference<T7>::type>::type,
- typename std::remove_const<typename std::remove_reference<T8>::type>::type> ValueType;
-
- Arguments8() { }
-
- Arguments8(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
- : Arguments7<T1, T2, T3, T4, T5, T6, T7>(t1, t2, t3, t4, t5, t6, t7)
- , argument8(t8)
- {
- }
-
- void encode(ArgumentEncoder& encoder) const
- {
- Arguments7<T1, T2, T3, T4, T5, T6, T7>::encode(encoder);
- encoder << argument8;
- }
-
- static bool decode(ArgumentDecoder& decoder, Arguments8& result)
- {
- if (!Arguments7<T1, T2, T3, T4, T5, T6, T7>::decode(decoder, result))
- return false;
-
- return decoder.decode(result.argument8);
- }
-
- T8 argument8;
-};
-
-template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10> struct Arguments10 : Arguments8<T1, T2, T3, T4, T5, T6, T7, T8> {
- typedef std::tuple<typename std::remove_const<typename std::remove_reference<T1>::type>::type,
- typename std::remove_const<typename std::remove_reference<T2>::type>::type,
- typename std::remove_const<typename std::remove_reference<T3>::type>::type,
- typename std::remove_const<typename std::remove_reference<T4>::type>::type,
- typename std::remove_const<typename std::remove_reference<T5>::type>::type,
- typename std::remove_const<typename std::remove_reference<T6>::type>::type,
- typename std::remove_const<typename std::remove_reference<T7>::type>::type,
- typename std::remove_const<typename std::remove_reference<T8>::type>::type,
- typename std::remove_const<typename std::remove_reference<T9>::type>::type,
- typename std::remove_const<typename std::remove_reference<T10>::type>::type> ValueType;
-
- Arguments10() { }
-
- Arguments10(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9, T10 t10)
- : Arguments8<T1, T2, T3, T4, T5, T6, T7, T8>(t1, t2, t3, t4, t5, t6, t7, t8)
- , argument9(t9)
- , argument10(t10)
- {
- }
-
- void encode(ArgumentEncoder& encoder) const
- {
- Arguments8<T1, T2, T3, T4, T5, T6, T7, T8>::encode(encoder);
- encoder << argument9;
- encoder << argument10;
- }
-
- static bool decode(ArgumentDecoder& decoder, Arguments10& result)
- {
- if (!Arguments8<T1, T2, T3, T4, T5, T6, T7, T8>::decode(decoder, result))
- return false;
-
- decoder.decode(result.argument9);
- return decoder.decode(result.argument10);
- }
-
- T9 argument9;
- T10 argument10;
-};
-
} // namespace IPC
#endif // Arguments_h
Modified: trunk/Source/WebKit2/Scripts/webkit2/LegacyMessages-expected.h (167398 => 167399)
--- trunk/Source/WebKit2/Scripts/webkit2/LegacyMessages-expected.h 2014-04-16 23:40:53 UTC (rev 167398)
+++ trunk/Source/WebKit2/Scripts/webkit2/LegacyMessages-expected.h 2014-04-16 23:46:59 UTC (rev 167399)
@@ -295,7 +295,7 @@
static IPC::StringReference name() { return IPC::StringReference("CreatePlugin"); }
static const bool isSync = true;
- typedef IPC::Arguments1<bool&> Reply;
+ typedef IPC::Arguments<bool&> Reply;
CreatePlugin(uint64_t pluginInstanceID, const WebKit::Plugin::Parameters& parameters)
: m_arguments(pluginInstanceID, parameters)
{
@@ -318,7 +318,7 @@
static IPC::StringReference name() { return IPC::StringReference("RunJavaScriptAlert"); }
static const bool isSync = true;
- typedef IPC::Arguments0 Reply;
+ typedef IPC::Arguments<> Reply;
RunJavaScriptAlert(uint64_t frameID, const String& message)
: m_arguments(frameID, message)
{
@@ -341,7 +341,7 @@
static IPC::StringReference name() { return IPC::StringReference("GetPlugins"); }
static const bool isSync = true;
- typedef IPC::Arguments1<Vector<WebCore::PluginInfo>&> Reply;
+ typedef IPC::Arguments<Vector<WebCore::PluginInfo>&> Reply;
explicit GetPlugins(bool refresh)
: m_arguments(refresh)
{
@@ -375,7 +375,7 @@
std::unique_ptr<IPC::MessageEncoder> m_encoder;
};
- typedef IPC::Arguments1<IPC::Connection::Handle&> Reply;
+ typedef IPC::Arguments<IPC::Connection::Handle&> Reply;
explicit GetPluginProcessConnection(const String& pluginPath)
: m_arguments(pluginPath)
{
@@ -409,7 +409,7 @@
std::unique_ptr<IPC::MessageEncoder> m_encoder;
};
- typedef IPC::Arguments0 Reply;
+ typedef IPC::Arguments<> Reply;
const std::tuple<> arguments() const
{
return m_arguments;
@@ -518,7 +518,7 @@
static IPC::StringReference name() { return IPC::StringReference("InterpretKeyEvent"); }
static const bool isSync = true;
- typedef IPC::Arguments1<Vector<WebCore::KeypressCommand>&> Reply;
+ typedef IPC::Arguments<Vector<WebCore::KeypressCommand>&> Reply;
explicit InterpretKeyEvent(uint32_t type)
: m_arguments(type)
{
Modified: trunk/Source/WebKit2/Scripts/webkit2/Messages-expected.h (167398 => 167399)
--- trunk/Source/WebKit2/Scripts/webkit2/Messages-expected.h 2014-04-16 23:40:53 UTC (rev 167398)
+++ trunk/Source/WebKit2/Scripts/webkit2/Messages-expected.h 2014-04-16 23:46:59 UTC (rev 167399)
@@ -295,7 +295,7 @@
static IPC::StringReference name() { return IPC::StringReference("CreatePlugin"); }
static const bool isSync = true;
- typedef IPC::Arguments1<bool&> Reply;
+ typedef IPC::Arguments<bool&> Reply;
CreatePlugin(uint64_t pluginInstanceID, const WebKit::Plugin::Parameters& parameters)
: m_arguments(pluginInstanceID, parameters)
{
@@ -318,7 +318,7 @@
static IPC::StringReference name() { return IPC::StringReference("RunJavaScriptAlert"); }
static const bool isSync = true;
- typedef IPC::Arguments0 Reply;
+ typedef IPC::Arguments<> Reply;
RunJavaScriptAlert(uint64_t frameID, const String& message)
: m_arguments(frameID, message)
{
@@ -341,7 +341,7 @@
static IPC::StringReference name() { return IPC::StringReference("GetPlugins"); }
static const bool isSync = true;
- typedef IPC::Arguments1<Vector<WebCore::PluginInfo>&> Reply;
+ typedef IPC::Arguments<Vector<WebCore::PluginInfo>&> Reply;
explicit GetPlugins(bool refresh)
: m_arguments(refresh)
{
@@ -375,7 +375,7 @@
std::unique_ptr<IPC::MessageEncoder> m_encoder;
};
- typedef IPC::Arguments1<IPC::Connection::Handle&> Reply;
+ typedef IPC::Arguments<IPC::Connection::Handle&> Reply;
explicit GetPluginProcessConnection(const String& pluginPath)
: m_arguments(pluginPath)
{
@@ -409,7 +409,7 @@
std::unique_ptr<IPC::MessageEncoder> m_encoder;
};
- typedef IPC::Arguments0 Reply;
+ typedef IPC::Arguments<> Reply;
const std::tuple<> arguments() const
{
return m_arguments;
@@ -518,7 +518,7 @@
static IPC::StringReference name() { return IPC::StringReference("InterpretKeyEvent"); }
static const bool isSync = true;
- typedef IPC::Arguments1<Vector<WebCore::KeypressCommand>&> Reply;
+ typedef IPC::Arguments<Vector<WebCore::KeypressCommand>&> Reply;
explicit InterpretKeyEvent(uint32_t type)
: m_arguments(type)
{
Modified: trunk/Source/WebKit2/Scripts/webkit2/messages.py (167398 => 167399)
--- trunk/Source/WebKit2/Scripts/webkit2/messages.py 2014-04-16 23:40:53 UTC (rev 167398)
+++ trunk/Source/WebKit2/Scripts/webkit2/messages.py 2014-04-16 23:46:59 UTC (rev 167399)
@@ -93,22 +93,12 @@
return '%s&' % type
-def arguments_type_old(parameters, parameter_type_function):
- arguments_type = 'IPC::Arguments%d' % len(parameters)
- if len(parameters):
- arguments_type = '%s<%s>' % (arguments_type, ', '.join(parameter_type_function(parameter.type) for parameter in parameters))
- return arguments_type
-
-
def arguments_type(message):
return 'std::tuple<%s>' % ', '.join(function_parameter_type(parameter.type) for parameter in message.parameters)
-def base_class(message):
- return arguments_type(message.parameters, function_parameter_type)
-
def reply_type(message):
- return arguments_type_old(message.reply_parameters, reply_parameter_type)
+ return 'IPC::Arguments<%s>' % (', '.join(reply_parameter_type(parameter.type) for parameter in message.reply_parameters))
def decode_type(message):
@@ -119,10 +109,7 @@
return 'std::tuple<%s>' % ', '.join(parameter.type for parameter in parameters)
-def delayed_reply_type(message):
- return arguments_type_old(message.reply_parameters, function_parameter_type)
-
def message_to_struct_declaration(message):
result = []
function_parameters = [(function_parameter_type(x.type), x.name) for x in message.parameters]
_______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes