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 """Translates parse tree to Mojom IR.""" | 5 """Translates parse tree to Mojom IR.""" |
6 | 6 |
7 import re | 7 import re |
8 | 8 |
9 from . import ast | 9 from . import ast |
10 | 10 |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 _AddOptional(data, 'ordinal', | 123 _AddOptional(data, 'ordinal', |
124 struct_field.ordinal.value | 124 struct_field.ordinal.value |
125 if struct_field.ordinal else None) | 125 if struct_field.ordinal else None) |
126 _AddOptional(data, 'default', struct_field.default_value) | 126 _AddOptional(data, 'default', struct_field.default_value) |
127 _AddOptional(data, 'attributes', | 127 _AddOptional(data, 'attributes', |
128 _AttributeListToDict(struct_field.attribute_list)) | 128 _AttributeListToDict(struct_field.attribute_list)) |
129 return data | 129 return data |
130 | 130 |
131 assert isinstance(struct, ast.Struct) | 131 assert isinstance(struct, ast.Struct) |
132 data = {'name': struct.name, | 132 data = {'name': struct.name, |
133 'fields': _MapTreeForType(StructFieldToDict, struct.body, | 133 'native_only': struct.body is None} |
134 ast.StructField, struct.name), | 134 if not data['native_only']: |
135 'enums': _MapTreeForType(_EnumToDict, struct.body, ast.Enum, | 135 data.update({ |
136 struct.name), | 136 'fields': _MapTreeForType(StructFieldToDict, struct.body, |
137 'constants': _MapTreeForType(_ConstToDict, struct.body, | 137 ast.StructField, struct.name), |
138 ast.Const, struct.name)} | 138 'enums': _MapTreeForType(_EnumToDict, struct.body, ast.Enum, |
| 139 struct.name), |
| 140 'constants': _MapTreeForType(_ConstToDict, struct.body, |
| 141 ast.Const, struct.name)}) |
139 _AddOptional(data, 'attributes', | 142 _AddOptional(data, 'attributes', |
140 _AttributeListToDict(struct.attribute_list)) | 143 _AttributeListToDict(struct.attribute_list)) |
141 return data | 144 return data |
142 | 145 |
143 def UnionToDict(union): | 146 def UnionToDict(union): |
144 def UnionFieldToDict(union_field): | 147 def UnionFieldToDict(union_field): |
145 assert isinstance(union_field, ast.UnionField) | 148 assert isinstance(union_field, ast.UnionField) |
146 data = {'name': union_field.name, | 149 data = {'name': union_field.name, |
147 'kind': _MapKind(union_field.typename)} | 150 'kind': _MapKind(union_field.typename)} |
148 _AddOptional(data, 'ordinal', | 151 _AddOptional(data, 'ordinal', |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 self.mojom['constants'] = \ | 216 self.mojom['constants'] = \ |
214 _MapTreeForType(_ConstToDict, tree.definition_list, ast.Const, name) | 217 _MapTreeForType(_ConstToDict, tree.definition_list, ast.Const, name) |
215 _AddOptional(self.mojom, 'attributes', | 218 _AddOptional(self.mojom, 'attributes', |
216 _AttributeListToDict(tree.module.attribute_list) | 219 _AttributeListToDict(tree.module.attribute_list) |
217 if tree.module else None) | 220 if tree.module else None) |
218 return self.mojom | 221 return self.mojom |
219 | 222 |
220 | 223 |
221 def Translate(tree, name): | 224 def Translate(tree, name): |
222 return _MojomBuilder().Build(tree, name) | 225 return _MojomBuilder().Build(tree, name) |
OLD | NEW |