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 import emitter | 9 import emitter |
| 10 | 10 |
| (...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 925 '\n' | 925 '\n' |
| 926 ' $CTOR.fromList(List<$TYPE> list);\n' | 926 ' $CTOR.fromList(List<$TYPE> list);\n' |
| 927 '\n' | 927 '\n' |
| 928 ' $CTOR.fromBuffer(ArrayBuffer buffer,' | 928 ' $CTOR.fromBuffer(ArrayBuffer buffer,' |
| 929 ' [int byteOffset, int length]);\n', | 929 ' [int byteOffset, int length]);\n', |
| 930 CTOR=self._interface.id, | 930 CTOR=self._interface.id, |
| 931 TYPE=self._shared.DartType(element_type)) | 931 TYPE=self._shared.DartType(element_type)) |
| 932 | 932 |
| 933 self._GenerateEvents() | 933 self._GenerateEvents() |
| 934 | 934 |
| 935 old_backend = self._backend | |
| 936 if not old_backend.ImplementsMergedMembers(): | |
| 937 self._backend = HtmlGeneratorDummyBackend() | |
| 935 for merged_interface in _merged_html_interfaces: | 938 for merged_interface in _merged_html_interfaces: |
| 936 if _merged_html_interfaces[merged_interface] == self._interface.id: | 939 if _merged_html_interfaces[merged_interface] == self._interface.id: |
| 937 merged_interface = self._database.GetInterface(merged_interface) | 940 merged_interface = self._database.GetInterface(merged_interface) |
| 938 self.AddMembers(merged_interface) | 941 self.AddMembers(merged_interface) |
| 939 self._backend.AddMergedMembers(merged_interface) | 942 self._backend = old_backend |
| 940 | 943 |
| 941 self._backend.AddMembers(self._interface) | 944 def AddIndexer(self, element_type): |
| 942 self._backend.AddSecondaryMembers(self._interface) | 945 self._backend.AddIndexer(element_type) |
| 943 self._backend.FinishInterface() | 946 |
| 947 def AmendIndexer(self, element_type): | |
| 948 self._backend.AmendIndexer(element_type) | |
| 944 | 949 |
| 945 def AddAttribute(self, attribute): | 950 def AddAttribute(self, attribute): |
| 951 self._backend.AddAttribute(attribute) | |
| 952 | |
| 946 getter = attribute | 953 getter = attribute |
| 947 setter = attribute if not IsReadOnly(attribute) else None | 954 setter = attribute if not IsReadOnly(attribute) else None |
| 948 dom_name = DartDomNameOfAttribute(getter) | 955 dom_name = DartDomNameOfAttribute(getter) |
| 949 html_getter_name = self._shared.RenameInHtmlLibrary( | 956 html_getter_name = self._shared.RenameInHtmlLibrary( |
| 950 self._interface.id, dom_name, 'get:') | 957 self._interface.id, dom_name, 'get:') |
| 951 html_setter_name = self._shared.RenameInHtmlLibrary( | 958 html_setter_name = self._shared.RenameInHtmlLibrary( |
| 952 self._interface.id, dom_name, 'set:') | 959 self._interface.id, dom_name, 'set:') |
| 953 | 960 |
| 954 if not html_getter_name or self._shared.IsPrivate(html_getter_name): | 961 if not html_getter_name or self._shared.IsPrivate(html_getter_name): |
| 955 getter = None | 962 getter = None |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 991 self._members_emitter.Emit('\n /** @domName $DOMINTERFACE.$DOMNAME */', | 998 self._members_emitter.Emit('\n /** @domName $DOMINTERFACE.$DOMNAME */', |
| 992 DOMINTERFACE=info.overloads[0].doc_js_interface_name, | 999 DOMINTERFACE=info.overloads[0].doc_js_interface_name, |
| 993 DOMNAME=info.name) | 1000 DOMNAME=info.name) |
| 994 | 1001 |
| 995 self._members_emitter.Emit('\n' | 1002 self._members_emitter.Emit('\n' |
| 996 ' $TYPE $NAME($PARAMS);\n', | 1003 ' $TYPE $NAME($PARAMS);\n', |
| 997 TYPE=self._shared.DartType(info.type_name), | 1004 TYPE=self._shared.DartType(info.type_name), |
| 998 NAME=html_name, | 1005 NAME=html_name, |
| 999 PARAMS=info.ParametersInterfaceDeclaration( | 1006 PARAMS=info.ParametersInterfaceDeclaration( |
| 1000 self._shared.DartType)) | 1007 self._shared.DartType)) |
| 1008 self._backend.AddOperation(info) | |
| 1009 | |
| 1010 def AddStaticOperation(self, info): | |
| 1011 self._backend.AddStaticOperation(info) | |
| 1001 | 1012 |
| 1002 def FinishInterface(self): | 1013 def FinishInterface(self): |
| 1003 pass | 1014 self._backend.AddSecondaryMembers(self._interface) |
| 1015 self._backend.FinishInterface() | |
| 1004 | 1016 |
| 1005 def AddConstant(self, constant): | 1017 def AddConstant(self, constant): |
| 1006 type = TypeOrNothing(DartType(constant.type.id), constant.type.id) | 1018 type = TypeOrNothing(DartType(constant.type.id), constant.type.id) |
| 1007 self._members_emitter.Emit('\n static final $TYPE$NAME = $VALUE;\n', | 1019 self._members_emitter.Emit('\n static final $TYPE$NAME = $VALUE;\n', |
| 1008 NAME=constant.id, | 1020 NAME=constant.id, |
| 1009 TYPE=type, | 1021 TYPE=type, |
| 1010 VALUE=constant.value) | 1022 VALUE=constant.value) |
| 1023 self._backend.AddConstant(constant) | |
| 1011 | 1024 |
| 1012 def _GenerateEvents(self): | 1025 def _GenerateEvents(self): |
| 1013 emit_events, event_attrs = self._shared.GetEventAttributes(self._interface) | 1026 emit_events, event_attrs = self._shared.GetEventAttributes(self._interface) |
| 1014 if not emit_events: | 1027 if not emit_events: |
| 1015 return | 1028 return |
| 1016 | 1029 |
| 1017 self._shared._event_classes.add(self._interface.id) | 1030 self._shared._event_classes.add(self._interface.id) |
| 1018 events_interface = self._html_interface_name + 'Events' | 1031 events_interface = self._html_interface_name + 'Events' |
| 1019 events_class = '_%sImpl' % events_interface | 1032 events_class = '_%sImpl' % events_interface |
| 1020 parent_events_interface = self._shared.GetParentEventsClass(self._interface) | 1033 parent_events_interface = self._shared.GetParentEventsClass(self._interface) |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1062 'EventTarget.removeEventListener, EventTarget.dispatchEvent' | 1075 'EventTarget.removeEventListener, EventTarget.dispatchEvent' |
| 1063 '\n */' | 1076 '\n */' |
| 1064 '\n $TYPE get on();\n', | 1077 '\n $TYPE get on();\n', |
| 1065 TYPE=events_interface) | 1078 TYPE=events_interface) |
| 1066 | 1079 |
| 1067 self._implementation_members_emitter.Emit( | 1080 self._implementation_members_emitter.Emit( |
| 1068 '\n $TYPE get on() =>\n new $TYPE(this);\n', | 1081 '\n $TYPE get on() =>\n new $TYPE(this);\n', |
| 1069 TYPE=events_class) | 1082 TYPE=events_class) |
| 1070 | 1083 |
| 1071 | 1084 |
| 1085 class HtmlGeneratorDummyBackend(object): | |
| 1086 def AddAttribute(self, attribute): | |
| 1087 pass | |
| 1088 | |
| 1089 def AddOperation(self, info): | |
| 1090 pass | |
| 1091 | |
| 1092 | |
| 1072 # ------------------------------------------------------------------------------ | 1093 # ------------------------------------------------------------------------------ |
| 1073 | 1094 |
| 1074 # TODO(jmesserly): inheritance is probably not the right way to factor this long | 1095 # TODO(jmesserly): inheritance is probably not the right way to factor this long |
| 1075 # term, but it makes merging better for now. | 1096 # term, but it makes merging better for now. |
| 1076 class HtmlFrogClassGenerator(FrogInterfaceGenerator): | 1097 class HtmlFrogClassGenerator(FrogInterfaceGenerator): |
| 1077 """Generates a Frog class for the dart:html library from a DOM IDL | 1098 """Generates a Frog class for the dart:html library from a DOM IDL |
| 1078 interface. | 1099 interface. |
| 1079 """ | 1100 """ |
| 1080 | 1101 |
| 1081 def __init__(self, system, interface): | 1102 def __init__(self, system, interface): |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 1100 return os.path.join(self._system._output_dir, 'html', 'frog', | 1121 return os.path.join(self._system._output_dir, 'html', 'frog', |
| 1101 '_%sFactoryProvider.dart' % self._html_interface_name) | 1122 '_%sFactoryProvider.dart' % self._html_interface_name) |
| 1102 | 1123 |
| 1103 def FilePathForDartElementsFactoryProviderImplementation(self): | 1124 def FilePathForDartElementsFactoryProviderImplementation(self): |
| 1104 return os.path.join(self._system._output_dir, 'html', 'frog', | 1125 return os.path.join(self._system._output_dir, 'html', 'frog', |
| 1105 '_Elements.dart') | 1126 '_Elements.dart') |
| 1106 | 1127 |
| 1107 def SetImplementationEmitter(self, implementation_emitter): | 1128 def SetImplementationEmitter(self, implementation_emitter): |
| 1108 self._dart_code = implementation_emitter | 1129 self._dart_code = implementation_emitter |
| 1109 | 1130 |
| 1110 def AddMergedMembers(self, merged_interface): | 1131 def ImplementsMergedMembers(self): |
|
Anton Muhin
2012/07/05 16:07:00
that could probably be a simple field
| |
| 1111 self.AddMembers(merged_interface) | 1132 return True |
| 1112 | 1133 |
| 1113 def _ImplClassName(self, type_name): | 1134 def _ImplClassName(self, type_name): |
| 1114 return self._shared._ImplClassName(type_name) | 1135 return self._shared._ImplClassName(type_name) |
| 1115 | 1136 |
| 1116 def _NarrowToImplementationType(self, type_name): | 1137 def _NarrowToImplementationType(self, type_name): |
| 1117 if self._ShouldNarrowToImplementationType(type_name): | 1138 if self._ShouldNarrowToImplementationType(type_name): |
| 1118 return self._ImplClassName(self._shared.DartType(type_name)) | 1139 return self._ImplClassName(self._shared.DartType(type_name)) |
| 1119 return self._shared.DartType(type_name) | 1140 return self._shared.DartType(type_name) |
| 1120 | 1141 |
| 1121 def StartInterface(self): | 1142 def StartInterface(self): |
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1401 Collect(database.GetInterface(parent.type.id), | 1422 Collect(database.GetInterface(parent.type.id), |
| 1402 seen, collected) | 1423 seen, collected) |
| 1403 | 1424 |
| 1404 inheritance_closure = {} | 1425 inheritance_closure = {} |
| 1405 for interface in database.GetInterfaces(): | 1426 for interface in database.GetInterfaces(): |
| 1406 seen = set() | 1427 seen = set() |
| 1407 collected = [] | 1428 collected = [] |
| 1408 Collect(interface, seen, collected) | 1429 Collect(interface, seen, collected) |
| 1409 inheritance_closure[interface.id] = collected | 1430 inheritance_closure[interface.id] = collected |
| 1410 return inheritance_closure | 1431 return inheritance_closure |
| OLD | NEW |