Chromium Code Reviews| Index: mojo/public/tools/bindings/generators/mojom_python_generator.py |
| diff --git a/mojo/public/tools/bindings/generators/mojom_python_generator.py b/mojo/public/tools/bindings/generators/mojom_python_generator.py |
| index 1f726b6699a9bb31ba226dc39885df38006be90b..5ae33b1fc5bd8567b1d6423b04c0e9f8cef49976 100644 |
| --- a/mojo/public/tools/bindings/generators/mojom_python_generator.py |
| +++ b/mojo/public/tools/bindings/generators/mojom_python_generator.py |
| @@ -146,7 +146,13 @@ def GetFieldType(kind, field=None): |
| arguments.append('nullable=True') |
| return '_descriptor.MapType(%s)' % ', '.join(arguments) |
| - if mojom.IsStructKind(kind) or mojom.IsUnionKind(kind): |
| + if mojom.IsUnionKind(kind): |
| + arguments = [ 'lambda: %s' % GetFullyQualifiedName(kind) ] |
| + if mojom.IsNullableKind(kind): |
| + arguments.append('nullable=True') |
| + return '_descriptor.UnionType(%s)' % ', '.join(arguments) |
| + |
| + if mojom.IsStructKind(kind): |
| arguments = [ 'lambda: %s' % GetFullyQualifiedName(kind) ] |
| if mojom.IsNullableKind(kind): |
| arguments.append('nullable=True') |
| @@ -169,15 +175,14 @@ def GetFieldType(kind, field=None): |
| return _kind_to_type[kind] |
| -def GetFieldDescriptor(packed_field): |
| - field = packed_field.field |
| +def GetFieldDescriptor(field, index, min_version): |
| class_name = 'SingleFieldGroup' |
| if field.kind == mojom.BOOL: |
| class_name = 'FieldDescriptor' |
| arguments = [ '%r' % GetNameForElement(field) ] |
| arguments.append(GetFieldType(field.kind, field)) |
| - arguments.append(str(packed_field.index)) |
| - arguments.append(str(packed_field.min_version)) |
| + arguments.append(str(index)) |
| + arguments.append(str(min_version)) |
| if field.default: |
| if mojom.IsStructKind(field.kind): |
| arguments.append('default_value=True') |
| @@ -185,12 +190,19 @@ def GetFieldDescriptor(packed_field): |
| arguments.append('default_value=%s' % ExpressionToText(field.default)) |
| return '_descriptor.%s(%s)' % (class_name, ', '.join(arguments)) |
| +def GetStructFieldDescriptor(packed_field): |
| + return GetFieldDescriptor( |
| + packed_field.field, packed_field.index, packed_field.min_version) |
| + |
| +def GetUnionFieldDescriptor(field): |
| + return GetFieldDescriptor(field, field.ordinal, 0) |
| + |
| def GetFieldGroup(byte): |
| if byte.packed_fields[0].field.kind == mojom.BOOL: |
| - descriptors = map(GetFieldDescriptor, byte.packed_fields) |
| + descriptors = map(GetStructFieldDescriptor, byte.packed_fields) |
| return '_descriptor.BooleanGroup([%s])' % ', '.join(descriptors) |
| assert len(byte.packed_fields) == 1 |
| - return GetFieldDescriptor(byte.packed_fields[0]) |
| + return GetStructFieldDescriptor(byte.packed_fields[0]) |
| def MojomToPythonImport(mojom): |
| return mojom.replace('.mojom', '_mojom') |
| @@ -200,6 +212,7 @@ class Generator(generator.Generator): |
| python_filters = { |
| 'expression_to_text': ExpressionToText, |
| 'field_group': GetFieldGroup, |
| + 'union_field_desc': GetUnionFieldDescriptor, |
|
qsr
2015/07/16 09:35:26
union_field_descriptor
azani
2015/07/16 21:57:39
Done.
|
| 'fully_qualified_name': GetFullyQualifiedName, |
| 'name': GetNameForElement, |
| } |
| @@ -213,6 +226,7 @@ class Generator(generator.Generator): |
| 'module': resolver.ResolveConstants(self.module, ExpressionToText), |
| 'namespace': self.module.namespace, |
| 'structs': self.GetStructs(), |
| + 'unions': self.GetUnions(), |
| } |
| def GenerateFiles(self, args): |