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 system to generate | 6 """This module provides shared functionality for the system to generate |
| 7 Dart:html APIs from the IDL database.""" | 7 Dart:html APIs from the IDL database.""" |
| 8 | 8 |
| 9 from systemfrog import * | 9 from systemfrog import * |
| 10 from systeminterface import * | 10 from systeminterface import * |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 246 "Node.get:prefix", | 246 "Node.get:prefix", |
| 247 "Node.set:prefix", | 247 "Node.set:prefix", |
| 248 "Node.get:DOCUMENT_POSITION_PRECEDING", | 248 "Node.get:DOCUMENT_POSITION_PRECEDING", |
| 249 "Node.get:nodeValue", | 249 "Node.get:nodeValue", |
| 250 "Node.set:nodeValue", | 250 "Node.set:nodeValue", |
| 251 "Node.get:CDATA_SECTION_NODE", | 251 "Node.get:CDATA_SECTION_NODE", |
| 252 "Node.get:nodeName", | 252 "Node.get:nodeName", |
| 253 "Node.lookupPrefix", | 253 "Node.lookupPrefix", |
| 254 "Node.get:PROCESSING_INSTRUCTION_NODE", | 254 "Node.get:PROCESSING_INSTRUCTION_NODE", |
| 255 "IFrameElement.get:contentDocument", | 255 "IFrameElement.get:contentDocument", |
| 256 "IFrameElement.get:contentWindow", | |
| 257 "Window.get:frameElement", | 256 "Window.get:frameElement", |
| 258 ]) | 257 ]) |
| 259 | 258 |
| 260 _html_library_custom = set([ | 259 _html_library_custom = set([ |
| 261 'Document.querySelector', | 260 'Document.querySelector', |
| 261 'IFrameElement.get:contentWindow', | |
|
Anton Muhin
2012/05/24 17:16:58
why this move?
podivilov
2012/05/25 12:00:35
contentWindow is not removed from dart:html, it ju
| |
| 262 'Window.get:document', | 262 'Window.get:document', |
| 263 'Window.get:top', | 263 'Window.get:top', |
| 264 ]) | 264 ]) |
| 265 | 265 |
| 266 # Events without onEventName attributes in the IDL we want to support. | 266 # Events without onEventName attributes in the IDL we want to support. |
| 267 # We can automatically extract most event event names by checking for | 267 # We can automatically extract most event event names by checking for |
| 268 # onEventName methods in the IDL but some events aren't listed so we need | 268 # onEventName methods in the IDL but some events aren't listed so we need |
| 269 # to manually add them here so that they are easy for users to find. | 269 # to manually add them here so that they are easy for users to find. |
| 270 _html_manual_events = { | 270 _html_manual_events = { |
| 271 'Element': ['touchleave', 'touchenter', 'webkitTransitionEnd'], | 271 'Element': ['touchleave', 'touchenter', 'webkitTransitionEnd'], |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 542 | 542 |
| 543 # ------------------------------------------------------------------------------ | 543 # ------------------------------------------------------------------------------ |
| 544 class HtmlSystemShared(object): | 544 class HtmlSystemShared(object): |
| 545 | 545 |
| 546 def __init__(self, database): | 546 def __init__(self, database): |
| 547 self._event_classes = set() | 547 self._event_classes = set() |
| 548 self._seen_event_names = {} | 548 self._seen_event_names = {} |
| 549 self._database = database | 549 self._database = database |
| 550 self._inheritance_closure = _ComputeInheritanceClosure(database) | 550 self._inheritance_closure = _ComputeInheritanceClosure(database) |
| 551 | 551 |
| 552 def _AllowInHtmlLibrary(self, interface, member, member_prefix): | 552 def _Matches(self, interface_name, member, member_prefix, candidates): |
| 553 return not self._Matches(interface, member, member_prefix, | 553 for ancestor_name in self._AllAncestorInterfaces(interface_name): |
| 554 _html_library_remove) | 554 if (DartType(ancestor_name) + '.' + member in candidates or |
| 555 | 555 DartType(ancestor_name) + '.' + member_prefix + member in candidates): |
| 556 def _Matches(self, interface, member, member_prefix, candidates): | |
| 557 for interface_name in self._AllAncestorInterfaces(interface): | |
| 558 if (DartType(interface_name) + '.' + member in candidates or | |
| 559 DartType(interface_name) + '.' + member_prefix + member in candidates) : | |
| 560 return True | 556 return True |
| 561 return False | 557 return False |
| 562 | 558 |
| 563 def _AllAncestorInterfaces(self, interface): | 559 def _AllAncestorInterfaces(self, interface_name): |
| 564 return [interface.id] + self._inheritance_closure[interface.id] | 560 return [interface_name] + self._inheritance_closure[interface_name] |
| 565 | 561 |
| 566 def RenameInHtmlLibrary(self, interface, member, member_prefix='', | 562 def RenameInHtmlLibrary(self, interface_name, member, member_prefix='', |
| 567 implementation_class=False): | 563 implementation_class=False): |
| 568 """ | 564 """ |
| 569 Returns the name of the member in the HTML library or None if the member is | 565 Returns the name of the member in the HTML library or None if the member is |
| 570 suppressed in the HTML library | 566 suppressed in the HTML library |
| 571 """ | 567 """ |
| 572 if not self._AllowInHtmlLibrary(interface, member, member_prefix): | 568 if self._Matches(interface_name, member, member_prefix, |
| 569 _html_library_remove): | |
| 573 return None | 570 return None |
| 574 | 571 |
| 575 target_name = member | 572 target_name = member |
| 576 for interface_name in self._AllAncestorInterfaces(interface): | 573 for ancestor_name in self._AllAncestorInterfaces(interface_name): |
|
Anton Muhin
2012/05/24 17:16:58
it looks like now you can merge this logic into _M
podivilov
2012/05/25 12:00:35
Could you please clarify? I don't see how it can b
Anton Muhin
2012/05/25 12:04:29
Sorry.
It looks like the loop below is almost _Ma
podivilov
2012/05/25 12:16:32
_Matches works with sets, while _html_library_rena
Anton Muhin
2012/05/25 12:17:45
I think it's worth it, but up to you.
On 2012/05/
podivilov
2012/05/25 12:37:54
Done.
Anton Muhin
2012/05/25 12:39:16
Thanks a lot! Still LGTM
On 2012/05/25 12:37:54,
| |
| 577 name = interface_name + '.' + member | 574 name = ancestor_name + '.' + member |
| 578 if name in _html_library_renames: | 575 if name in _html_library_renames: |
| 579 target_name = _html_library_renames[name] | 576 target_name = _html_library_renames[name] |
| 580 name = interface.id + '.' + member_prefix + member | 577 name = interface_name + '.' + member_prefix + member |
| 581 if name in _html_library_renames: | 578 if name in _html_library_renames: |
| 582 target_name = _html_library_renames[name] | 579 target_name = _html_library_renames[name] |
| 583 | 580 |
| 584 if not target_name.startswith('_'): | 581 if not target_name.startswith('_'): |
| 585 if self._PrivateInHtmlLibrary(interface, member, member_prefix): | 582 if self._Matches(interface_name, member, member_prefix, |
| 583 _private_html_members): | |
| 586 if not target_name.startswith('$dom_'): # e.g. $dom_svgClassName | 584 if not target_name.startswith('$dom_'): # e.g. $dom_svgClassName |
| 587 target_name = '$dom_' + target_name | 585 target_name = '$dom_' + target_name |
|
Anton Muhin
2012/05/24 17:16:58
this works by a chance as you don't account for me
podivilov
2012/05/25 12:00:35
member_prefix is passed to self._Matches above. Am
Anton Muhin
2012/05/25 12:04:29
Yes, sorry, I was wrong.
On 2012/05/25 12:00:35,
| |
| 588 | 586 |
| 589 # No rename required | |
| 590 return target_name | 587 return target_name |
| 591 | 588 |
| 592 def _PrivateInHtmlLibrary(self, interface, member, member_prefix): | |
| 593 return self._Matches(interface, member, member_prefix, | |
| 594 _private_html_members) | |
| 595 | |
| 596 def IsCustomInHtmlLibrary(self, interface, member, member_prefix=''): | 589 def IsCustomInHtmlLibrary(self, interface, member, member_prefix=''): |
| 597 return self._Matches(interface, member, member_prefix, | 590 return self._Matches(interface.id, member, member_prefix, |
| 598 _html_library_custom) | 591 _html_library_custom) |
| 599 | 592 |
| 600 # TODO(jacobr): this already exists | 593 # TODO(jacobr): this already exists |
| 601 def _TraverseParents(self, interface, callback): | 594 def _TraverseParents(self, interface, callback): |
| 602 for parent in interface.parents: | 595 for parent in interface.parents: |
| 603 parent_id = parent.type.id | 596 parent_id = parent.type.id |
| 604 if self._database.HasInterface(parent_id): | 597 if self._database.HasInterface(parent_id): |
| 605 parent_interface = self._database.GetInterface(parent_id) | 598 parent_interface = self._database.GetInterface(parent_id) |
| 606 callback(parent_interface) | 599 callback(parent_interface) |
| 607 self._TraverseParents(parent_interface, callback) | 600 self._TraverseParents(parent_interface, callback) |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 830 PARAMS=constructor_info.ParametersInterfaceDeclaration()) | 823 PARAMS=constructor_info.ParametersInterfaceDeclaration()) |
| 831 for param in constructor_info.param_infos: | 824 for param in constructor_info.param_infos: |
| 832 inits.Emit(' if ($E != null) _e.$E = $E;\n', E=param.name) | 825 inits.Emit(' if ($E != null) _e.$E = $E;\n', E=param.name) |
| 833 | 826 |
| 834 return (constructor_info, info.factory_provider_name) | 827 return (constructor_info, info.factory_provider_name) |
| 835 | 828 |
| 836 | 829 |
| 837 def AddAttribute(self, getter, setter): | 830 def AddAttribute(self, getter, setter): |
| 838 dom_name = DartDomNameOfAttribute(getter) | 831 dom_name = DartDomNameOfAttribute(getter) |
| 839 html_getter_name = self._shared.RenameInHtmlLibrary( | 832 html_getter_name = self._shared.RenameInHtmlLibrary( |
| 840 self._interface, dom_name, 'get:') | 833 self._interface.id, dom_name, 'get:') |
| 841 html_setter_name = self._shared.RenameInHtmlLibrary( | 834 html_setter_name = self._shared.RenameInHtmlLibrary( |
| 842 self._interface, dom_name, 'set:') | 835 self._interface.id, dom_name, 'set:') |
| 843 | 836 |
| 844 if not html_getter_name or self._shared.IsPrivate(html_getter_name): | 837 if not html_getter_name or self._shared.IsPrivate(html_getter_name): |
| 845 getter = None | 838 getter = None |
| 846 if not html_setter_name or self._shared.IsPrivate(html_setter_name): | 839 if not html_setter_name or self._shared.IsPrivate(html_setter_name): |
| 847 setter = None | 840 setter = None |
| 848 if not getter and not setter: | 841 if not getter and not setter: |
| 849 return | 842 return |
| 850 | 843 |
| 851 # We don't yet handle inconsistent renames of the getter and setter yet. | 844 # We don't yet handle inconsistent renames of the getter and setter yet. |
| 852 if html_getter_name and html_setter_name: | 845 if html_getter_name and html_setter_name: |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 869 raise Exception('Unexpected getter/setter combination %s %s' % | 862 raise Exception('Unexpected getter/setter combination %s %s' % |
| 870 (getter, setter)) | 863 (getter, setter)) |
| 871 | 864 |
| 872 def AddOperation(self, info): | 865 def AddOperation(self, info): |
| 873 """ | 866 """ |
| 874 Arguments: | 867 Arguments: |
| 875 operations - contains the overloads, one or more operations with the same | 868 operations - contains the overloads, one or more operations with the same |
| 876 name. | 869 name. |
| 877 """ | 870 """ |
| 878 html_name = self._shared.RenameInHtmlLibrary( | 871 html_name = self._shared.RenameInHtmlLibrary( |
| 879 self._interface, info.name) | 872 self._interface.id, info.name) |
| 880 if html_name and not self._shared.IsPrivate(html_name): | 873 if html_name and not self._shared.IsPrivate(html_name): |
| 881 self._members_emitter.Emit('\n /** @domName $DOMINTERFACE.$DOMNAME */', | 874 self._members_emitter.Emit('\n /** @domName $DOMINTERFACE.$DOMNAME */', |
| 882 DOMINTERFACE=info.overloads[0].doc_js_interface_name, | 875 DOMINTERFACE=info.overloads[0].doc_js_interface_name, |
| 883 DOMNAME=info.name) | 876 DOMNAME=info.name) |
| 884 | 877 |
| 885 self._members_emitter.Emit('\n' | 878 self._members_emitter.Emit('\n' |
| 886 ' $TYPE $NAME($PARAMS);\n', | 879 ' $TYPE $NAME($PARAMS);\n', |
| 887 TYPE=info.type_name, | 880 TYPE=info.type_name, |
| 888 NAME=html_name, | 881 NAME=html_name, |
| 889 PARAMS=info.ParametersInterfaceDeclaration()) | 882 PARAMS=info.ParametersInterfaceDeclaration()) |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1055 template_file = 'immutable_list_mixin.darttemplate' | 1048 template_file = 'immutable_list_mixin.darttemplate' |
| 1056 template = self._system._templates.Load(template_file) | 1049 template = self._system._templates.Load(template_file) |
| 1057 self._members_emitter.Emit(template, E=DartType(element_type)) | 1050 self._members_emitter.Emit(template, E=DartType(element_type)) |
| 1058 | 1051 |
| 1059 def AddAttribute(self, getter, setter): | 1052 def AddAttribute(self, getter, setter): |
| 1060 dom_name = DartDomNameOfAttribute(getter or setter) | 1053 dom_name = DartDomNameOfAttribute(getter or setter) |
| 1061 html_getter_name = None | 1054 html_getter_name = None |
| 1062 if not self._shared.IsCustomInHtmlLibrary( | 1055 if not self._shared.IsCustomInHtmlLibrary( |
| 1063 self._interface, dom_name, 'get:'): | 1056 self._interface, dom_name, 'get:'): |
| 1064 html_getter_name = self._shared.RenameInHtmlLibrary( | 1057 html_getter_name = self._shared.RenameInHtmlLibrary( |
| 1065 self._interface, dom_name, 'get:', | 1058 self._interface.id, dom_name, 'get:', |
| 1066 implementation_class=True) | 1059 implementation_class=True) |
| 1067 html_setter_name = None | 1060 html_setter_name = None |
| 1068 if not self._shared.IsCustomInHtmlLibrary( | 1061 if not self._shared.IsCustomInHtmlLibrary( |
| 1069 self._interface, dom_name, 'set:'): | 1062 self._interface, dom_name, 'set:'): |
| 1070 html_setter_name = self._shared.RenameInHtmlLibrary( | 1063 html_setter_name = self._shared.RenameInHtmlLibrary( |
| 1071 self._interface, dom_name, 'set:', | 1064 self._interface.id, dom_name, 'set:', |
| 1072 implementation_class=True) | 1065 implementation_class=True) |
| 1073 | 1066 |
| 1074 if not html_getter_name: | 1067 if not html_getter_name: |
| 1075 getter = None | 1068 getter = None |
| 1076 if not html_setter_name: | 1069 if not html_setter_name: |
| 1077 setter = None | 1070 setter = None |
| 1078 | 1071 |
| 1079 if not getter and not setter: | 1072 if not getter and not setter: |
| 1080 return | 1073 return |
| 1081 | 1074 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1156 | 1149 |
| 1157 def AddOperation(self, info): | 1150 def AddOperation(self, info): |
| 1158 """ | 1151 """ |
| 1159 Arguments: | 1152 Arguments: |
| 1160 info: An OperationInfo object. | 1153 info: An OperationInfo object. |
| 1161 """ | 1154 """ |
| 1162 if self._shared.IsCustomInHtmlLibrary(self._interface, info.name): | 1155 if self._shared.IsCustomInHtmlLibrary(self._interface, info.name): |
| 1163 return | 1156 return |
| 1164 | 1157 |
| 1165 html_name = self._shared.RenameInHtmlLibrary( | 1158 html_name = self._shared.RenameInHtmlLibrary( |
| 1166 self._interface, info.name, implementation_class=True) | 1159 self._interface.id, info.name, implementation_class=True) |
| 1167 if not html_name: | 1160 if not html_name: |
| 1168 return | 1161 return |
| 1169 | 1162 |
| 1170 # Do we need a native body? | 1163 # Do we need a native body? |
| 1171 if html_name != info.declared_name: | 1164 if html_name != info.declared_name: |
| 1172 return_type = self._NarrowOutputType(info.type_name) | 1165 return_type = self._NarrowOutputType(info.type_name) |
| 1173 | 1166 |
| 1174 operation_emitter = self._members_emitter.Emit('$!SCOPE', | 1167 operation_emitter = self._members_emitter.Emit('$!SCOPE', |
| 1175 TYPE=return_type, | 1168 TYPE=return_type, |
| 1176 HTML_NAME=html_name, | 1169 HTML_NAME=html_name, |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1516 if name in self._base_members: # Avoid illegal Dart 'static override'. | 1509 if name in self._base_members: # Avoid illegal Dart 'static override'. |
| 1517 method_name = method_name + '_' + self._interface.id | 1510 method_name = method_name + '_' + self._interface.id |
| 1518 return method_name | 1511 return method_name |
| 1519 | 1512 |
| 1520 def AddAttribute(self, getter, setter): | 1513 def AddAttribute(self, getter, setter): |
| 1521 dom_name = DartDomNameOfAttribute(getter or setter) | 1514 dom_name = DartDomNameOfAttribute(getter or setter) |
| 1522 html_getter_name = None | 1515 html_getter_name = None |
| 1523 if not self._shared.IsCustomInHtmlLibrary( | 1516 if not self._shared.IsCustomInHtmlLibrary( |
| 1524 self._interface, dom_name, 'get:'): | 1517 self._interface, dom_name, 'get:'): |
| 1525 html_getter_name = self._shared.RenameInHtmlLibrary( | 1518 html_getter_name = self._shared.RenameInHtmlLibrary( |
| 1526 self._interface, dom_name, 'get:', | 1519 self._interface.id, dom_name, 'get:', |
| 1527 implementation_class=True) | 1520 implementation_class=True) |
| 1528 html_setter_name = None | 1521 html_setter_name = None |
| 1529 if not self._shared.IsCustomInHtmlLibrary( | 1522 if not self._shared.IsCustomInHtmlLibrary( |
| 1530 self._interface, dom_name, 'set:'): | 1523 self._interface, dom_name, 'set:'): |
| 1531 html_setter_name = self._shared.RenameInHtmlLibrary( | 1524 html_setter_name = self._shared.RenameInHtmlLibrary( |
| 1532 self._interface, dom_name, 'set:', | 1525 self._interface.id, dom_name, 'set:', |
| 1533 implementation_class=True) | 1526 implementation_class=True) |
| 1534 | 1527 |
| 1535 if getter and html_getter_name: | 1528 if getter and html_getter_name: |
| 1536 self._AddGetter(getter, html_getter_name) | 1529 self._AddGetter(getter, html_getter_name) |
| 1537 if setter and html_setter_name: | 1530 if setter and html_setter_name: |
| 1538 self._AddSetter(setter, html_setter_name) | 1531 self._AddSetter(setter, html_setter_name) |
| 1539 | 1532 |
| 1540 def _AddGetter(self, attr, html_name): | 1533 def _AddGetter(self, attr, html_name): |
| 1541 self._members_emitter.Emit( | 1534 self._members_emitter.Emit( |
| 1542 '\n' | 1535 '\n' |
| 1543 ' $TYPE get $(HTML_NAME)() => _wrap($(THIS).$DOM_NAME);\n', | 1536 ' $TYPE get $(HTML_NAME)() => _wrap($(THIS).$HTML_NAME);\n', |
| 1544 HTML_NAME=html_name, | 1537 HTML_NAME=html_name, |
| 1545 DOM_NAME=DartDomNameOfAttribute(attr), | |
| 1546 TYPE=DartType(attr.type.id), | 1538 TYPE=DartType(attr.type.id), |
| 1547 THIS=self.DomObjectName()) | 1539 THIS=self.DomObjectName()) |
| 1548 | 1540 |
| 1549 def _AddSetter(self, attr, html_name): | 1541 def _AddSetter(self, attr, html_name): |
| 1550 self._members_emitter.Emit( | 1542 self._members_emitter.Emit( |
| 1551 '\n' | 1543 '\n' |
| 1552 ' void set $(HTML_NAME)($TYPE value) { ' | 1544 ' void set $(HTML_NAME)($TYPE value) { ' |
| 1553 '$(THIS).$DOM_NAME = _unwrap(value); }\n', | 1545 '$(THIS).$HTML_NAME = _unwrap(value); }\n', |
| 1554 HTML_NAME=html_name, | 1546 HTML_NAME=html_name, |
| 1555 DOM_NAME=DartDomNameOfAttribute(attr), | |
| 1556 TYPE=DartType(attr.type.id), | 1547 TYPE=DartType(attr.type.id), |
| 1557 THIS=self.DomObjectName()) | 1548 THIS=self.DomObjectName()) |
| 1558 | 1549 |
| 1559 def AddSecondaryAttribute(self, interface, getter, setter): | 1550 def AddSecondaryAttribute(self, interface, getter, setter): |
| 1560 self._SecondaryContext(interface) | 1551 self._SecondaryContext(interface) |
| 1561 self.AddAttribute(getter, setter) | 1552 self.AddAttribute(getter, setter) |
| 1562 | 1553 |
| 1563 def AddSecondaryOperation(self, interface, info): | 1554 def AddSecondaryOperation(self, interface, info): |
| 1564 self._SecondaryContext(interface) | 1555 self._SecondaryContext(interface) |
| 1565 self.AddOperation(info) | 1556 self.AddOperation(info) |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1654 | 1645 |
| 1655 def AddOperation(self, info): | 1646 def AddOperation(self, info): |
| 1656 """ | 1647 """ |
| 1657 Arguments: | 1648 Arguments: |
| 1658 info: An OperationInfo object. | 1649 info: An OperationInfo object. |
| 1659 """ | 1650 """ |
| 1660 if self._shared.IsCustomInHtmlLibrary(self._interface, info.name): | 1651 if self._shared.IsCustomInHtmlLibrary(self._interface, info.name): |
| 1661 return | 1652 return |
| 1662 | 1653 |
| 1663 html_name = self._shared.RenameInHtmlLibrary( | 1654 html_name = self._shared.RenameInHtmlLibrary( |
| 1664 self._interface, info.name, implementation_class=True) | 1655 self._interface.id, info.name, implementation_class=True) |
| 1665 | 1656 |
| 1666 if not html_name: | 1657 if not html_name: |
| 1667 return | 1658 return |
| 1668 | 1659 |
| 1669 arguments = self._UnwrappedParameters(info, len(info.param_infos)) | 1660 arguments = self._UnwrappedParameters(info, len(info.param_infos)) |
| 1670 function_call = '%s.%s(%s)' % (self.DomObjectName(), info.name, arguments) | 1661 function_call = '%s.%s(%s)' % (self.DomObjectName(), html_name, arguments) |
| 1671 if info.type_name != 'void': | 1662 if info.type_name != 'void': |
| 1672 # We could place the logic for handling Document directly in _wrap | 1663 # We could place the logic for handling Document directly in _wrap |
| 1673 # but we chose to place it here so that bugs in the wrapper and | 1664 # but we chose to place it here so that bugs in the wrapper and |
| 1674 # wrapperless implementations are more consistent. | 1665 # wrapperless implementations are more consistent. |
| 1675 function_call = '_wrap(%s)' % function_call | 1666 function_call = '_wrap(%s)' % function_call |
| 1676 | 1667 |
| 1677 self._members_emitter.Emit( | 1668 self._members_emitter.Emit( |
| 1678 '\n' | 1669 '\n' |
| 1679 ' $TYPE $HTML_NAME($PARAMS) => $FUNCTION_CALL;\n', | 1670 ' $TYPE $HTML_NAME($PARAMS) => $FUNCTION_CALL;\n', |
| 1680 TYPE=info.type_name, | 1671 TYPE=info.type_name, |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 1701 Collect(database.GetInterface(parent.type.id), | 1692 Collect(database.GetInterface(parent.type.id), |
| 1702 seen, collected) | 1693 seen, collected) |
| 1703 | 1694 |
| 1704 inheritance_closure = {} | 1695 inheritance_closure = {} |
| 1705 for interface in database.GetInterfaces(): | 1696 for interface in database.GetInterfaces(): |
| 1706 seen = set() | 1697 seen = set() |
| 1707 collected = [] | 1698 collected = [] |
| 1708 Collect(interface, seen, collected) | 1699 Collect(interface, seen, collected) |
| 1709 inheritance_closure[interface.id] = collected | 1700 inheritance_closure[interface.id] = collected |
| 1710 return inheritance_closure | 1701 return inheritance_closure |
| OLD | NEW |