| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Generates Python source files from a mojom.Module.""" | 5 """Generates Python source files from a mojom.Module.""" |
| 6 | 6 |
| 7 import re | 7 import re |
| 8 from itertools import ifilter | 8 from itertools import ifilter |
| 9 | 9 |
| 10 import mojom.generate.generator as generator | 10 import mojom.generate.generator as generator |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 mojom.INT8: 'b', | 44 mojom.INT8: 'b', |
| 45 mojom.UINT8: 'B', | 45 mojom.UINT8: 'B', |
| 46 mojom.INT16: 'h', | 46 mojom.INT16: 'h', |
| 47 mojom.UINT16: 'H', | 47 mojom.UINT16: 'H', |
| 48 mojom.INT32: 'i', | 48 mojom.INT32: 'i', |
| 49 mojom.UINT32: 'I', | 49 mojom.UINT32: 'I', |
| 50 mojom.FLOAT: 'f', | 50 mojom.FLOAT: 'f', |
| 51 mojom.DOUBLE: 'd', | 51 mojom.DOUBLE: 'd', |
| 52 } | 52 } |
| 53 | 53 |
| 54 _kind_to_typecode = dict(_kind_to_typecode_for_native_array) | |
| 55 _kind_to_typecode.update({ | |
| 56 mojom.INT64: 'q', | |
| 57 mojom.UINT64: 'Q', | |
| 58 mojom.HANDLE: 'i', | |
| 59 mojom.DCPIPE: 'i', | |
| 60 mojom.DPPIPE: 'i', | |
| 61 mojom.MSGPIPE: 'i', | |
| 62 mojom.SHAREDBUFFER: 'i', | |
| 63 mojom.NULLABLE_HANDLE: 'i', | |
| 64 mojom.NULLABLE_DCPIPE: 'i', | |
| 65 mojom.NULLABLE_DPPIPE: 'i', | |
| 66 mojom.NULLABLE_MSGPIPE: 'i', | |
| 67 mojom.NULLABLE_SHAREDBUFFER: 'i', | |
| 68 }) | |
| 69 | |
| 70 | 54 |
| 71 def NameToComponent(name): | 55 def NameToComponent(name): |
| 72 # insert '_' between anything and a Title name (e.g, HTTPEntry2FooBar -> | 56 # insert '_' between anything and a Title name (e.g, HTTPEntry2FooBar -> |
| 73 # HTTP_Entry2_FooBar) | 57 # HTTP_Entry2_FooBar) |
| 74 name = re.sub('([^_])([A-Z][^A-Z_]+)', r'\1_\2', name) | 58 name = re.sub('([^_])([A-Z][^A-Z_]+)', r'\1_\2', name) |
| 75 # insert '_' between non upper and start of upper blocks (e.g., | 59 # insert '_' between non upper and start of upper blocks (e.g., |
| 76 # HTTP_Entry2_FooBar -> HTTP_Entry2_Foo_Bar) | 60 # HTTP_Entry2_FooBar -> HTTP_Entry2_Foo_Bar) |
| 77 name = re.sub('([^A-Z_])([A-Z])', r'\1_\2', name) | 61 name = re.sub('([^A-Z_])([A-Z])', r'\1_\2', name) |
| 78 return [x.lower() for x in name.split('_')] | 62 return [x.lower() for x in name.split('_')] |
| 79 | 63 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 name = [] | 114 name = [] |
| 131 if kind.imported_from: | 115 if kind.imported_from: |
| 132 name.append(kind.imported_from['python_module']) | 116 name.append(kind.imported_from['python_module']) |
| 133 name.append(GetNameForElement(kind)) | 117 name.append(GetNameForElement(kind)) |
| 134 return '.'.join(name) | 118 return '.'.join(name) |
| 135 | 119 |
| 136 def GetFieldType(kind, field=None): | 120 def GetFieldType(kind, field=None): |
| 137 if mojom.IsArrayKind(kind): | 121 if mojom.IsArrayKind(kind): |
| 138 arguments = [] | 122 arguments = [] |
| 139 if kind.kind in _kind_to_typecode_for_native_array: | 123 if kind.kind in _kind_to_typecode_for_native_array: |
| 140 arguments.append('%r' %_kind_to_typecode_for_native_array[kind.kind]) | 124 arguments.append('%r' % _kind_to_typecode_for_native_array[kind.kind]) |
| 141 elif kind.kind != mojom.BOOL: | 125 elif kind.kind != mojom.BOOL: |
| 142 arguments.append(GetFieldType(kind.kind)) | 126 arguments.append(GetFieldType(kind.kind)) |
| 143 if mojom.IsNullableKind(kind): | 127 if mojom.IsNullableKind(kind): |
| 144 arguments.append('nullable=True') | 128 arguments.append('nullable=True') |
| 145 if kind.length is not None: | 129 if kind.length is not None: |
| 146 arguments.append('length=%d' % kind.length) | 130 arguments.append('length=%d' % kind.length) |
| 147 array_type = 'GenericArrayType' | 131 array_type = 'GenericArrayType' |
| 148 if kind.kind == mojom.BOOL: | 132 if kind.kind == mojom.BOOL: |
| 149 array_type = 'BooleanArrayType' | 133 array_type = 'BooleanArrayType' |
| 150 elif kind.kind in _kind_to_typecode_for_native_array: | 134 elif kind.kind in _kind_to_typecode_for_native_array: |
| (...skipping 11 matching lines...) Expand all Loading... |
| 162 | 146 |
| 163 if mojom.IsStructKind(kind): | 147 if mojom.IsStructKind(kind): |
| 164 arguments = [ 'lambda: %s' % GetFullyQualifiedName(kind) ] | 148 arguments = [ 'lambda: %s' % GetFullyQualifiedName(kind) ] |
| 165 if mojom.IsNullableKind(kind): | 149 if mojom.IsNullableKind(kind): |
| 166 arguments.append('nullable=True') | 150 arguments.append('nullable=True') |
| 167 return '_descriptor.StructType(%s)' % ', '.join(arguments) | 151 return '_descriptor.StructType(%s)' % ', '.join(arguments) |
| 168 | 152 |
| 169 if mojom.IsEnumKind(kind): | 153 if mojom.IsEnumKind(kind): |
| 170 return GetFieldType(mojom.INT32) | 154 return GetFieldType(mojom.INT32) |
| 171 | 155 |
| 172 return _kind_to_type.get(kind, '_descriptor.TYPE_NONE') | 156 if mojom.IsInterfaceKind(kind): |
| 157 arguments = [ 'lambda: %s' % GetFullyQualifiedName(kind) ] |
| 158 if mojom.IsNullableKind(kind): |
| 159 arguments.append('nullable=True') |
| 160 return '_descriptor.InterfaceType(%s)' % ', '.join(arguments) |
| 161 |
| 162 if mojom.IsInterfaceRequestKind(kind): |
| 163 arguments = [] |
| 164 if mojom.IsNullableKind(kind): |
| 165 arguments.append('nullable=True') |
| 166 return '_descriptor.InterfaceRequestType(%s)' % ', '.join(arguments) |
| 167 |
| 168 return _kind_to_type[kind] |
| 173 | 169 |
| 174 def GetFieldDescriptor(packed_field): | 170 def GetFieldDescriptor(packed_field): |
| 175 field = packed_field.field | 171 field = packed_field.field |
| 176 class_name = 'SingleFieldGroup' | 172 class_name = 'SingleFieldGroup' |
| 177 if field.kind == mojom.BOOL: | 173 if field.kind == mojom.BOOL: |
| 178 class_name = 'FieldDescriptor' | 174 class_name = 'FieldDescriptor' |
| 179 arguments = [ '%r' % GetNameForElement(field) ] | 175 arguments = [ '%r' % GetNameForElement(field) ] |
| 180 arguments.append(GetFieldType(field.kind, field)) | 176 arguments.append(GetFieldType(field.kind, field)) |
| 181 arguments.append(str(packed_field.index)) | 177 arguments.append(str(packed_field.index)) |
| 182 arguments.append(str(packed_field.ordinal)) | 178 arguments.append(str(packed_field.ordinal)) |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 'Unable to find interface %s declared as client of %s.' % | 327 'Unable to find interface %s declared as client of %s.' % |
| 332 (interface.client, interface.name)) | 328 (interface.client, interface.name)) |
| 333 interface.qualified_client = interfaces_by_name[interface.client] | 329 interface.qualified_client = interfaces_by_name[interface.client] |
| 334 return sorted(interfaces, key=lambda i: (bool(i.client), i.name)) | 330 return sorted(interfaces, key=lambda i: (bool(i.client), i.name)) |
| 335 | 331 |
| 336 def GetJinjaParameters(self): | 332 def GetJinjaParameters(self): |
| 337 return { | 333 return { |
| 338 'lstrip_blocks': True, | 334 'lstrip_blocks': True, |
| 339 'trim_blocks': True, | 335 'trim_blocks': True, |
| 340 } | 336 } |
| OLD | NEW |