[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
andersca at apple.com
andersca at apple.com
Wed Dec 22 13:41:32 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit a6d24bf7452cefab5bd2925eb6d0cd4ec8fe5a33
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Thu Sep 23 16:46:36 2010 +0000
Message autogeneration script should parse sync message syntax
https://bugs.webkit.org/show_bug.cgi?id=46359
Reviewed by Adam Roben.
* Scripts/webkit2/messages.py:
(MessageReceiver.parse): Expand the regular expression to handle sync messages.
(function_parameter_type): Use a const reference for all parameters except the known builtins.
(base_class): Returns the base class for a sync message reply struct.
(delayed_base_class): Returns the base class for a delayed sync message reply struct.
* Scripts/webkit2/messages_unittest.py:
Add unit tests for various sync messages.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@68153 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 5e12081..c38cfdc 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,3 +1,19 @@
+2010-09-23 Anders Carlsson <andersca at apple.com>
+
+ Reviewed by Adam Roben.
+
+ Message autogeneration script should parse sync message syntax
+ https://bugs.webkit.org/show_bug.cgi?id=46359
+
+ * Scripts/webkit2/messages.py:
+ (MessageReceiver.parse): Expand the regular expression to handle sync messages.
+ (function_parameter_type): Use a const reference for all parameters except the known builtins.
+ (base_class): Returns the base class for a sync message reply struct.
+ (delayed_base_class): Returns the base class for a delayed sync message reply struct.
+
+ * Scripts/webkit2/messages_unittest.py:
+ Add unit tests for various sync messages.
+
2010-09-22 Andras Becsi <abecsi at webkit.org>
Unreviewed build fix after r68079.
diff --git a/WebKit2/Scripts/webkit2/messages.py b/WebKit2/Scripts/webkit2/messages.py
index df7392d..ab3f389 100644
--- a/WebKit2/Scripts/webkit2/messages.py
+++ b/WebKit2/Scripts/webkit2/messages.py
@@ -73,21 +73,34 @@ class MessageReceiver(object):
elif line.startswith('#endif'):
condition = None
continue
- match = re.search(r'([A-Za-z_0-9]+)\((.*)\)', line)
+ match = re.search(r'([A-Za-z_0-9]+)\((.*?)\)(?:(?:\s+->\s+)\((.*?)\)(?:\s+(delayed))?)?', line)
if match:
- name, parameters_string = match.groups()
+ name, parameters_string, reply_parameters_string, delayed_string = match.groups()
if parameters_string:
- parameters = [Parameter(*type_and_name.split(' ')) for type_and_name in parameters_string.split(', ')]
+ parameters = parse_parameter_string(parameters_string)
else:
parameters = []
- messages.append(Message(name, parameters, condition))
+
+ delayed = delayed_string == 'delayed'
+
+ if reply_parameters_string:
+ reply_parameters = parse_parameter_string(reply_parameters_string)
+ elif reply_parameters_string == '':
+ reply_parameters = []
+ else:
+ reply_parameters = None
+
+ messages.append(Message(name, parameters, reply_parameters, delayed, condition))
return MessageReceiver(destination, messages)
class Message(object):
- def __init__(self, name, parameters, condition):
+ def __init__(self, name, parameters, reply_parameters, delayed, condition):
self.name = name
self.parameters = parameters
+ self.reply_parameters = reply_parameters
+ if self.reply_parameters is not None:
+ self.delayed = delayed
self.condition = condition
def id(self):
@@ -100,6 +113,10 @@ class Parameter(object):
self.name = name
+def parse_parameter_string(parameter_string):
+ return [Parameter(*type_and_name.split(' ')) for type_and_name in parameter_string.split(', ')]
+
+
def messages_header_filename(receiver):
return '%sMessages.h' % receiver.name
@@ -119,20 +136,49 @@ def messages_to_kind_enum(messages):
def function_parameter_type(type):
- # We assume that we must use a reference for a type iff it contains a scope
- # resolution operator (::).
- if re.search(r'::', type):
- return 'const %s&' % type
- return type
+ # Don't use references for built-in types.
+ builtin_types = frozenset([
+ 'bool',
+ 'uint8_t',
+ 'uint16_t',
+ 'uint32_t',
+ 'uint64_t',
+ ])
+
+ if type in builtin_types:
+ return type
+
+ return 'const %s&' % type
+
+
+def reply_parameter_type(type):
+ return '%s&' % type
+
+
+def arguments_base_class(parameters, parameter_type_function):
+ arguments_class = 'CoreIPC::Arguments%d' % len(parameters)
+ if len(parameters):
+ arguments_class = '%s<%s>' % (arguments_class, ', '.join(parameter_type_function(parameter.type) for parameter in parameters))
+ return arguments_class
def base_class(message):
+ return arguments_base_class(message.parameters, function_parameter_type)
+
base_class = 'CoreIPC::Arguments%d' % len(message.parameters)
if len(message.parameters):
base_class = '%s<%s>' % (base_class, ', '.join(function_parameter_type(parameter.type) for parameter in message.parameters))
return base_class
+def reply_base_class(message):
+ return arguments_base_class(message.reply_parameters, reply_parameter_type)
+
+
+def delayed_reply_base_class(message):
+ return arguments_base_class(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]
diff --git a/WebKit2/Scripts/webkit2/messages_unittest.py b/WebKit2/Scripts/webkit2/messages_unittest.py
index 6884ba8..0dfea52 100644
--- a/WebKit2/Scripts/webkit2/messages_unittest.py
+++ b/WebKit2/Scripts/webkit2/messages_unittest.py
@@ -54,6 +54,12 @@ messages -> WebPage {
#endif
DidReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction)
Close()
+
+ SendInts(Vector<uint64_t> ints)
+
+ RunJavaScriptAlert(uint64_t frameID, WTF::String message) -> ()
+ GetPlugins(bool refresh) -> (Vector<WebCore::PluginInfo> plugins)
+ GetPluginProcessConnection(WTF::String pluginPath) -> (CoreIPC::Connection::Handle connectionHandle) delayed
}
"""
@@ -92,6 +98,50 @@ _expected_results = {
'condition': None,
'base_class': 'CoreIPC::Arguments0',
},
+ {
+ 'name': 'SendInts',
+ 'parameters': (
+ ('Vector<uint64_t>', 'ints'),
+ ),
+ 'condition': None,
+ 'base_class': 'CoreIPC::Arguments1<const Vector<uint64_t>&>',
+ },
+ {
+ 'name': 'RunJavaScriptAlert',
+ 'parameters': (
+ ('uint64_t', 'frameID'),
+ ('WTF::String', 'message')
+ ),
+ 'reply_parameters': (),
+ 'condition': None,
+ 'base_class': 'CoreIPC::Arguments2<uint64_t, const WTF::String&>',
+ 'reply_base_class': 'CoreIPC::Arguments0',
+ },
+ {
+ 'name': 'GetPlugins',
+ 'parameters': (
+ ('bool', 'refresh'),
+ ),
+ 'reply_parameters': (
+ ('Vector<WebCore::PluginInfo>', 'plugins'),
+ ),
+ 'condition': None,
+ 'base_class': 'CoreIPC::Arguments1<bool>',
+ 'reply_base_class': 'CoreIPC::Arguments1<Vector<WebCore::PluginInfo>&>',
+ },
+ {
+ 'name': 'GetPluginProcessConnection',
+ 'parameters': (
+ ('WTF::String', 'pluginPath'),
+ ),
+ 'reply_parameters': (
+ ('CoreIPC::Connection::Handle', 'connectionHandle'),
+ ),
+ 'condition': None,
+ 'base_class': 'CoreIPC::Arguments1<const WTF::String&>',
+ 'reply_base_class': 'CoreIPC::Arguments1<CoreIPC::Connection::Handle&>',
+ 'delayed_reply_base_class': 'CoreIPC::Arguments1<const CoreIPC::Connection::Handle&>',
+ }
),
}
@@ -108,6 +158,12 @@ class ParsingTest(MessagesTest):
for index, parameter in enumerate(message.parameters):
self.assertEquals(parameter.type, expected_message['parameters'][index][0])
self.assertEquals(parameter.name, expected_message['parameters'][index][1])
+ if message.reply_parameters != None:
+ for index, parameter in enumerate(message.reply_parameters):
+ self.assertEquals(parameter.type, expected_message['reply_parameters'][index][0])
+ self.assertEquals(parameter.name, expected_message['reply_parameters'][index][1])
+ else:
+ self.assertFalse('reply_parameters' in expected_message)
self.assertEquals(message.condition, expected_message['condition'])
def test_receiver(self):
@@ -123,6 +179,12 @@ class HeaderTest(MessagesTest):
"""Base classes for message structs should match expectations"""
for index, message in enumerate(self.receiver.messages):
self.assertEquals(messages.base_class(message), _expected_results['messages'][index]['base_class'])
+ if message.reply_parameters != None:
+ self.assertEquals(messages.reply_base_class(message), _expected_results['messages'][index]['reply_base_class'])
+ if message.delayed:
+ self.assertEquals(messages.delayed_reply_base_class(message), _expected_results['messages'][index]['delayed_reply_base_class'])
+ else:
+ self.assertFalse('reply_parameters' in _expected_results['messages'][index])
class ReceiverImplementationTest(unittest.TestCase):
def setUp(self):
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list