Index: mojo/public/tools/bindings/pylib/mojom/parse/translate.py |
diff --git a/mojo/public/tools/bindings/pylib/mojom/parse/translate.py b/mojo/public/tools/bindings/pylib/mojom/parse/translate.py |
index b990ecf365c0a75a2cf9986ec0e5390157a7fa85..6e64adde277257bc8b507170b4b4d0eb40ef2e66 100644 |
--- a/mojo/public/tools/bindings/pylib/mojom/parse/translate.py |
+++ b/mojo/public/tools/bindings/pylib/mojom/parse/translate.py |
@@ -67,35 +67,7 @@ def _AttributeListToDict(attribute_list): |
return dict([(attribute.key, attribute.value) |
for attribute in attribute_list]) |
-def _MapMethod(tree): |
- assert isinstance(tree[2], ast.ParameterList) |
- assert tree[3] is None or isinstance(tree[3], ast.Ordinal) |
- assert tree[4] is None or isinstance(tree[2], ast.ParameterList) |
- |
- def ParameterToDict(param): |
- assert isinstance(param, ast.Parameter) |
- return {'name': param.name, |
- 'kind': _MapKind(param.typename), |
- 'ordinal': param.ordinal.value if param.ordinal else None} |
- |
- method = {'name': tree[1], |
- 'parameters': map(ParameterToDict, tree[2]), |
- 'ordinal': tree[3].value if tree[3] else None} |
- if tree[4]: |
- method['response_parameters'] = map(ParameterToDict, tree[4]) |
- return method |
- |
-def _MapInterface(tree): |
- interface = {} |
- interface['name'] = tree[1] |
- interface['attributes'] = _AttributeListToDict(tree[2]) |
- interface['client'] = interface['attributes'].get('Client') |
- interface['methods'] = _MapTreeForName(_MapMethod, tree[3], 'METHOD') |
- interface['enums'] = _MapTreeForType(_MapEnum, tree[3], ast.Enum) |
- interface['constants'] = _MapTreeForType(_MapConstant, tree[3], ast.Const) |
- return interface |
- |
-def _MapEnum(enum): |
+def _EnumToDict(enum): |
def EnumValueToDict(enum_value): |
assert isinstance(enum_value, ast.EnumValue) |
return {'name': enum_value.name, |
@@ -105,7 +77,7 @@ def _MapEnum(enum): |
return {'name': enum.name, |
'fields': map(EnumValueToDict, enum.enum_value_list)} |
-def _MapConstant(const): |
+def _ConstToDict(const): |
assert isinstance(const, ast.Const) |
return {'name': const.name, |
'kind': _MapKind(const.typename), |
@@ -131,8 +103,36 @@ class _MojomBuilder(object): |
'attributes': _AttributeListToDict(struct.attribute_list), |
'fields': _MapTreeForType(StructFieldToDict, struct.body, |
ast.StructField), |
- 'enums': _MapTreeForType(_MapEnum, struct.body, ast.Enum), |
- 'constants': _MapTreeForType(_MapConstant, struct.body, |
+ 'enums': _MapTreeForType(_EnumToDict, struct.body, ast.Enum), |
+ 'constants': _MapTreeForType(_ConstToDict, struct.body, |
+ ast.Const)} |
+ |
+ def InterfaceToDict(interface): |
+ def MethodToDict(method): |
+ def ParameterToDict(param): |
+ assert isinstance(param, ast.Parameter) |
+ return {'name': param.name, |
+ 'kind': _MapKind(param.typename), |
+ 'ordinal': param.ordinal.value if param.ordinal else None} |
+ |
+ assert isinstance(method, ast.Method) |
+ rv = {'name': method.name, |
+ 'parameters': map(ParameterToDict, method.parameter_list), |
+ 'ordinal': method.ordinal.value if method.ordinal else None} |
+ if method.response_parameter_list is not None: |
+ rv['response_parameters'] = map(ParameterToDict, |
+ method.response_parameter_list) |
+ return rv |
+ |
+ assert isinstance(interface, ast.Interface) |
+ attributes = _AttributeListToDict(interface.attribute_list) |
+ return {'name': interface.name, |
+ 'attributes': attributes, |
+ 'client': attributes.get('Client'), |
+ 'methods': _MapTreeForType(MethodToDict, interface.body, |
+ ast.Method), |
+ 'enums': _MapTreeForType(_EnumToDict, interface.body, ast.Enum), |
+ 'constants': _MapTreeForType(_ConstToDict, interface.body, |
ast.Const)} |
assert isinstance(tree, ast.Mojom) |
@@ -145,11 +145,11 @@ class _MojomBuilder(object): |
self.mojom['structs'] = \ |
_MapTreeForType(StructToDict, tree.definition_list, ast.Struct) |
self.mojom['interfaces'] = \ |
- _MapTreeForName(_MapInterface, tree.definition_list, 'INTERFACE') |
+ _MapTreeForType(InterfaceToDict, tree.definition_list, ast.Interface) |
self.mojom['enums'] = \ |
- _MapTreeForType(_MapEnum, tree.definition_list, ast.Enum) |
+ _MapTreeForType(_EnumToDict, tree.definition_list, ast.Enum) |
self.mojom['constants'] = \ |
- _MapTreeForType(_MapConstant, tree.definition_list, ast.Const) |
+ _MapTreeForType(_ConstToDict, tree.definition_list, ast.Const) |
return self.mojom |