Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2012, 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 """This module provides shared functionality for the systems to generate | 6 """This module provides shared functionality for the systems to generate |
| 7 native binding from the IDL database.""" | 7 native binding from the IDL database.""" |
| 8 | 8 |
| 9 import emitter | 9 import emitter |
| 10 import os | 10 import os |
| (...skipping 583 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 594 # | 594 # |
| 595 # In the non-root case we have to choose between: | 595 # In the non-root case we have to choose between: |
| 596 # | 596 # |
| 597 # class YImpl extends XImpl { add List<T> methods; } | 597 # class YImpl extends XImpl { add List<T> methods; } |
| 598 # | 598 # |
| 599 # and | 599 # and |
| 600 # | 600 # |
| 601 # class YImpl extends ListBase<T> { copies of transitive XImpl methods; } | 601 # class YImpl extends ListBase<T> { copies of transitive XImpl methods; } |
| 602 # | 602 # |
| 603 dart_element_type = DartType(element_type) | 603 dart_element_type = DartType(element_type) |
| 604 if ('CustomIndexedGetter' in self._interface.ext_attrs or | 604 if self._HasNativeIndexGetter(): |
| 605 'NumericIndexedGetter' in self._interface.ext_attrs): | |
| 606 self._EmitNativeIndexGetter(dart_element_type) | 605 self._EmitNativeIndexGetter(dart_element_type) |
| 607 else: | 606 else: |
| 608 self._members_emitter.Emit( | 607 self._members_emitter.Emit( |
| 609 '\n' | 608 '\n' |
| 610 ' $TYPE operator[](int index) {\n' | 609 ' $TYPE operator[](int index) {\n' |
| 611 ' return item(index);\n' | 610 ' return item(index);\n' |
| 612 ' }\n', | 611 ' }\n', |
| 613 TYPE=dart_element_type) | 612 TYPE=dart_element_type) |
| 614 | 613 |
| 615 if 'CustomIndexedSetter' in self._interface.ext_attrs: | 614 if self._HasNativeIndexSetter(): |
| 616 self._EmitNativeIndexSetter(dart_element_type) | 615 self._EmitNativeIndexSetter(dart_element_type) |
| 617 else: | 616 else: |
| 618 self._members_emitter.Emit( | 617 self._members_emitter.Emit( |
| 619 '\n' | 618 '\n' |
| 620 ' void operator[]=(int index, $TYPE value) {\n' | 619 ' void operator[]=(int index, $TYPE value) {\n' |
| 621 ' throw new UnsupportedOperationException("Cannot assign element of immutable List.");\n' | 620 ' throw new UnsupportedOperationException("Cannot assign element of immutable List.");\n' |
| 622 ' }\n', | 621 ' }\n', |
| 623 TYPE=dart_element_type) | 622 TYPE=dart_element_type) |
| 624 | 623 |
| 625 self._members_emitter.Emit( | 624 self._members_emitter.Emit( |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 704 '\n' | 703 '\n' |
| 705 ' bool isEmpty() {\n' | 704 ' bool isEmpty() {\n' |
| 706 ' return length == 0;\n' | 705 ' return length == 0;\n' |
| 707 ' }\n' | 706 ' }\n' |
| 708 '\n' | 707 '\n' |
| 709 ' Iterator<$TYPE> iterator() {\n' | 708 ' Iterator<$TYPE> iterator() {\n' |
| 710 ' return new _FixedSizeListIterator<$TYPE>(this);\n' | 709 ' return new _FixedSizeListIterator<$TYPE>(this);\n' |
| 711 ' }\n', | 710 ' }\n', |
| 712 TYPE=dart_element_type) | 711 TYPE=dart_element_type) |
| 713 | 712 |
| 713 def AmendIndexer(self, element_type): | |
| 714 dart_element_type = DartType(element_type) | |
| 715 ext_attrs = self._interface.ext_attrs | |
|
podivilov
2012/05/12 08:35:10
Is ext_attrs used in this method?
Anton Muhin
2012/05/12 08:37:03
No, thanks a lot for spotting, forgot to remove.
| |
| 716 | |
| 717 # If we have custom implementation of getter or setter, | |
| 718 # we are to emit operator overrides. | |
| 719 if self._HasNativeIndexGetter(): | |
| 720 self._EmitNativeIndexGetter(dart_element_type) | |
| 721 if self._HasNativeIndexSetter(): | |
| 722 self._EmitNativeIndexSetter(dart_element_type) | |
| 723 | |
| 724 def _HasNativeIndexGetter(self): | |
| 725 ext_attrs = self._interface.ext_attrs | |
| 726 return ('CustomIndexedGetter' in ext_attrs or | |
| 727 'NumericIndexedGetter' in ext_attrs) | |
| 728 | |
| 714 def _EmitNativeIndexGetter(self, element_type): | 729 def _EmitNativeIndexGetter(self, element_type): |
| 715 dart_declaration = '%s operator[](int index)' % element_type | 730 dart_declaration = '%s operator[](int index)' % element_type |
| 716 self._GenerateNativeBinding('numericIndexGetter', 2, dart_declaration, | 731 self._GenerateNativeBinding('numericIndexGetter', 2, dart_declaration, |
| 717 'Callback', True) | 732 'Callback', True) |
| 718 | 733 |
| 734 def _HasNativeIndexSetter(self): | |
| 735 return 'CustomIndexedSetter' in self._interface.ext_attrs | |
| 736 | |
| 719 def _EmitNativeIndexSetter(self, element_type): | 737 def _EmitNativeIndexSetter(self, element_type): |
| 720 dart_declaration = 'void operator[]=(int index, %s value)' % element_type | 738 dart_declaration = 'void operator[]=(int index, %s value)' % element_type |
| 721 self._GenerateNativeBinding('numericIndexSetter', 3, dart_declaration, | 739 self._GenerateNativeBinding('numericIndexSetter', 3, dart_declaration, |
| 722 'Callback', True) | 740 'Callback', True) |
| 723 | 741 |
| 724 def _AddOperation(self, info): | 742 def _AddOperation(self, info): |
| 725 """ | 743 """ |
| 726 Arguments: | 744 Arguments: |
| 727 info: An OperationInfo object. | 745 info: An OperationInfo object. |
| 728 """ | 746 """ |
| (...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1121 def _InstanceOfNode(database, interface): | 1139 def _InstanceOfNode(database, interface): |
| 1122 if interface.id == 'Node': | 1140 if interface.id == 'Node': |
| 1123 return True | 1141 return True |
| 1124 for parent in interface.parents: | 1142 for parent in interface.parents: |
| 1125 if not database.HasInterface(parent.type.id): | 1143 if not database.HasInterface(parent.type.id): |
| 1126 continue | 1144 continue |
| 1127 parent_interface = database.GetInterface(parent.type.id) | 1145 parent_interface = database.GetInterface(parent.type.id) |
| 1128 if _InstanceOfNode(database, parent_interface): | 1146 if _InstanceOfNode(database, parent_interface): |
| 1129 return True | 1147 return True |
| 1130 return False | 1148 return False |
| OLD | NEW |