Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 3 # for details. All rights reserved. Use of this source code is governed by a | 3 # for details. All rights reserved. Use of this source code is governed by a |
| 4 # BSD-style license that can be found in the LICENSE file. | 4 # BSD-style license that can be found in the LICENSE file. |
| 5 | 5 |
| 6 import copy | 6 import copy |
| 7 import database | 7 import database |
| 8 import idlparser | 8 import idlparser |
| 9 import logging | 9 import logging |
| 10 import os | 10 import os |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 142 op.arguments[i].is_optional = False | 142 op.arguments[i].is_optional = False |
| 143 new_op = copy.deepcopy(op) | 143 new_op = copy.deepcopy(op) |
| 144 new_op.arguments = new_op.arguments[:i] | 144 new_op.arguments = new_op.arguments[:i] |
| 145 new_ops.append(new_op) | 145 new_ops.append(new_op) |
| 146 new_ops.append(op) | 146 new_ops.append(op) |
| 147 interface.operations = new_ops | 147 interface.operations = new_ops |
| 148 | 148 |
| 149 def _rename_types(self, idl_file, import_options): | 149 def _rename_types(self, idl_file, import_options): |
| 150 """Rename interface and type names with names provided in the | 150 """Rename interface and type names with names provided in the |
| 151 options. Also clears scopes from scoped names""" | 151 options. Also clears scopes from scoped names""" |
| 152 def rename(idl_node): | 152 |
| 153 name_parts = idl_node.id.split('::') | 153 def rename(name): |
| 154 idl_node.id = name_parts[-1] | 154 name_parts = name.split('::') |
| 155 if idl_node.id in import_options.type_rename_map: | 155 name = name_parts[-1] |
| 156 idl_node.id = import_options.type_rename_map[idl_node.id] | 156 if name in import_options.type_rename_map: |
| 157 map(rename, idl_file.all(IDLInterface)) | 157 name = import_options.type_rename_map[name] |
| 158 map(rename, idl_file.all(IDLType)) | 158 return name |
| 159 | |
| 160 def rename_node(idl_node): | |
| 161 idl_node.id = rename(idl_node.id) | |
| 162 | |
| 163 def rename_ext_attrs(ext_attrs_node): | |
| 164 for type_valued_attribute_name in ['Supplemental']: | |
|
vsm
2012/01/31 00:12:53
Do you expect any more attrs in this list?
| |
| 165 if type_valued_attribute_name in ext_attrs_node: | |
| 166 value = ext_attrs_node[type_valued_attribute_name] | |
| 167 if isinstance(value, str): | |
| 168 ext_attrs_node[type_valued_attribute_name] = rename(value) | |
| 169 | |
| 170 map(rename_node, idl_file.all(IDLInterface)) | |
| 171 map(rename_node, idl_file.all(IDLType)) | |
| 172 map(rename_ext_attrs, idl_file.all(IDLExtAttrs)) | |
| 159 | 173 |
| 160 def _annotate(self, interface, module_name, import_options): | 174 def _annotate(self, interface, module_name, import_options): |
| 161 """Adds @ annotations based on the source and source_attributes | 175 """Adds @ annotations based on the source and source_attributes |
| 162 members of import_options.""" | 176 members of import_options.""" |
| 163 | 177 |
| 164 source = import_options.source | 178 source = import_options.source |
| 165 if not source: | 179 if not source: |
| 166 return | 180 return |
| 167 | 181 |
| 168 def add_source_annotation(idl_node): | 182 def add_source_annotation(idl_node): |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 427 if self._database.HasInterface(interface.id): | 441 if self._database.HasInterface(interface.id): |
| 428 old_interface = self._database.GetInterface(interface.id) | 442 old_interface = self._database.GetInterface(interface.id) |
| 429 self._merge_interfaces(old_interface, interface, import_options) | 443 self._merge_interfaces(old_interface, interface, import_options) |
| 430 else: | 444 else: |
| 431 if import_options.add_new_interfaces: | 445 if import_options.add_new_interfaces: |
| 432 self._database.AddInterface(interface) | 446 self._database.AddInterface(interface) |
| 433 | 447 |
| 434 # Step 3: Merge in supplemental interfaces | 448 # Step 3: Merge in supplemental interfaces |
| 435 for interface, module_name, import_options in self._imported_interfaces: | 449 for interface, module_name, import_options in self._imported_interfaces: |
| 436 if interface.is_supplemental: | 450 if interface.is_supplemental: |
| 437 # For now, ignore WebKit [Supplemental=BaseInterface] attributes. | 451 target_name = interface.ext_attrs['Supplemental'] |
| 438 target = interface.ext_attrs['Supplemental'] | 452 if target_name: |
| 439 if target: | 453 # [Supplemental=DOMWindow] - merge into DOMWindow. |
| 440 continue | 454 target = target_name |
| 441 target = interface.id | 455 else: |
| 456 # [Supplemental] - merge into existing inteface with same name. | |
| 457 target = interface.id | |
| 442 if self._database.HasInterface(target): | 458 if self._database.HasInterface(target): |
| 443 old_interface = self._database.GetInterface(target) | 459 old_interface = self._database.GetInterface(target) |
| 444 self._merge_interfaces(old_interface, interface, import_options) | 460 self._merge_interfaces(old_interface, interface, import_options) |
| 461 else: | |
| 462 raise Exception("Supplemental target '%s' not found", target) | |
| 445 | 463 |
| 446 # Step 4: Resolve 'implements' statements | 464 # Step 4: Resolve 'implements' statements |
| 447 for impl_stmt, import_options in self._impl_stmts: | 465 for impl_stmt, import_options in self._impl_stmts: |
| 448 self._merge_impl_stmt(impl_stmt, import_options) | 466 self._merge_impl_stmt(impl_stmt, import_options) |
| 449 | 467 |
| 450 self._impl_stmts = [] | 468 self._impl_stmts = [] |
| 451 self._imported_interfaces = [] | 469 self._imported_interfaces = [] |
| 452 | 470 |
| 453 def import_idl_file(self, file_path, | 471 def import_idl_file(self, file_path, |
| 454 import_options=DatabaseBuilderOptions()): | 472 import_options=DatabaseBuilderOptions()): |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 547 annotation = idl_node.annotations[source] | 565 annotation = idl_node.annotations[source] |
| 548 for name, value in annotation.items(): | 566 for name, value in annotation.items(): |
| 549 if (name in top_level_annotation | 567 if (name in top_level_annotation |
| 550 and value == top_level_annotation[name]): | 568 and value == top_level_annotation[name]): |
| 551 del annotation[name] | 569 del annotation[name] |
| 552 | 570 |
| 553 map(normalize, interface.parents) | 571 map(normalize, interface.parents) |
| 554 map(normalize, interface.constants) | 572 map(normalize, interface.constants) |
| 555 map(normalize, interface.attributes) | 573 map(normalize, interface.attributes) |
| 556 map(normalize, interface.operations) | 574 map(normalize, interface.operations) |
| OLD | NEW |