summaryrefslogtreecommitdiff
path: root/Source/WebKit2/Scripts/webkit2/parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/Scripts/webkit2/parser.py')
-rw-r--r--Source/WebKit2/Scripts/webkit2/parser.py132
1 files changed, 0 insertions, 132 deletions
diff --git a/Source/WebKit2/Scripts/webkit2/parser.py b/Source/WebKit2/Scripts/webkit2/parser.py
deleted file mode 100644
index 52df5a881..000000000
--- a/Source/WebKit2/Scripts/webkit2/parser.py
+++ /dev/null
@@ -1,132 +0,0 @@
-# Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
-# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import re
-
-from webkit2 import model
-
-
-def combine_condition(conditions):
- if conditions:
- if len(conditions) == 1:
- return conditions[0]
- else:
- return bracket_if_needed(' && '.join(map(bracket_if_needed, conditions)))
- else:
- return None
-
-
-def bracket_if_needed(condition):
- if re.match(r'.*(&&|\|\|).*', condition):
- return '(%s)' % condition
- else:
- return condition
-
-
-def parse(file):
- receiver_attributes = None
- destination = None
- messages = []
- conditions = []
- master_condition = None
- superclass = []
- for line in file:
- match = re.search(r'messages -> (?P<destination>[A-Za-z_0-9]+) \s*(?::\s*(?P<superclass>.*?) \s*)?(?:(?P<attributes>.*?)\s+)?{', line)
- if match:
- receiver_attributes = parse_attributes_string(match.group('attributes'))
- if match.group('superclass'):
- superclass = match.group('superclass')
- if conditions:
- master_condition = conditions
- conditions = []
- destination = match.group('destination')
- continue
- if line.startswith('#'):
- trimmed = line.rstrip()
- if line.startswith('#if '):
- conditions.append(trimmed[4:])
- elif line.startswith('#endif') and conditions:
- conditions.pop()
- elif line.startswith('#else') or line.startswith('#elif'):
- raise Exception("ERROR: '%s' is not supported in the *.in files" % trimmed)
- continue
- match = re.search(r'([A-Za-z_0-9]+)\((.*?)\)(?:(?:\s+->\s+)\((.*?)\))?(?:\s+(.*))?', line)
- if match:
- name, parameters_string, reply_parameters_string, attributes_string = match.groups()
- if parameters_string:
- parameters = parse_parameters_string(parameters_string)
- for parameter in parameters:
- parameter.condition = combine_condition(conditions)
- else:
- parameters = []
-
- attributes = parse_attributes_string(attributes_string)
-
- if reply_parameters_string:
- reply_parameters = parse_parameters_string(reply_parameters_string)
- for reply_parameter in reply_parameters:
- reply_parameter.condition = combine_condition(conditions)
- elif reply_parameters_string == '':
- reply_parameters = []
- else:
- reply_parameters = None
-
- messages.append(model.Message(name, parameters, reply_parameters, attributes, combine_condition(conditions)))
- return model.MessageReceiver(destination, superclass, receiver_attributes, messages, combine_condition(master_condition))
-
-
-def parse_attributes_string(attributes_string):
- if not attributes_string:
- return None
- 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 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)
- parameters.append(model.Parameter(type=parameter_type, name=parameter_name, attributes=parse_attributes_string(attributes_string)))
- return parameters