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...) 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...) 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...) 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...) 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 |