[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