summaryrefslogtreecommitdiff
path: root/Source/WebKit2/Scripts/webkit2/parser.py
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2013-09-13 12:51:20 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-19 20:50:05 +0200
commitd441d6f39bb846989d95bcf5caf387b42414718d (patch)
treee367e64a75991c554930278175d403c072de6bb8 /Source/WebKit2/Scripts/webkit2/parser.py
parent0060b2994c07842f4c59de64b5e3e430525c4b90 (diff)
downloadqtwebkit-d441d6f39bb846989d95bcf5caf387b42414718d.tar.gz
Import Qt5x2 branch of QtWebkit for Qt 5.2
Importing a new snapshot of webkit. Change-Id: I2d01ad12cdc8af8cb015387641120a9d7ea5f10c Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
Diffstat (limited to 'Source/WebKit2/Scripts/webkit2/parser.py')
-rw-r--r--Source/WebKit2/Scripts/webkit2/parser.py33
1 files changed, 29 insertions, 4 deletions
diff --git a/Source/WebKit2/Scripts/webkit2/parser.py b/Source/WebKit2/Scripts/webkit2/parser.py
index c40080f0a..e16593ae6 100644
--- a/Source/WebKit2/Scripts/webkit2/parser.py
+++ b/Source/WebKit2/Scripts/webkit2/parser.py
@@ -26,17 +26,20 @@ from webkit2 import model
def parse(file):
+ receiver_attributes = None
destination = None
messages = []
condition = None
master_condition = None
for line in file:
- match = re.search(r'messages -> ([A-Za-z_0-9]+) {', line)
+ match = re.search(r'messages -> (?P<destination>[A-Za-z_0-9]+) \s*(?:(?P<attributes>.*?)\s+)?{', line)
if match:
+ receiver_attributes = parse_attributes_string(match.group('attributes'))
+
if condition:
master_condition = condition
condition = None
- destination = match.group(1)
+ destination = match.group('destination')
continue
if line.startswith('#'):
if line.startswith('#if '):
@@ -66,7 +69,7 @@ def parse(file):
reply_parameters = None
messages.append(model.Message(name, parameters, reply_parameters, attributes, condition))
- return model.MessageReceiver(destination, messages, master_condition)
+ return model.MessageReceiver(destination, receiver_attributes, messages, master_condition)
def parse_attributes_string(attributes_string):
@@ -75,9 +78,31 @@ def parse_attributes_string(attributes_string):
return attributes_string.split()
+def split_parameters_string(parameters_string):
+ parameters = []
+ current_parameter_string = ''
+
+ nest_level = 0
+ for character in parameters_string:
+ if character == ',' and nest_level == 0:
+ parameters.append(current_parameter_string)
+ current_parameter_string = ''
+ continue
+
+ if character == '<':
+ nest_level += 1
+ elif character == '>':
+ nest_level -= 1
+
+ current_parameter_string += character
+
+ parameters.append(current_parameter_string)
+ return parameters
+
def parse_parameters_string(parameters_string):
parameters = []
- for parameter_string in parameters_string.split(', '):
+
+ for parameter_string in split_parameters_string(parameters_string):
match = re.search(r'\s*(?:\[(?P<attributes>.*?)\]\s+)?(?P<type_and_name>.*)', parameter_string)
attributes_string, type_and_name_string = match.group('attributes', 'type_and_name')
parameter_type, parameter_name = type_and_name_string.rsplit(' ', 1)